将 minted(源代码 LaTeX 包)与 emacs/auctex 一起使用

Posted

技术标签:

【中文标题】将 minted(源代码 LaTeX 包)与 emacs/auctex 一起使用【英文标题】:Using minted (source code LaTeX package) with emacs/auctex 【发布时间】:2011-03-19 01:09:03 【问题描述】:

正如here 中所解释的,我发现 minted 包对于源代码列表非常酷。

我的问题是如何在 AucTeX/emacs 中使用 minted 包? 对于命令行我可以使用pdflatex -shell-escape SOURCE,但是

Q1:如何修改 AucTeX 以插入 -shell-escape?我的意思是,如何更改 C-c+C-c 的动作? Q2 : 除了 C-c+C-c 之外,@987654324 是否需要特殊密钥? @ 选项?或者,是否可以毫无问题地使用它? Q3:-shell-escape 是干什么用的?

【问题讨论】:

【参考方案1】:

我只能回答问题3:

'-shell-escape' 是干什么用的?

minted 使用第三方应用程序pygmentize 来处理源代码。出于安全原因,LaTeX 通常不允许调用其他应用程序(恶意程序包可能会调用任意代码)。要显式启用调用外部应用程序,您需要启用这种所谓的转义到 shell——在大多数 LaTeX 安装中,这是通过 -shell-escape 开关完成的。

【讨论】:

【参考方案2】:

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,因此如果使用其他人的包或文件可能存在潜在的安全风险。

【讨论】:

@Mike 在底部的回答提供了一种在现代 AucTeX 版本中执行相同操作的更简单且干扰更少的方法。【参考方案3】:

在最近的 auctex 版本中,设置 TeX-command-extra-options 似乎会更可靠,它就是为此目的而设计的,不会让您覆盖 TeX-command 的各种形式。据我了解(可能是错误的),这不能全局设置,但必须为每个文件设置。你可以用钩子来做到这一点。例如,在.emacs 中,您可以添加以下内容:

(add-hook 'TeX-mode-hook
  (lambda ()
    (setq TeX-command-extra-options "-shell-escape")
  )
)

而且由于您没有完全覆盖 latex 命令调用,其他功能仍然可以使用 - 例如使用(setq TeX-source-correlate-mode t) 开启synctex 支持[这可能发生在挂钩之外]。

【讨论】:

您也可以将其添加到您的.dir-locals.el 以将其设置为一个文件夹中的所有文件 我尝试在 Emacs 24.5.1 (Ubuntu 16.04) 中将 TeX-command-extra-options 设置为缓冲区局部变量,但这似乎不起作用。您需要多长时间的版本?

以上是关于将 minted(源代码 LaTeX 包)与 emacs/auctex 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

LaTex实战笔记 2-插入 Python 程序代码块

使用 Python 代码片段编写 LaTeX 文档

使用 Minted 格式化 Netlogo 代码

如何使用 MiKTeX 在 TeXnicCenter 中运行 minted 包

无法使用 TeXStudio 编译 Minted 环境

如何获得 minted 包以呈现具有可复制缩进的代码块?