什么是 makefile 以及什么时候需要将它与 latexmk 一起使用?

什么是 makefile 以及什么时候需要将它与 latexmk 一起使用?

我一直在寻找一种工具,它可以在我的 TeX 文件中查找更改,然后在记录更改时编译它们。所以,我偶然发现了它,latexmk并设法让它做我想做的事情。

然而,我发现一些文章/问题结合起来makefile(我不明白它的主要用途)并latexmk编译了 TeX 项目。

我想知道什么makefile是以及何时需要同时使用makefilelatexmk而不是latexmk仅使用。


附言

makefile可以从本文提到的来源安装回答

感谢大卫·卡莱尔评论了解如何正确调用make命令。

答案1

这是一个相当笼统的问题,所以很难写下完整的答案。我将讨论我何时使用制作当我使用时latexmk

latexmk是一个编译文件的工具.tex,仅此而已。但是,它擅长确定哪些文件依赖于哪些其他文件:您不需要提供列表,因此latexmk main只有在依赖关系main.tex发生变化时才会重新编译。latexmk如果需要,还会编译文件两到三次(例如,用于参考书目、索引或超链接更新)。

Make 更为通用,但需要明确描述文件的依赖关系以及如何编译它。此信息通常位于名为 的文件中makefile。假设main依赖于main.texmacros.texeggs.tex,并且有时需要编译两次。那么 makefile 可能如下所示:

# example makefile

INPUTS = main.tex macros.tex eggs.tex
COMPILER = pdflatex --halt-on-error

main.pdf: $(INPUTS)
    $(COMPILER) main.tex
    $(COMPILER) main.tex

手动指定依赖项和编译指令需要做更多工作,尤其是因为它们在整个项目中可能会发生变化。但 Make 的优势在于它可以执行任何命令。如果您的最终文件依赖于运行某些统计测试并将结果包含在您的文档中,Make 可以运行该测试。如果您的文件包含代码清单,latexmk不知道要监视它们是否有变化,但$(INPUTS)如果您使用 Make,您可以更新以包含它们。

Make 的另一个用途是在编译后自动对输出文件进行一些操作。

总之,Make 更为复杂,但能够处理非 TeX 依赖项,因此仅当您具有非 TeX 依赖项或需要进行后处理时才使用它。

此类依赖关系的示例:

  • 非 TeX 语言的源代码列表
  • 根据数据自动生成的统计图表或统计分析
  • 从输入或数据自动生成的图像
  • 从“外部世界”获得的信息,例如用户或互联网

后处理示例:

  • 将输出 PDF 转换为图像
  • 将输出 PDF 移动到另一个目录
  • 压缩输出 PDF

答案2

我想makefile知道

命令make通常指的是GNU 制作或者BSD 制作。每个变体都有其优点;不同之处在于高级用途,此处不作讨论。无论使用哪种变体,make都期望找到名为 Makefile,其中包含有关哪些文件的配方(所谓的目标)从其他文件构建(所谓的依赖项) 以及要使用哪些命令来构建目标。 make然后确定需要构建或重建哪些目标并发出所需的命令。要点:

  • 您必须写一份Makefile所需的食谱。
  • make针对给定目标执行每个重建命令最多一次这对于 LaTeX 文档处理来说很不幸,因为 pdflatex可能需要多次运行。
  • make通过查看文件最后写入时间来检测依赖项的变化。但每次pdflatex运行都会写入一个.aux文件,因此下次 make运行将表现为.aux文件已更改,无论其实际内容是否已更改。

因此,如果你想制定一个不断重复运行pdflatex 直到.aux文件内容不再改变的配方,这不是一件容易的事情make。通过很多复杂的技术和一些技巧,可能的 来制定有用的Makefile,但它的配方往往看起来非常复杂。

latexmk专门用于基于 LaTeX 的文档处理。它知道如何使用各种*tex程序和辅助工具,如 bibtexbibermakeindex。它不需要Makefile,它可以根据需要重复命令,并且它通过查看文件内容(实际上是校验和)而不是最后写入时间来检测更改。

当我需要同时使用makefilelatexmk不是latexmk只使用

有答案 提出一个Makefile片段,使make执行与 相同的操作latexmk -pdf。事实上,这样的make会将文档处理细节委托给 ,并latexmk -pdf添加一些花哨的选项。那么为什么要使用make呢?

如果您只是想要 的功能latexmk,则不需要make。但是,

  • 您可以添加更多配方,Makefile以便make除了处理 LaTeX 文档之外还能做更多的事情。参见Arun 的回答。我通常会添加编译程序、运行测试、制作插图等的配方。
  • 开源软件的普遍用户预计make 将构建他们想要的文件。通过提供合适的Makefile,可以满足这一期望。
  • make键入起来更简洁。如果你经常重新编译,这些事情就很重要。

如果以上原因对你没有吸引力,你可以总结如下:

makewithlatexmk适用于已经习惯并make 认识到 实用性的用户latexmk

相关内容