Моя программа выдает несколько выходов: у меня есть скомпилированный файл .tex, и некоторые из них выводятся в командной строке. Информация о компиляции pdf-latex для меня бесполезна, и я хотел бы скрыть ее, чтобы сделать вывод командной строки читаемым.
Я виделэтотна сайте упоминается, что это можно сделать с помощью box-thicking, но я не нашел эквивалента для командной строки.
решение1
Вы можете перенаправить весь pdflatex
вывод:
- для ш:
pdflatex ... > /dev/null 2>&1
- для cmd:
pdflatex ... > NUL 2>&1
Или вы можете воспользоваться -quiet
опцией:
pdflatex -quiet ...
решение2
В моем случае нет -quiet
режима. Поэтому мне пришлось использовать -interaction=batchmode
аргумент, как предложилАндрей'sкомментарий.
Но тут возникла другая проблема - вы не увидите, что пошло не так и почему, потому чтоОшибки также подавляются с помощьюbatchmode
.
В результате я подавляю весь pdflatex
вывод , используя grep
для вывода только ошибок:
: | pdflatex -halt-on-error src.tex | grep '^!.*' -A200 --color=always
Я использую -halt-on-error
, потому что вы в принципе не можете использовать интерактивный режим в случае ошибки ( grep
отключает диалог между программой и пользователем). Также, чтобы убедиться, что это pdflatex
никогда не запрашивает ввод, давайте передадим команду без вывода ( :
команда).
Позвольте мне также объяснить grep
аргументы:
^!.*
- строка для поиска в выводе pdflatex
- он соответствует всем строкам, начинающимся с
!
, которые считаются строками с ошибками.
-A200
- выводить 200 строк после каждого совпадения
- таким образом я удостоверюсь, чтотакже выведите соответствующую информацию, следующую после соответствующих строк с ошибками
--color=always
- это дает нам цветной вывод, чтобы мы могли четко видеть, что пошло не так и почему -проблема выделена жирным красным
Скрипт-обертка
Я создал скрипт-обертку, чтобы предоставить более удобное решение именно для этой цели. Его использование почти такое же, как и само pdflatex
/ pdftex
. Вы можете проверить его какпакет CTANили какрепозиторий GitLab.
Быстрая установка
А вот как установить последнюю версию с помощью этого однострочника:
curl -s https://gitlab.com/jirislav/pdftex-quiet/raw/latest/pdftex-quiet | \
sudo tee /usr/local/bin/pdftex-quiet >/dev/null \
&& sudo chmod +x /usr/local/bin/pdftex-quiet \
&& sudo ln -sf /usr/local/bin/pdftex-quiet /usr/local/bin/pdflatex-quiet
Вот пример запуска скрипта-оболочки:
pdftex-quiet compile-me.tex
# You may also provide additional attributes to `pdflatex`
pdflatex-quiet -output-format=dvi -output-directory=/tmp compile-me.tex
Вы также можете показать версию или справку по скрипту pdflatex-quiet
/ pdftex-quiet
:
pdflatex-quiet -v # or --version
pdflatex-quiet -h # or --help
Также разница между pdflatex-quiet
и pdftex-quiet
,как объяснено здесьвызывает уважение - благодаря комментарию Дениса Битузе.
решение3
Кстати,https://ctan.org/pkg/texfotбыла моей попыткой решить эту проблему — устранить подробный вывод движков Tex, продолжая при этом показывать интересные сообщения (те, с которыми я действительно хочу что-то сделать). --karl
решение4
Обновление 2023-02-05
Я перешел натектоническийи больше не используйте решение ниже.
функция bash компилятора tex-to-pdf
В итоге я объединил ответы из
рубенвб,
Андрейи
йирислав
и помещаю это как функцию в свой .bashrc
.
Укороченная версия
Весь вывод перенаправляется в .txt
файл. Сообщения об ошибках этого файла отображаются, а .txt
файл удаляется.
Вы можете поместить следующую функцию в свой файл .bashrc
:
function tex-pdf {
pdflatex -halt-on-error -interaction=nonstopmode $1 > $1.txt
grep '^!.*' --color=always $1.txt
rm $1.txt
}
export -f tex-pdf
Вы можете использовать его как
$ tex-pdf report
Длинная версия
Если вы используете BibTeX или хотите удалить файлы, которые создаются во время компиляции, но вам они не нужны, вы можете расширить функцию следующим образом:
function tex-pdf {
printf "Step 1/4 - pdflatex\n"
pdflatex -halt-on-error -interaction=nonstopmode $1.tex > $1.txt
grep '^!.*' --color=never $1.txt
printf "Step 2/4 - bibtex\n"
bibtex $1.aux > $1.txt
grep '^!.*' --color=never $1.txt
printf "Step 3/4 - pdflatex\n"
pdflatex -halt-on-error -interaction=nonstopmode $1.tex > $1.txt
grep '^!.*' --color=never $1.txt
printf "Step 4/4 - pdflatex\n"
pdflatex -halt-on-error -interaction=nonstopmode $1.tex > $1.txt
grep '^!.*' --color=never $1.txt
rm -f $1.txt $1.aux $1.bbl $1.blg $1.log $1.out $1.toc
}
export -f tex-pdf
Если в вашем коде нет ошибок, вывод будет следующим:
$ tex-pdf report
Step 1/4 - pdflatex
Step 2/4 - bibtex
Step 3/4 - pdflatex
Step 4/4 - pdflatex