2

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

(add-to-list 'org-latex-classes
              '("report"
                "\\documentclass{report}"
                ("\\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{report}" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) org-latex-classes)
  (if (member (quote ("report" "\\documentclass{report}" ("\\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{report}" ("\\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{report}" ("\\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{report}" ("\\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

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

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

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

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .