Suprimir mensaje durante la compilación

Suprimir mensaje durante la compilación

Utilizo una macro con \write18y \@@inputvarias veces en cada página de un documento grande. Pero \@@inputgenera un mensaje durante la compilación:

(filename)

Esto es muy molesto e inunda el resto de información relevante.

¿Hay alguna manera de silenciar \@@inputdurante la compilación en mi macro (yo uso pdflatex)?

Lo que tengo ahora es lo siguiente:

\makeatletter
\newcommand*{\gpNorm}[3][\jobname.eval]{%
  \edef\inp@t{#3}%
  \immediate\write18{gnuplot -e 'set print "#1"; print norm(\inp@t)'}%
  \everyeof{\noexpand}%
  \edef#2{\@@input #1 }%
}
\makeatother

Lo uso write18para obtener un resultado de cálculo de gnuplot. Pero la línea con \@@inputmantener genera el (filename)mensaje. ¿Puedo usar algo más para leer el resultado de gnuplot?

Para usarlo: \gpNorm{\res}{1}asignará el resultado del cálculo gnuplota la macro \res.

Respuesta1

No hay manera de suprimir el

(/path/to/filename.tex ...)

mensaje en el terminal y en el archivo de registro que genera TeX cada vez que la \inputprimitiva actúa abriendo un archivo para ser leído (la coincidencia )se genera cuando se escanea el final del archivo).

Esta información de diagnóstico proviene de lo más profundo de TeX y el comportamiento no se puede cambiar con macros. Sólo no se muestran los archivos leídos con las primitivas \font(cuando una fuente aún no está cargada en la memoria) o con \openiny .\read


Si sabe que la salida del gnuplotcomando es de una sola línea, puede leer esa única línea con \read:

\documentclass{article}
\makeatletter
\newread\gnuplot@read
\newcommand\gpNorm[3][\jobname.eval]{%
  \immediate\write18{gnuplot -e 'set print "#1"; print norm(#3)'}%
  \openin\gnuplot@read=#1\relax
  \read\gnuplot@read to#2\relax
  \closein\gnuplot@read
}
\makeatother

\begin{document}
\gpNorm\foo{1+1}

\foo

\end{document}

La salida en el archivo PDF es

0.977249868051821

mientras que la salida del terminal es

This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
 \write18 enabled.
entering extended mode
(./xoff.tex
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman-x-2012-05-30, ngerman-x-2012-05-30, afrikaans, ancientgreek, ibycus, arabi
c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
h, french, friulan, galician, german, ngerman, swissgerman, monogreek, greek, h
ungarian, icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, ma
rathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian,
kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk,
 piedmontese, polish, portuguese, romanian, romansh, russian, sanskrit, serbian
, serbianc, slovak, slovenian, spanish, swedish, turkish, turkmen, ukrainian, u
ppersorbian, welsh, loaded.
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/size10.clo))
No file xoff.aux.
[1{/usr/local/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./xoff.aux) )</usr/local/texlive/2012/texmf-dist/fonts/type1/public/amsfonts/c
m/cmr10.pfb>
Output written on xoff.pdf (1 page, 11836 bytes).
Transcript written on xoff.log.

Hay una manera diferente de hacerlo, aprovechando la función de "entrada de tubería" que está disponible pdftexy luatextambién debería incluirse en la próxima versión de xetex. Si el nombre del archivo pasado \input(que está \@@inputen LaTeX) comienza con |(y -shell-escapeestá activo), entonces se inicia un proceso con el resto del nombre como línea de comando; la salida estándar se considera el archivo de entrada.

Sin embargo, en este caso particular no hay mucho que hacer: si la línea de comando tiene espacios, todo el "nombre de archivo" debe estar entre comillas dobles y las internas para indicar gnuplotla salida confundirán al analizador. Una salida podría ser tener un script Bash, por ejemplo xoff-norm.sh, con el siguiente contenido:

#!/usr/bin/env bash
/usr/bin/env gnuplot << EOF
set print "-"
print norm($1)
exit
EOF

para que su documento pueda ser

\documentclass{article}
\usepackage{catchfile}

\makeatletter
\newcommand\gpNorm[2]{%
  \CatchFileEdef#1{"|bash ./xoff-norm.sh #2"}{\everyeof{\noexpand}\endlinechar\m@ne}}
}
\makeatother

\begin{document}
\gpNorm\foo{1+1}

\foo
\end{document}

Solía catchfile​​evitar reinventar la rueda. En este caso, sin embargo,dosSe inician procesos en lugar de uno. Elige tu opción.

información relacionada