Línea de comando pdflatex ocultar salida de compilación

Línea de comando pdflatex ocultar salida de compilación

Mi programa produce múltiples resultados: tengo un archivo .tex compilado y algunos de ellos se generan en la línea de comandos. La información de compilación de pdf-latex es inútil para mí y me gustaría ocultarla para que la salida de mi línea de comandos sea legible.

He vistoesteEl sitio menciona que algo de grosor de caja debería funcionar, pero no he encontrado un equivalente en la línea de comandos.

Respuesta1

Puede redirigir toda la pdflatexsalida:

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

O puedes usar la -quietopción:

pdflatex -quiet ...

Respuesta2

En mi caso no hay -quietmodo. Entonces tuve que usar -interaction=batchmodeel argumento sugerido porAndrés'scomentario.

Pero entonces surgió otro problema: no verás qué salió mal y por qué, porqueLos errores también se suprimen conbatchmode.

El resultado que termino usando es suprimir todos pdflatexlos resultados usando greppara generar solo errores:

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

Lo uso -halt-on-errorporque básicamente no puedes usar el modo interactivo en caso de error ( grepdeshabilita el diálogo entre el programa y el usuario). Además, para asegurarnos de que eso pdflatexnunca solicite la entrada, transmitamos el comando sin salida ( :comando).

Permítanme explicar también los grepargumentos:

  • ^!.*
    • cadena a buscar en la salida de pdflatex
    • coincide con todas las líneas que comienzan con !, que se consideran líneas de error
  • -A200
    • generar 200 líneas después de cada partido
    • De esta manera me aseguroImprima también la información relevante seguida de las líneas de error coincidentes.
  • --color=always
    • esto nos proporciona resultados en color para que podamos ver claramente qué salió mal y por qué.el problema está en negrita roja

Guión contenedor

He creado un script contenedor para proporcionar una solución más conveniente exactamente para este propósito. Su uso es casi el mismo que el de pdflatex/ pdftexmismo. Puedes comprobarlo comoun paquete CTANo comoun repositorio de GitLab.

Instalación rápida

Y aquí se explica cómo instalar la última versión 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

A continuación se muestra un ejemplo de cómo se ejecuta el script contenedor:

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

También puedes mostrar la versión o ayuda del script pdflatex-quiet/ pdftex-quiet:

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

También la diferencia entre pdflatex-quiety pdftex-quiet,como se explica aquíse respeta, gracias al comentario de Denis Bitouzé.

Respuesta3

FWIW,https://ctan.org/pkg/texfotfue mi intento de resolver este problema: eliminar la salida detallada de los motores tex y al mismo tiempo mostrar los mensajes interesantes (aquellos sobre los que realmente quiero hacer algo). --karl

Respuesta4

Actualización 2023-02-05

he cambiado atectónicoy ya no use la solución a continuación.

función bash del compilador tex-to-pdf

Terminé combinando las respuestas de rubenvb, Andrésy jirislav y ponerlo como función en mi .bashrc.

Version corta

Toda la salida se redirige en un .txtarchivo. Se muestran los mensajes de error de este archivo y .txtse elimina el archivo.

Puedes poner la siguiente función en tu .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

Puedes usarlo como

$ tex-pdf report

Versión larga

Si usa BibTeX o desea eliminar archivos que se crean durante la compilación, pero no los necesita, puede ampliar la función de la siguiente manera:

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

Si no hay errores en su código, el resultado será:

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

información relacionada