【问题标题】:org-mode export to PDF source code block ill-formattedorg-mode 导出到 PDF 源代码块格式错误
【发布时间】:2019-08-07 16:41:27
【问题描述】:

我遇到了这个问题: 我的 org 文件带有源代码块,在导出为 PDF 时,源文件未正确导出。这是文件的内容:

#+TITLE: A Document with Emacs-Lisp Source Code

#+NAME:map_example
#+BEGIN_SRC emacs-lisp :exports code
(setq org-latex-pdf-process '("latexmk  -f -pdf %f"))
#+END_SRC

#+RESULTS: map_example
| latexmk  -f -pdf %f |

这是生成的 .tex 文件:

% Created 2019-08-07 Wed 13:22
% Intended LaTeX compiler: pdflatex
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{grffile}
\usepackage{longtable}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage[margin=2cm]{geometry}
\author{Yu (Aaron) Shen}
\date{\today}
\title{A Document with Emacs-Lisp Source Code}
\hypersetup{
 pdfauthor={Yu (Aaron) Shen},
 pdftitle={A Document with Emacs-Lisp Source Code},
 pdfkeywords={},
 pdfsubject={},
 pdfcreator={Emacs 26.2 (Org mode 9.2.3)}, 
 pdflang={English}}
\begin{document}

\maketitle
\tableofcontents

\lstset{language=Lisp,label=map_example,caption= ,captionpos=b,numbers=none}
\begin{lstlisting}
(setq org-latex-pdf-process '("latexmk  -f -pdf %f"))
\end{lstlisting}
\end{document}

这是Org LaTexOutput的输出:

Latexmk: Run number 1 of rule 'pdflatex'
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
Collected error summary (may duplicate other messages):
  pdflatex: Command for 'pdflatex' gave return code 256
Latexmk: Use the -f option to force complete processing,
 unless error was exceeding maximum runs of latex/pdflatex.

将org文件中生成的test.tex导出为PDF,手动执行如下命令:

latexmk  -f -pdf test.tex

错误跟踪存在致命错误:

*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd)
(/usr/share/texlive/texmf-dist/tex/latex/wasysym/uwasy.fd)
(/usr/share/texlive/texmf-dist/tex/latex/base/ulasy.fd)
! Undefined control sequence.
l.165 \lstset
             {language=Lisp,label=map_example,caption= ,captionpos=b,numbers...

?

我尝试将同一个文件导出到 HTML,它会产生预期的 HTML 渲染

我的 emacs/org 设置用于处理源代码的 PDF 导出。

我该如何调查和解决问题?

【问题讨论】:

  • .tex 文件是什么样的?变量org-latex-pdf-process的值是多少?
  • org-latex-pdf-process的值为("latexmk -pdf -quiet %f")
  • 您现在可能想摆脱-quiet,再试一次并检查*Org PDF LaTeX Output* 缓冲区以获取线索。如果是 LaTeX 问题,那应该提供一些信息。但是,如果这是一个 Org 模式问题,那么查看 .tex 文件的内容(如果您无法弄清楚发生了什么,请将其添加到您的问题中)是可行的方法。
  • .tex 文件有一个 \tableofcontents,所以 PDF 应该包含一个 TOC。但这需要两次运行 pdflatex,latexmk 没有这样做,我猜是因为它在第一次运行时出错了。您可能希望将 -f 标志添加到您的 org-latex-pdf-process 设置中。对于源代码块,您使用的是listings,由于没有称为“dart”的已知语言,它回退到Lisp,这很奇怪。
  • 您可能想尝试使用minted 方法来处理源块格式。您需要将org-latex-listings设置为minted,但您还需要安装minted LaTeX包和它所依赖的pygments包。 org-latex-listings 的文档字符串包含详细信息。

标签: emacs org-mode org-babel


【解决方案1】:

我已经尝试过你的代码,如果你在你的乳胶命令中添加“-shell-escape”应该可以解决问题。

#+BEGIN_SRC emacs-lisp :exports code
(setq org-latex-pdf-process '("latexmk -shell-escape -f -pdf %f"))
#+END_SRC

【讨论】: