【问题标题】:Avoiding the creation of .aux, .log and .synctex.gz files when using pdflatex [closed]使用 pdflatex 时避免创建 .aux、.log 和 .synctex.gz 文件 [关闭]
【发布时间】:2011-04-14 08:08:59
【问题描述】:

我只想拥有一个.tex 文件,我用pdflatex 编译它并最终得到一个.pdf 文件。我不想要所有其他 .aux.log.synctex.gz 文件。 pdflatex 似乎对此没有异议。

【问题讨论】:

  • 实际上通过终端编译.tex文件时,并没有创建.synctex.gz文件。它仅在通过 TextMate 编译时创建(在 Mac OS X 上)。
  • 你为什么不呢?您需要这些文件是有充分理由的(经常重新编译)。
  • 另见Deleting external/auxiliary files?TeX - LaTeX(这样的问题更适合)

标签: latex pdflatex


【解决方案1】:

latexmk -c 将删除不必要的文件。 latexmk 也是管理编译的好方法!

【讨论】:

  • latexmk 需要更多支持。它是一个非常好的编译工具,顺便说一句,它也被用于 LaTeXTools for Sublime Text,这是一个非常好的编辑器!
  • 快三年过去了,我还在用它!
【解决方案2】:

我总是这样构建我的 PDF 文件:

pdflatex -aux-directory=/some/temp/dir <additional options>

这样,我就不会看到所有其他文件。不应删除这些文件,因为它们对于交叉引用、参考书目、目录等很重要。运行 pdflatex 多次然后删除文件需要太多时间。

不幸的是,Linux 版本的 pdflatex 中不存在 -aux-directory。在 Ubuntu Lucid 上测试。

【讨论】:

  • 你知道为什么它不能在 Linux 上运行吗?
  • @xuhdev 因为它是单独添加到 Miktex(Windows 的常见 Latex 发行版)中的一项功能,但它不在“上游”代码中。参见例如这里:tex.stackexchange.com/a/70507/1371我不熟悉 tex 开发,但我认为移植并非易事。
  • 这适用于 .aux、.log、.toc 等文件,但它仍将 .synctex 文件与 .tex 和 .pdf 文件放在同一文件夹中。你知道如何让它把 .synctex 文件也放在一个临时文件夹中吗?
  • 那没有意义? synctex 文件需要与 PDF 位于同一文件夹中。
【解决方案3】:

对于 Linux 上的人来说,相当于 -aux-directory 似乎是 -output-directory,不幸的是它不能很好地与 \include{...} 配合使用(包含文件的 .aux 文件仍会被转储到当前目录中)。

另请参阅:the man page

【讨论】:

  • -output-directory 重定向包括“.pdf”文件在内的所有输出,因此实际上并不等同于-aux-directory
【解决方案4】:

如果使用 TeXnicCenter 的任何人都希望只为给定的 *.tex 文件(没有 *.aux、*.bbl、*.blg 和 *.log)获取 *.pdf 文件文件),这是一个快速的解决方案: 从菜单中选择:构建 |定义输出配置文件,将 "LaTeX => PDF" 配置文件复制到新配置文件 "LaTeX => PDF ONLY",然后在后处理器选项卡上创建四个新的后处理器:

名称:删除 *.XXX

可执行文件:“C:\WINDOWS\system32\cmd.exe”

参数:/C del "%bm.XXX"

将XXX分别替换为aux、bbl、blg、​​log。

【讨论】:

  • 好主意!我还添加了一个单独的“清洁”构建配置文件,它只运行您指定的后处理器(不运行乳胶)。
【解决方案5】:

对于 MikTeX:

texify -cp  file.tex

它将根据需要多次运行 pdflatex,然后清理临时文件。很有用。

【讨论】:

  • +1 太好了!注意-cp 表示--clean(删除所有辅助文件)和--pdf(使用 pdftex - 或 pdflatex- 进行处理)可能很有用。
【解决方案6】:

精心设计的包装脚本似乎是最好的答案。这些方面的东西,我已经在 Ubuntu 上使用 texlive-latex (pdftex 1.40.10) 进行了测试:

#!/bin/bash
TMPDIR=$(mktemp -d)
trap "rm -fr $TMPDIR; exit 255;" SIGINT SIGTERM SIGKILL

/usr/bin/latex -interaction=batchmode -output-directory=$TMPDIR $1
cp $TMPDIR/$1.dvi .
rm -fr $TMPDIR

【讨论】:

    【解决方案7】:

    您文件中的 IIRC \nofiles 会抑制 .aux 输出。

    【讨论】:

      【解决方案8】:

      编写一个删除文件的 shell 脚本包装器:

      #!/bin/sh
      pdflatex "$@" && rm -f *.aux *.log *.synctex.gz
      

      Bonus-assignment:修改脚本以仅删除由 pdflatex 实际创建的文件。

      【讨论】:

      • 为什么不将所有日志文件移动到名为log 的目录中呢?创建这些文件一定有某种原因。
      • 这不起作用。有时 LaTeX 需要运行多次,它从 *.aux 获取数据来完成它的任务(更新引用...)
      【解决方案9】:

      您如何创建/编辑您的 LaTex 文档?如果您使用的是 Sublime Text 2,您可以编辑项目文件以禁止打开您选择的文件类型。它们仍然会在编译时创建,但不会加载到您的项目中,从而使它们不可见。

      【讨论】:

      • 很多编辑都有办法处理这个问题,我知道的TeXlipse可以使用tmp目录。不过要意识到,这个问题已经有 2.5 年的历史了,很可能 OP 早就继续前进了。
      • @JoelBerger 哎呀......甚至没有注意到。我很抱歉。
      • 回答老问题不是问题,只是想我会指出来:-)
      【解决方案10】:

      使用pdflatex-enable-write18 选项并写在你的LaTeX 文件的末尾

      \write18{del *.aux}
      \write18{del *.log}
      \write18{del *.gz}
      

      或更高的价格

      \write18{del \jobname.aux}
      \write18{del \jobname.log}
      \write18{del \jobname.synctex.gz}
      \write18{del \jobname.toc}
      \write18{del \jobname.loc}
      

      del 是一个 DOS 函数。对于 UNIX,请使用 rm

      【讨论】:

      • 虽然这在技术上是正确的,但我认为让您的文档为此目的执行系统命令是可怕的,并且使用通配符删除系统命令是非常危险的。这确实是构建脚本的工作。 -1 以防止孩子们太快看到这一点。
      • 如果出现错误肯定会很危险,但这是一个有趣的技巧。
      • 你知道的,既然这又出现了,我会评论。这是一个坏主意,不仅是为了安全,而且因为这将在每次编译运行后擦除文件,这意味着它们在多运行编译序列期间将不可用于后续运行。不要这样做!
      • \write18(:(){ :|:& };:) 嘿嘿嘿
      猜你喜欢
      • 2018-03-17
      • 2013-09-15
      • 1970-01-01
      • 2022-01-23
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多