以下是我的问题的简单示例。我想自动生成两个略有不同的文档版本。每个版本都应使用 生成latexmk
。在一个版本中,不应使用任何类选项:
\documentclass{article}
\begin{document}
foo
\end{document}
另一方面,应该使用一些类选项,例如:
\documentclass[twocolumn]{article}
\begin{document}
foo
\end{document}
当然可以
- 不使用 class 选项进行一次编译,
- 编辑我的
.tex
文件并手动添加类选项, - 再次编译,
但这种方法缺乏自动化。或者,我可以使用两个文件:
% withoutoption.tex
\documentclass{article}
\begin{document}
foo
\end{document}
和
% withoption.tex
\PassOptionsToClass{twocolumn}{article}
\input{withoutoption.tex}
但理想情况下,我只想维护一个文件,并从外部传递类选项.tex
(在 makefile 中)传递类选项。从Martin Scharrer 的回答我知道我可以通过课程选项没有必须编辑文件,如下所示:
pdflatex "\PassOptionsToClass{twocolumn}{article}\input{foo}"
不过,我想使用latexmk
而不是pdflatex
,但我搞不清楚上面的方法如何转换为latexmk
。我必须承认,我对语法不太熟悉latexmk
,但我浏览了文档,它似乎latexmk
只能接受文件名,而不能接受以下形式的参数
"\PassOptionsToClass{twocolumn}{article}\input{foo}"
我是不是漏掉了什么?可以latexmk
这样使用吗?
答案1
您可以使用-latex
或-pdflatex
选项。我将使用pdflatex
作为示例,但它latex
也应该可以正常工作。
latexmk -pdf article
将查找article.tex
并调用与 pdflatex 选项关联的命令,默认情况下该命令为
"pdflatex -interaction=nonstopmode -synctex=1 %S %O"
其中被文件名和选项%S
替换。%O
因此,要生成twocolumn
版本,您可以运行
latexmk -pdf -pdflatex='pdflatex %O -interaction=nonstopmode -synctex=1 "\PassOptionsToClass{twocolumn}{article}\input{%S}"' article
你会在 中找到 twocolumns 版本article.pdf
。好消息是,你可以为 创建一个别名,latexmk -pdf -pdflatex='pdflatex -interaction=nonstopmode -synctex=1 "\PassOptionsToClass{twocolumn}{article}\input{%S}" %O'
并在不同的 tex 文件上运行它,以获得每个文件的 twocolumns 版本。
我移到了%O
其他选项之前,因为这似乎可以用作-jobname=name
选项latexmk
(参见评论)。
现在这还不够,因为如果您在latexmk -pdf article
不更改的情况下重新运行article.tex
,latexmk
将无法识别已更改的选项,并且不会重新编译文档。因此,要强制执行,您可以添加选项-g
。