我在一个目录中有几十个 .tex 文件。
我怎样才能用终端上的单个命令来编译它们?
此外:是否可以避免编译器生成的所有文件(.bak,.log,.aux,.out,.bib 文件)?
我通常用 进行编译pdflatex file.tex
。
答案1
for
你可以用命令来做
for f in *.tex; do pdflatex $f; done
我发现这种语法比查找更容易记住。
关于删除辅助文件,请考虑使用latexmk -c -pdf
或latexmk -C -pdf
代替pdflatex
。latex latexmk
make 仅构建需要构建的文件。我不确定到底删除了哪些辅助文件,但我认为大多数文件都会被删除-c
或-C
切换。
for f in *.tex; do latexmk -C -pdf $f; done
根据手册它也应该像这样工作
latexmk -C -pdf *.tex
另一个选择是在处理完成后手动删除文件。具体操作如下:
for f in *.tex; do pdflatex $f; done; rm *.bak *.log *.aux *.out *.bib
我不确定这是否还能算作一句话。
答案2
根据man pdflatex
,它只接受一个文件。可以使用以下命令对更多文件运行此类命令find
:
find . -maxdepth 1 -name '*.tex' -exec pdflatex {} \;
- 该
.
参数告诉find
在当前文件夹中搜索。 -maxdepth 1
禁用对子文件夹的递归 – 如果不需要,请删除。-name '*.tex'
仅允许处理*.tex
文件。-exec
对每个找到的文件运行给定的命令(pdflatex
)并替换{}
为实际的文件名。\;
结束-exec
选项并标记每次调用只应传递一个找到的文件pdflatex
。
您可以通过在和echo
之间包含来测试该命令。在这种情况下,生成的命令将仅打印到标准输出。-exec
pdflatex
find
该过程完成后,您可以使用以下命令简单地删除不需要的文件rm
,例如:
rm *.bak *.log *.aux *.out *.bib