командная строка pdflatex скрыть вывод компиляции

командная строка pdflatex скрыть вывод компиляции

Моя программа выдает несколько выходов: у меня есть скомпилированный файл .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

Связанный контент