如何在 .emacs 中配置“org-latex-classes”?

如何在 .emacs 中配置“org-latex-classes”?

我使用 emacs org-mode 来跟踪笔记和待办事项。有时我希望使用官方公司样式将笔记导出为 latex 文件。为了获得正确的标题样式,我运行以下 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)

仅当我在运行 add-to-list 之前运行 org-export-dispatch 导出为 PDF 时,该命令才有效。

我对 elisp 和 Emacs 配置还算是个新手,对 Latex 的使用更是新手。所以如果有人能告诉我如何让命令在 .emacs 中工作,我将不胜感激。我猜想在加载 .emacs 时列表尚未创建,但我不知道如何让它工作。

答案1

使用以下内容:

(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

相关内容