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

问题描述 投票:0回答:4

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

我的问题是如何将 minted 包与 AucTeX/emacs 一起使用? 对于命令行,我可以使用

pdflatex -shell-escape SOURCE
,但是

  • Q1 : 如何修改 AucTeX 以插入
    -shell-escape
    ?我的意思是,如何更改 C-c+C-c 的操作?
  • Q2 : 对于 -shell-escape 选项,我是否需要除 C-c+C-
    c
    以外的特殊密钥?或者说,使用起来没有任何问题就可以了吗?
  • Q3 :
    -shell-escape
    是做什么用的?
emacs latex auctex
4个回答
14
投票

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


11
投票

在 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)
支持 [这可能发生在钩子之外]。


7
投票

我只能回答问题3:

“-shell-escape”是做什么用的?

minted 使用第三方应用程序

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


0
投票

使用此
.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

© www.soinside.com 2019 - 2024. All rights reserved.