Emacs org-mode 使用 #+ATTR_LATEX 导出

Emacs org-mode 使用 #+ATTR_LATEX 导出

当我尝试导出这样的文件时:

#+LaTeX_CLASS: tufte

#+ATTR_LaTeX: :float t :options label={test}
#+begin_src c
    #include <iostream>
    using namespace std;

    int main() {
        cout << "Hello world!" << endl;
        return 0;
    }
#+end_src

options属性被忽略(它不会进入生成的文件tex)并且仅传递默认选项:

\begin{listing}[H]
\begin{minted}[frame=lines, linenos=true]{c}
#include <iostream>
using namespace std;

int main() {
    cout << "Hello world!" << endl;
    return 0;
}
\end{minted}
\end{listing}

知道为什么吗?我的 org 版本是 8.2.7c。

编辑:我的设置如下:

#+begin_src emacs-lisp
  (require 'ox-latex)
  (require 'org-latex)
  (add-to-list 'org-latex-packages-alist '("" "minted"))

  (setq org-latex-listings 'minted)

  (setq org-latex-minted-options
        '(("frame" "lines") ("linenos=true")))

  (setq org-latex-pdf-process (list "latexmk -pdf %f"))
#+end_src


** Tufte
#+begin_src emacs-lisp
(add-to-list 'org-latex-classes
               `("tufte"
                 "\\documentclass{tufte-handout}"
                 ("\\section{%s}" . "\\section*{%s}")
                 ("\\subsection{%s}" "\\newpage" "\\subsection*{%s}" "\\newpage")
                 ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                 ("\\paragraph{%s}" . "\\paragraph*{%s}")
                 ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
               )
#+end_src

答案1

卢卡斯,我自己不使用org-mode,但如果我有,作为示例,你问题中的第一个 MWE,并#+NAME在下一行后面添加,随后#+ATTR_LaTeX:跟着任何名称,你想要引用标签,文档编译得很好,只要三个类中的一个,即,report或是bookarticle中指定#+LaTeX_CLASS,而不是tufte

编辑:第二次编辑。是的,卢卡斯。一旦初始化文件加载了选项、环境、非环境以及介于两者之间的所有内容,选项、环境、非环境以及介于两者之间的所有内容就会被传递。

因此,为了获取铸造的选项、正确的默认选项以及获取选项的正确环境,初始化文件至少需要具备:

  (setq org-latex-listings 'minted)
  (setq org-latex-minted-options
     '(("frame" "lines") ("linenos=true")))

因此,您得到:

  \begin{listing}[H]
  \begin{minted}[frame=lines,linenos=true]{c}
  #include <iostream>
  using namespace std;

  int main() {
    cout << "Hello world!" << endl;
    return 0;
  }
  \end{minted}
  \label{ref:sourC}
  \end{listing}

例如:

  #+LaTeX_CLASS: book

  #+ATTR_LaTeX: :float t :options label={test}
  #+NAME: ref:source 
  #+begin_src c
      #include <iostream>
      using namespace std;

      int main() {
          cout << "Hello world!" << endl;
          return 0;
      }


  #+end_src

为您提供tex包含以下行的文件:

  \begin{figure}[H]
  \begin{verbatim}
  #include <iostream>
  using namespace std;

  int main() {
    cout << "Hello world!" << endl;
    return 0;
  }
  \end{verbatim}\label{ref:source}

  \end{figure}

答案2

根据的描述org-latex-listings,您还需要配置org-latex-pdf-process才能传递-shell-escape选项。以下对我有用:

(setq org-latex-pdf-process
      (mapcar
       (lambda (s)
         (replace-regexp-in-string "%latex " "%latex -shell-escape " s))
       org-latex-pdf-process))

相关内容