大家都知道需要编译两次才能达到所需输出的感觉。
我正在使用 TeXShop,有点厌倦点击排版按钮,等待所有内容编译完成,然后点击排版再次按下按钮,等待第二次编译......
有什么解决方案可以让 TeXShop 自动编译两次或更多次吗?
答案1
MyPdfLatex.engine
在目录中创建一个类似于以下名称的文件~/Library/TeXShop/Engines/
,并通过以下方式使其可执行chmod +x MyPdfLatex.engine
:
#!/bin/sh
bfname="$1"
pdflatex --file-line-error --shell-escape -recorder --synctex=1 "\input{$bfname}"
pdflatex --file-line-error --shell-escape -recorder --synctex=1 "\input{$bfname}"
您应该根据pdflatex
具体情况自定义上述命令行。然后,下次重新启动 TeXShop 时,选择MyPdfLatex
而不是LaTeX
。然后,当您Typeset
仍然看到它编译两次时。
如果您希望下拉引擎默认为MyPdfLatex
,请转到Preferences/Typesetting
面板并设置默认命令到MyPdfLatex
。
答案2
对于这种特殊情况(从您的最初问题中并不明显)的最佳工具是使用 TeXShoparara
引擎并使用arara
规则来编译文件。
看:
在这种情况下,您只需将以下几行放在文档顶部即可:
% !TEX TS-program = arara
% arara: pdflatex
% arara: pdflatex { synctex: true }
第一行告诉 TeXShop 使用arara
引擎,接下来的两行告诉arara
对文件进行两次处理。由于第一次编译的结果永远不会被查看,因此pdflatex
可以不带任何选项运行;在第二次运行时,synctex
将添加选项,以便您在源和预览之间实现同步。显然,如果您使用的是引擎,您可以调整工具以运行lualatex
或xelatex
等。
对于其他用例(特别是解决引用和参考),该latexmk
方法非常有用。
TeXShop 带有一个引擎,它将根据需要多次pdflatexmk
编译您的文档(并运行bibtex
或和其他工具),但不会更多。biber
这比盲目地要求文档编译两次要好。最简单的使用方法是添加:
% !TEX TS-program = pdflatexmk
添加到文档的第一行。不同引擎有其他版本(xelatexmk
、lualatexmk
等)。
如果引擎没有出现在下拉式排版菜单中,那么您需要将其从文件Inactive
夹移动到Engines
文件夹中~/Library/TeXShop
。
看:
当然,这两种方法可以结合起来,所以如果你正在使用,arara
你可以让第一个编译是简单的pdflatex
,而第二个编译使用latexmk
并兼具两全其美的效果:
% !TEX TS-program = arara
% arara: pdflatex
% arara: pdflatexmk { synctex: true }