Как мне настроить org-latex-классы в .emacs?

2969
Fredrik Forséll

Я использую emacs org-mode для отслеживания заметок и задач. Иногда я хочу экспортировать заметки в виде латексного файла, используя официальный фирменный стиль. Чтобы получить правильные стили заголовков, я запускаю следующую команду elisp:

(add-to-list 'org-latex-classes '("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ) 

К сожалению, это не работает в .emacs. Я получаю следующую ошибку:

Debugger entered--Lisp error: (void-variable org-latex-classes) (member (quote ("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) org-latex-classes) (if (member (quote ("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) org-latex-classes) org-latex-classes (setq org-latex-classes (cons (quote ("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) org-latex-classes))) eval((if (member (quote ("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) org-latex-classes) org-latex-classes (setq org-latex-classes (cons (quote ("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) org-latex-classes))) nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) 

Команда работает, только если я запустил org-export-dispatch для экспорта в PDF перед запуском add-to-list.

Я новичок в elisp и настройке Emacs, и еще больше новичок в использовании Latex. Так что, если кто-нибудь скажет мне, как заставить команду работать в .emacs, я был бы очень благодарен. Я предполагаю, что список еще не был создан, когда загружен .emacs, но я не знаю, как заставить это работать.

2

2 ответа на вопрос

4
Clément

Используйте следующее:

(with-eval-after-load 'ox-latex (add-to-list 'org-latex-classes '("report" "\\documentclass" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) 

Это настраивает переменную, как только загружается пакет ox-latex.

2
rvf0068

Список org-latex-classesопределен в ox-latex.el, так что вам нужно вставить (require 'ox-latex)в свой .emacsперед добавлением к нему.

Большое спасибо, работал! Для справки, как я должен знать эти вещи или узнавать их? Fredrik Forséll 9 лет назад 1
Нет нет нет. Нет причин замедлять запуск Emacs, загружая все org при запуске. Clément 8 лет назад 0

Похожие вопросы