Как сделать экспорт в режиме Org в LaTeX с определенной преамбулой? - PullRequest
19 голосов
/ 13 января 2012

Когда я делаю Cc Ce l для экспорта файла Org в LaTeX, он создает документ с определенной преамбулой.Вместо этой конкретной преамбулы я хотел бы использовать преамбулу по своему выбору.Скажите, что я хочу использовать следующую преамбулу:

% Don't forget to qpdf --linearize the final copy
\RequirePackage[l2tabu,orthodox]{nag}% Old habits die hard. All the same, there are commands, classes and packages which are outdated and superseded. nag provides routines to warn the user about the use of those.
\immediate\write18{sh ./vc}
\input{vc}% Version control macros (for \VCDateISO in \date) http://www.ctan.org/pkg/vc
\documentclass[a4paper,12pt]{article}% pt? doublepage?
%\usepackage{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}% Latin Modern (derivate of Knuth's CM)
\usepackage{fixltx2e}% \textsubscript and bugfixes for LaTeX
\usepackage{microtype}
\usepackage[strict=true]{csquotes}% Context-sensistive quotes. \enquote "" \enquote* ''. Use the integrated commands \textcquote and \blockcquote rather than biblatex internal commands to get contex sensistive quotes for them too. s/babel/autostyle in new version.
\usepackage[bookmarks,pdfborder={0 0 0}]{hyperref}% links and pdfinfo. MUST BE LOADED LAST!

\hypersetup{% Setup for hyperref
pdftitle    = {[Title from #+TITLE]},
pdfauthor   = {[Author from #+AUTHOR]}
}

Я знаю, что вы можете манипулировать тем, какие пакеты используются для каждого файла , как описано в руководстве , но я хочу этопреамбула, которая будет использоваться для всех файлов, если не указано иное.Преамбула, которую я хочу использовать, включает следующее:

  • деактивированные пакеты (например, geometry выше)
  • пакеты, загруженные RequirePackage
  • inputмакрос
  • \immediate\write18 макрос
  • комментарии после usepackage макрос
  • макрос hypersetup, который распознает #+TITLE и #+AUTHOR из файлов режима Org

Ответы [ 3 ]

15 голосов
/ 20 января 2012

Деактивированные пакеты (например, geometry выше)

Org-mode распознает синтаксис LaTeX внутри кодовых блоков LaTeX, а также при включении файлов LaTeX в контент. (См. Цитирование кода LaTeX .)

пакетов, загруженных RequirePackage

Как указано выше.

Входные макросы

Как указано выше.

\immediate\write18 макросы

Я полагаю, что это также должно быть, как указано выше, однако есть альтернативный метод решения этой проблемы Если вы создадите блок исходного кода типа sh с командой внутри него, Org оценит его при экспорте и выдаст желаемое поведение. Вы должны включить sh как тип языка babel, чтобы он работал.

(require 'ob-shell)

Вы также можете включить sh в качестве одного из языков, загружаемых babel, добавив его в org-babel-load-languages

(acons 'sh 't org-babel-load-languages)

Затем используйте блок кода, подобный следующему, чтобы запустить ваш ./vc

#+name: Test
#+begin_src sh :results output silent :exports results
  ./vc
#+end_src

Пока это идет до вашей строки \input{vc}, он должен запускать код и затем включать его. Просто следуйте за блоком кода с

#+LATEX: \input{vc}

И ваш контент должен быть включен.

Комментарии после использования макроса пакета

Если код находится внутри блока LaTeX, он должен распознавать его как LaTeX.

Макрос hypersetup, который распознает # + TITLE и # + AUTHOR из файлов режима Org.

Это должно быть включено в каждый документ, а не отдельно. Следующее обеспечит то, что вы хотите для своих макросов. Он не будет в преамбуле, однако он окажется в верхней части документа, и экспорт будет работать так, как ожидается (однако он не будет работать так, как ожидалось, если он будет добавлен через #+INCLUDE: из org.

#+begin_latex
  \hypersetup{% Setup for hyperref
  pdftitle    = {{{{TITLE}}}}, %Org macro to take from #+TITLE
  pdfauthor   = {{{{AUTHOR}}}} %Org macro to take from #+AUTHOR
  }
#+end_latex

Создание собственного класса экспорта латекса

Если вы будете следовать инструкциям в уроках ворга (см. Экспорт латекса в орг. ), вы можете создать свой собственный класс экспорта. Если вы хотите иметь полный контроль над пакетами в преамбуле, вам просто нужно:

(add-to-list 'org-export-latex-classes
             '("<CLASS NAME>"
               "\\documentclass{article}
               [NO-DEFAULT-PACKAGES]
               [NO-PACKAGES]"
               <insert desired sectioning configuration>))

Вы также можете добавить нужные пакеты между строками \\documentclass и [NO-DEFAULT-PACKAGES]. Альтернативой было бы добавить их в сам файл, используя:

#+LATEX_CLASS: <CLASS NAME>
#+LATEX_HEADER: \usepackage{package}
...

В качестве третьего варианта вы можете просто создать собственный файл .sty с нужными пакетами и т. Д. И включить его как один #+LATEX_HEADER:.

4 голосов
/ 13 января 2012

Это не отвечает на ваш вопрос, но позволяет вам делать то, что вы хотите.

(defun headless-latex ()
  "exports to a .tex file without any preamble"
  (interactive)
  (org-export-as-latex 3 nil nil nil t nil)
)

Эта функция экспортирует содержимое файла ORG-режима без преамбулы . Затем вы можете \input поместить его в файл с желаемой преамбулой. Дальнейшее чтение.

1 голос
/ 16 июля 2012

Я использую другой метод, чтобы добиться цели:

Определите класс (по какой-то странной причине я называю его для каждого файла . Вы можете назвать его как-нибудь еще). Поместите этот код в ваш .emacs :

;; per-file-class with minimal packages
(unless (find "per-file-class" org-export-latex-classes :key 'car
              :test 'equal)
  (add-to-list 'org-export-latex-classes
               '("per-file-class"
                 "\\documentclass{article}
                [NO-DEFAULT-PACKAGES]
                [EXTRA]"
                 ("\\section{%s}" . "\\section*{%s}")
                 ("\\subsection{%s}" . "\\subsection*{%s}")
                 ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                 ("\\paragraph{%s}" . "\\paragraph*{%s}")
                 ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))

Используйте этот класс в вашем орг-файле:

# + LaTeX_CLASS: для каждого класса файлов

# + LaTeX_CLASS_OPTIONS: [10pt, a4paper]

...