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 pdflatex
salida:
- para sh:
pdflatex ... > /dev/null 2>&1
- para cmd:
pdflatex ... > NUL 2>&1
O puedes usar la -quiet
opción:
pdflatex -quiet ...
Respuesta2
En mi caso no hay -quiet
modo. Entonces tuve que usar -interaction=batchmode
el 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 pdflatex
los resultados usando grep
para generar solo errores:
: | pdflatex -halt-on-error src.tex | grep '^!.*' -A200 --color=always
Lo uso -halt-on-error
porque básicamente no puedes usar el modo interactivo en caso de error ( grep
deshabilita el diálogo entre el programa y el usuario). Además, para asegurarnos de que eso pdflatex
nunca solicite la entrada, transmitamos el comando sin salida ( :
comando).
Permítanme explicar también los grep
argumentos:
^!.*
- 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
/ pdftex
mismo. 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-quiet
y 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 .txt
archivo. Se muestran los mensajes de error de este archivo y .txt
se 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