Linha de comando pdflatex ocultar saída de compilação

Linha de comando pdflatex ocultar saída de compilação

Meu programa produz várias saídas: tenho um arquivo .tex compilado e algumas delas são produzidas na linha de comando. As informações de compilação do pdf-latex são inúteis para mim e gostaria de ocultá-las para tornar minha saída de linha de comando legível.

Eu tenho vistoesseO site menciona que algum espessamento de caixa deve bastar, mas não encontrei um equivalente em linha de comando.

Responder1

Você pode redirecionar toda a pdflatexsaída:

  • para sh:pdflatex ... > /dev/null 2>&1
  • para cmd:pdflatex ... > NUL 2>&1

Ou você pode usar a -quietopção:

pdflatex -quiet ...

Responder2

No meu caso, não há -quietmodo. Então eu tive que usar -interaction=batchmodeo argumento sugerido porAndrédeComente.

Mas então surgiu outro problema - você não verá o que deu errado e por quê, porqueerros também são suprimidos combatchmode.

O resultado que acabo usando é suprimir pdflatexa saída de all usando grepapenas erros de saída:

: | pdflatex -halt-on-error src.tex | grep '^!.*' -A200 --color=always 

Eu uso -halt-on-errorporque basicamente você não pode usar o modo interativo em caso de erro ( grepdesativa o diálogo entre programa e usuário). Além disso, para garantir que isso pdflatexnunca solicite a entrada, vamos inserir o comando sem saída ( :comando).

Deixe-me também explicar os grepargumentos:

  • ^!.*
    • string para procurar na saída do pdflatex
    • corresponde a todas as linhas que começam com !, que são consideradas linhas de erro
  • -A200
    • produza 200 linhas após cada partida
    • desta forma eu me certifico deimprima também as informações relevantes seguidas após as linhas de erro correspondentes
  • --color=always
    • isso nos fornece resultados coloridos para que possamos ver claramente o que deu errado e por quê -o problema está em negrito vermelho

Script de wrapper

Criei um script wrapper para fornecer uma solução mais conveniente exatamente para esse propósito. Seu uso é quase igual ao pdflatex/ pdftexem si. Você pode conferir comoum pacote CTANou comoum repositório GitLab.

Instalação rápida

E aqui está como instalar a versão mais recente usando este oneliner:

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

Aqui está um exemplo de como você executa o script wrapper:

pdftex-quiet compile-me.tex
# You may also provide additional attributes to `pdflatex`
pdflatex-quiet -output-format=dvi -output-directory=/tmp compile-me.tex

Você também pode mostrar a versão ou ajuda do script pdflatex-quiet/ pdftex-quiet:

pdflatex-quiet -v  # or --version
pdflatex-quiet -h  # or --help

Também a diferença entre pdflatex-quiete pdftex-quiet,como explicado aquié respeitado - graças ao comentário de Denis Bitouzé.

Responder3

FWIW,https://ctan.org/pkg/texfotfoi minha tentativa de resolver esse problema - eliminando a saída detalhada dos mecanismos tex e ainda mostrando as mensagens interessantes (aquelas sobre as quais eu realmente quero fazer algo). --karl

Responder4

Atualização 05/02/2023

eu mudei paratectônicoe não use mais a solução abaixo.

função bash do compilador tex-to-pdf

Acabei combinando as respostas de rubenvb, Andrée jirislav e colocando-o como uma função no meu .bashrc.

Versão curta

Toda a saída é redirecionada em um .txtarquivo. As mensagens de erro deste arquivo são exibidas e o .txtarquivo removido.

Você pode colocar a seguinte função no seu .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

Você pode usá-lo como

$ tex-pdf report

Versão longa

Se você usa BibTeX ou deseja remover arquivos criados durante a compilação, mas não precisa, você pode estender a função da seguinte maneira:

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

Se não houver erros no seu código, a saída será:

$ tex-pdf report
Step 1/4 - pdflatex
Step 2/4 - bibtex
Step 3/4 - pdflatex
Step 4/4 - pdflatex

informação relacionada