latexmk
有没有我可以使用预编译器选项在我的 LaTeX 源代码中文件?(例如,告诉latexmk
使用 XeLaTeX 而不是 PDFLaTeX 进行编译。)我知道如何对.latexmkrc
文件执行此操作,但如果我可以在源文件中执行此操作,对我来说会更有用。
答案1
这是在 arara 中使用 latexmk 的改进方法(感谢 Paulo 帮助我解决最初的灾难性混乱)。
首先,安装 aRaRa(你永远不会回头)
其次,将其剪切并粘贴到 arara 规则目录中名为的文件中xelatexmk.yaml
:
!config
# LaTeXmk with XeTeX rule for arara
# author: Brent Longborough
# last edited by: Brent Longborough
# made to work by: Paulo Cereda
identifier: xelatexmk
name: XeLaTeXmK
command: 'latexmk -e "$pdflatex=q/xelatex @{ action == "" ? "" : "--interaction=" + action } @{shell} @{ synctex == "" ? "--synctex=1" : synctex } @{expandoptions} %O %S/" -pdf @{file}.tex'
arguments:
- identifier: action
flag: '@{value}'
- identifier: shell
flag: '@{value.toLowerCase() == "yes" || value.toLowerCase() == "true" || value.toLowerCase() == "on" ? "--shell-escape" : "--no-shell-escape" }'
- identifier: synctex
flag: '@{value.toLowerCase() == "no" || value.toLowerCase() == "false" || value.toLowerCase() == "off" ? "--synctex=0" : "--synctex=1" }'
- identifier: expandoptions
flag: '@{value}'
然后,在你的 TeX 文件中,输入以下其中一个或者其他适合你的东西:
% arara: xelatexmk
% arara: xelatexmk: { synctex: no }
为 makeindex 添加可选样式文件指示器留给读者作为练习。
答案2
我认为 latexmk 不会对输入文件进行任何解析。它会解析输出/日志文件以确定要查看哪些文件等,但我很确定它实际上不会读取输入文件本身,这意味着它不会起作用。
我还没有充分探索过的一个选项可能是编写一个自己的小型解析器脚本,并将其指定为要使用的 LaTeX 处理程序。在脚本中,读取 .tex 文件,并检查您已决定的预处理指令,然后相应地选择正确的编译器、哪些选项等。
答案3
正如 mph 和 daleif 所建议的,我尝试了arara
。它看起来很有希望。安装和设置后,只需包含一系列描述编译过程的预编译器命令。例如,
% arara: xelatex
% arara: xelatex
\documentclass[12pt, a4paper, article, oneside]{memoir}
. . .
或者更复杂的设置,例如,
% arara: pdflatex
% arara: makeindex: { style: test.ist }
% arara: biber
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
. . .
但是,arara
似乎并不像那么“智能” latexmk
。例如,如果我想清理辅助文件,我必须从源代码“内部”执行此操作——显然,因为它是一个预编译器命令。但这意味着每次成功编译后辅助文件都会被丢弃,这并不总是很有用。此外,必须始终明确声明要丢弃哪些辅助文件——相比之下,其中latexmk
有一个预定义的默认设置。
% arara: pdflatex
% arara: pdflatex
% arara: makeindex
% arara: pdflatex
% arara: clean: { files: [ helloindex.aux, helloindex.idx, helloindex.ilg, helloindex.ind, helloindex.log ] }
\documentclass{article}
...
正如此取自用户手册的代码示例所示,您无法声明要丢弃哪些辅助文件扩展名(可能是因为arara
没有检查这些文件是否属于编译源)。因此,您必须在预编译器选项中明确声明它们。
也许arara
在未来的版本中会变得更“智能”。就目前而言,在我看来,它latexmk
更高效,尤其是当你有一个本地.latexmkrc
文件声明特殊的编译参数时。