正如here中所解释的,我发现 minted 包对于源代码列表来说非常酷。
我的问题是如何将 minted 包与 AucTeX/emacs 一起使用? 对于命令行,我可以使用
pdflatex -shell-escape SOURCE
,但是
-shell-escape
?我的意思是,如何更改 C-c+C-c 的操作?-shell-escape
选项,我是否需要除 C-c+C-c以外的特殊密钥?或者说,使用起来没有任何问题就可以了吗?
-shell-escape
是做什么用的? Q1:您需要编辑AucTeX调用LaTeX的方式。一种方法是将以下内容添加到您的 .emacs 文件中:
(eval-after-load "tex"
'(setcdr (assoc "LaTeX" TeX-command-list)
'("%`%l%(mode) -shell-escape%' %t"
TeX-run-TeX nil (latex-mode doctex-mode) :help "Run LaTeX")
)
)
Q2:完成更改后,所有使用 C-c C-c 对 LaTeX 的调用都将使用
-shell-escape
选项。
Q3:参见康拉德的回答。请注意,此方法将为在 AucTeX 中编辑的所有文件启用
-shell-escape
,因此如果使用其他人的包或文件,可能会存在潜在的安全风险。
在 auctex 的最新版本中,看起来设置
TeX-command-extra-options
会更可靠,它就是为此目的而设计的,并且不会让您覆盖 TeX-command
的各种形式。据我了解(可能是错误的),这不能全局设置,但必须为每个文件设置。您可以使用钩子来完成此操作。例如,在 .emacs
中,您可以添加以下内容:
(add-hook 'TeX-mode-hook
(lambda ()
(setq TeX-command-extra-options "-shell-escape")
)
)
并且由于您没有完全覆盖 Latex 命令调用,其他功能仍然可以工作 - 例如使用
synctex
打开 (setq TeX-source-correlate-mode t)
支持 [这可能发生在钩子之外]。
我只能回答问题3:
“-shell-escape”是做什么用的?
minted 使用第三方应用程序
pygmentize
来处理源代码。出于安全原因,LaTeX 通常不允许调用其他应用程序(恶意包可能会调用任意代码)。要显式启用调用外部应用程序,您需要启用这种所谓的 shell 转义 – 在大多数 LaTeX 安装中,这是通过 -shell-escape
开关完成的。
.dir-locals.el
文件((latex-mode . ((TeX-command-extra-options . "-shell-escape")
(tex-start-options . "-shell-escape")
(eval
. (setq-local tex-verbatim-environments
(cons "minted" tex-verbatim-environments))))))
将上面的 .dir-locals.el 文件放在与使用 minted 的 Latex 文件相同的目录中。
这会导致 CtrlcCtrlc 使用
-shell-escape
选项。第一行将其设置为 AUCTeX,第二行将其设置为 emacs 的内置乳胶模式(当未安装 AUCTeX 时)。
文件的其余部分向 emacs 提示“minted”环境的样式应类似于逐字环境。通常,emacs 的 Latex 模式将下划线后面的字符显示为下标,例如_this_f或_example。
.emacs
文件?使用 .emacs 很方便,但有风险。全局启用
-shell-escape
被认为是危险的——默认情况下它没有打开是有原因的——应该谨慎使用。使用 .dir-locals.el 文件可以让您选择仅对实际需要的文档启用 -shell-escape
。