我正在尝试使用 TikZ“外部”库,自 PGF 2.10 起可用。这需要使用选项 -shell-escape 运行 pdfLaTeX。我通常使用选项从 AUCTeX 运行 pdfLaTeX
(TeX-PDF-mode t)
所以 Cc Cc 运行 pdfLaTeX。我可以在我的 LaTeX 文件中添加一行,以便 AUCTeX 知道只对此文件使用 -shell-escape 选项运行 pdfLaTeX,因为这显然是一个安全问题,并且默认情况下仅部分启用?我不知道这是否可行,但类似的事情是可能的。例如,请参阅 tex.sx 问题为特定文件强制使用不同的 TeX 引擎。如果可能的话,这可能会使用文件变量。
如果没有,我知道可以对 .emacs 中的所有文件进行全局自定义。目前,我也不确定如何做到这一点。最好通过 Mx customize,但我发现这些菜单相当混乱
例如http://thread.gmane.org/gmane.emacs.auctex.general/538David Kastrup 似乎认为每个文件的方法都是可行的。例如:
“无论如何,您可以使用文件变量部分来更改您想要的文件中命令。”
另请参阅http://thread.gmane.org/gmane.emacs.auctex.general/710
更新:基于来自 auctex 邮件列表的输入,这里的人建议的答案应该有效。不清楚为什么它不起作用,但问题可能特定于 Debian 软件包。Marcus Frings 向我指出他的错误报告在上述帖子中。底线是 Debian 软件包似乎存在问题,它在 vanilla auctex 中不存在,而且没人知道原因。维护者本应调查此事,但不幸的是,他对此毫无兴趣。
答案1
请注意,在 TL10 中,使用 允许进行有限的 FS 访问而无需 shell 转义\write18
。Miktex 可能有类似的东西。
我将以下内容添加到始终需要进行 shell 转义的文件中。
%%% LaTeX-command: "latex -shell-escape"
我的 .emacs 中还有以下代码片段,用于随时添加 shell 转义:
;; toggle shell escape using C-c C-t C-x
(defun TeX-toggle-escape nil (interactive)
"Toggle Shell Escape"
(setq LaTeX-command
(if (string= LaTeX-command "latex") "latex -shell-escape" "latex")))
(add-hook 'LaTeX-mode-hook
(lambda nil
(local-set-key (kbd "C-c C-t x") 'TeX-toggle-escape)))
编辑:这是一个更好的功能,它可以告诉您发生了什么:
;; toggel shell escape using C-c C-t C-x
(defun TeX-toggle-escape nil (interactive)
"Toggle Shell Escape"
(setq LaTeX-command
(if (string= LaTeX-command "latex") "latex -shell-escape"
"latex"))
(message (concat "shell escape "
(if (string= LaTeX-command "latex -shell-escape")
"enabled"
"disabled"))
))
(add-hook 'LaTeX-mode-hook
(lambda nil
(local-set-key (kbd "C-c C-t x") 'TeX-toggle-escape)))
答案2
全局自定义是通过输入
M-x customize-variable RET LaTeX-command RET
(正如 David Kastrup 所描述的http://thread.gmane.org/gmane.emacs.auctex.general/538)并更改 LaTeX 命令变量。他没有说应该将变量更改为什么,但答案来自默认值,即
latex
到
latex -shell-escape
如果设置并保存了它,它将在 .emacs 中显示为
(LaTeX-command "latex -shell-escape")
在custom-set-variables
列表中。
我仍然不知道如何根据每个文件执行此操作。
更新:前面的设置方法对我来说latex-command
不起作用xelatex
,但是这是对“使用 minted(源代码 LaTeX 包)和 emacs/auctex”的回答确实如此,即添加
(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")
)
)
到您的.emacs
文件中。
当然,使用局部变量设置每个文件比这两种方法都更好,因为-shell-escape
不需要全局启用。
答案3
解决方案 1:使用局部变量。在要允许使用 shell 转义的 LaTeX 文件末尾插入以下内容:
%%% Local Variables:
%%% LaTeX-command: "latex -shell-escape"
%%% End:
请注意,这仅在文件在 emacs 中关闭并重新打开后才适用。(您需要“本地变量:”和“结束:”行)。
解决方案 2:使用 LaTeX-command-style 自动为使用 pgf 包的每个文件启用 shell 转义(有点危险?)。将以下内容放入 .emacs 中:
(setq LaTeX-command-style
'(("^pgf$" "%(PDF)%(latex) -shell-escape %S%(PDFout)")
("" "%(PDF)%(latex) %S%(PDFout)")))
您也可以使用 emacs 定制系统进行设置。
答案4
Hendrik Vogt 的解决方案 1 对我来说不再有效(emacs 23.3.1,AUCTeX 版本 11.86)。相反,我使用 synctex 标志:
%%% Local Variables:
%%% TeX-source-correlate-mode: t
%%% TeX-synctex-tex-flags: "-synctex=1 -shell-escape"
%%% End: