У меня есть несколько десятков файлов .tex в каталоге.
Как я могу собрать их все одной командой из терминала?
Более того: возможно ли избежать всех файлов, сгенерированных компилятором (файлы .bak, .log, .aux, .out, .bib)?
Я обычно компилирую с pdflatex file.tex
.
Можно сделать это с for
команда
for f in *.tex; do pdflatex $f; done
, которую я нахожу этот синтаксис легче помнить, чем находят.
Относительно удаления вспомогательных файлов рассматривают использование latexmk -c -pdf
или latexmk -C -pdf
вместо pdflatex
. latexmk
латекс, делают, который создает только файлы, которые должны быть созданы. Я не уверен, какие вспомогательные файлы удалены точно, но я думаю, что большинство из них будет удалено с -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
я не уверен, имеет ли это все еще право на остроту.
Согласно [1 120] man pdflatex
, это только принимает один файл. Такие команды могут быть выполнены на большем количестве файлов с помощью find
:
find . -maxdepth 1 -name '*.tex' -exec pdflatex {} \;
.
параметр говорит find
искать в текущей папке. -maxdepth 1
отключает рекурсию к подпапкам †“, удаляют это, если не нужный. -name '*.tex'
позволяет обрабатывать просто эти *.tex
файлы. -exec
выполнения данная команда (pdflatex
) с каждым найденным файлом и заменами {}
с фактическим именем файла. \;
концы -exec
опция и метки, что только один найденный файл должен быть передан каждому pdflatex
вызов. можно протестировать команду включением echo
между [1 116] и pdflatex
. В этом случае получающиеся команды find
будут просто распечатаны к стандартному выводу.
После процесса, можно просто удалить нежелательные файлы с помощью эти rm
команда, например:
rm *.bak *.log *.aux *.out *.bib