我可以将 LaTeX 命令而不是文件名传递给 latexmk 吗?

我可以将 LaTeX 命令而不是文件名传递给 latexmk 吗?

这是如何才能自动化生成文档多个版本的工作流程?

以下是我的问题的简单示例。我想自动生成两个略有不同的文档版本。每个版本都应使用 生成latexmk。在一个版本中,不应使用任何类选项:

\documentclass{article}
\begin{document}
foo
\end{document}

另一方面,应该使用一些类选项,例如:

\documentclass[twocolumn]{article}
\begin{document}
foo
\end{document}

当然可以

  1. 不使用 class 选项进行一次编译,
  2. 编辑我的.tex文件并手动添加类选项,
  3. 再次编译,

但这种方法缺乏自动化。或者,我可以使用两个文件:

% 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.texlatexmk将无法识别已更改的选项,并且不会重新编译文档。因此,要强制执行,您可以添加选项-g

相关内容