Suprimir mensagem durante a compilação

Suprimir mensagem durante a compilação

Eu uso uma macro com \write18e \@@inputvárias vezes em cada página de um documento grande. Mas \@@inputenvie uma mensagem durante a compilação:

(filename)

Isso é muito chato e inunda outras informações relevantes.

Existe uma maneira de fazer \@@inputsilêncio durante a compilação na minha macro (eu uso pdflatex)?

O que tenho agora é o seguinte:

\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

Eu uso write18para obter um resultado de cálculo de gnuplot. Mas a linha com \@@inputkeep gera a (filename)mensagem. Posso usar outra coisa para ler a saída de gnuplot?

Para usá-lo: \gpNorm{\res}{1}atribuirá o resultado do cálculo gnuplotà macro \res.

Responder1

Não há como suprimir o

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

mensagem no terminal e no arquivo de log que é gerado pelo TeX toda vez que a \inputprimitiva atua abrindo um arquivo para ser lido (a correspondência )é gerada quando o final do arquivo é verificado).

Essas informações de diagnóstico vêm das profundezas do TeX e o comportamento não pode ser alterado com macros. Apenas os arquivos lidos com os primitivos \font(quando uma fonte ainda não está carregada na memória) ou com \openine \readnão são mostrados.


Se você sabe que a saída do gnuplotcomando é uma linha, você pode ler essa única linha com \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}

A saída no arquivo PDF é

0,977249868051821

enquanto a saída do terminal estiver

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.

Existe uma maneira diferente de fazer isso, explorando o recurso "pipe input" que está disponível pdftexe luatextambém deve ser incluído na próxima versão do xetex. Se o nome do arquivo passado para \input(que está \@@inputem LaTeX) começar com |(e -shell-escapeestiver ativo), então um processo é iniciado com o resto do nome como linha de comando; a saída padrão é considerada o arquivo de entrada.

Porém, neste caso específico não há muito o que fazer: se a linha de comando contiver espaços, todo o "nome do arquivo" deverá ser colocado entre aspas duplas e as internas para informar gnuplota saída confundirão o analisador. Uma saída poderia ser ter um script Bash, digamos xoff-norm.sh, com o seguinte conteúdo:

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

para que seu documento possa 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}

Eu costumava catchfileevitar reinventar a roda. Neste caso, porém,doisprocessos são iniciados em vez de um. Faça sua escolha.

informação relacionada