防止 pdflatex 写入一堆文件

防止 pdflatex 写入一堆文件

如果我只创建一个基本hello.tex文件并使用

pdflatex hello.tex

pdflatex程序正在创建过多的文件,这有点烦人。目前,它写入了所有我不关心的文件:

hello.aux, hello.log, hello.nav, hello.out, hello.snm, hello.toc

有没有办法告诉pdflatex仅在构建成功时写入hello.pdf?如果没有,我可以指定这些文件的输出目录吗?也许我可以将它们写入/tmp

答案1

您可能不关心这些文件,但pdflatex它们确实很重要。这些文件保存着首次运行期间收集的信息,并且是使用正确的目录、参考资料、PDF 书签等构建最终 PDF 所必需的。

之后您可以删除这些文件,例如手动删除或使用前端工具latexmk(如-c选项)。但是,以后对 PDF 进行编译时将需要再次运行几次编译器。

您可以定义输出目录全部-output-directory使用命令行参数的文件pdflatex。编译后,您可以将 PDF 移动到当前目录中。

使用 MiKTeX,你可以指定放置所有辅助文件的目录(但不是 PDF 输出)通过使用-aux-directory命令行参数。您甚至可以组合-output-directory-aux-directory

答案2

除了马丁的回答之外,我认为解释一下为什么LaTeX 创建了所有这些额外的文件。我们以文件为例.aux

假设\label您的文档中有一个,并且在标签出现的上方某处有一个对它的引用。当 pdflatex 读取您的.tex文件时,它会读取\ref第一个。现在,它不知道如何处理这个引用:它还没有遇到它所指的内容。现在,当 pdflatex 到达标签时,它会记录标签所指的内容。我所说的“记录”是指它会在文件中写入一些内容,.aux大致内容是“当您遇到对此的引用时,这就是它的意思”。

然后,在第二次运行 pdflatex 时,当它到达引用时,它会查看文件.aux并且知道它应该引用什么,并可以在相关文本中替换。

辅助文件还有很多其他类似的用途(例如目录、图表列表等)。它们很烦人,但每次运行后删除它们会破坏很多东西。

答案3

您已经得到了很多非常好的答案来解释为什么pdflatex需要所有这些辅助文件。但是,您可能仍然对不得不忍受所有这些文件污染目录感到沮丧,而(我猜)您希望在该目录中保存所有 LaTeX 文档及其相应的.pdf输出。

最好的解决办法是保持每个文档一个目录你有。

例如,您可以保留一个主Documents文件夹,然后保留单独的Paper1Paper2、 ... 文件夹;每个文件夹都有自己的main.tex文件。然后,您就可以放心地让 LaTeX 将其想要的任何辅助文件存储在各自的文件夹中。不同之处在于,现在,对于您来说,您的文档所在的结构非常清晰。

答案4

这是一个相当老的帖子,有很多很好的答案,但令人惊讶的是,没有一个提到\nofiles。有时你会使用以下方式创建文档:

  • 没有交叉引用(与\ref\label
  • 无引文(有\cite
  • 没有目录。

在这些情况下,您不希望 Latex 创建上面提到的长文件列表,您可以告诉它不要使用\nofiles

\documentclass{article}
\nofiles
\begin{document}
  Hello world
\end{document}

如果您手动运行 (pdf)latex,则创建的文件只有文件.log.dvi(或.pdf文件)。如果您使用类似 synctex 的东西,那么还会有更多文件用于控制自动编译。

相关内容