如果我只创建一个基本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
文件夹,然后保留单独的Paper1
、Paper2
、 ... 文件夹;每个文件夹都有自己的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 的东西,那么还会有更多文件用于控制自动编译。