Meldung während der Kompilierung unterdrücken

Meldung während der Kompilierung unterdrücken

Ich verwende ein Makro mit \write18und \@@inputmehrmals auf jeder Seite eines großen Dokuments. \@@inputBeim Kompilieren wird jedoch eine Meldung ausgegeben:

(filename)

Dies ist sehr ärgerlich und überflutet die anderen relevanten Informationen.

Gibt es eine Möglichkeit, \@@inputwährend der Kompilierung in meinem Makro (ich verwende pdflatex) Ruhe zu gebieten?

Was ich jetzt habe, ist Folgendes:

\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

Ich verwende write18, um ein Berechnungsergebnis von zu erhalten gnuplot. Aber die Zeile mit dem \@@inputKeep gibt die (filename)Meldung aus. Kann ich etwas anderes verwenden, um die Ausgabe von zu lesen gnuplot?

So verwenden Sie es: \gpNorm{\res}{1}weist das Ergebnis der Berechnung gnuplotdem Makro zu \res.

Antwort1

Es gibt keine Möglichkeit, die

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

Meldung auf dem Terminal und in der Protokolldatei, die von TeX jedes Mal generiert wird, wenn das \inputGrundelement eine einzulesende Datei öffnet (die Übereinstimmung )wird generiert, wenn das Dateiende gescannt wird).

Diese Diagnoseinformationen stammen aus den Tiefen von TeX und ihr Verhalten kann nicht mit Makros geändert werden. Nur Dateien, die mit den Primitiven \font(wenn eine Schriftart noch nicht in den Speicher geladen ist) oder mit \openinund eingelesen wurden \read, werden nicht angezeigt.


Wenn Sie wissen, dass die Ausgabe des gnuplotBefehls eine Einzeiler ist, können Sie diese einzelne Zeile wie folgt lesen \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}

Die Ausgabe in der PDF-Datei ist

0,977249868051821

während die Terminalausgabe

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.

Es gibt eine andere Möglichkeit, dies zu tun, indem Sie die Funktion „Pipe Input“ nutzen, die in und verfügbar ist pdftexund luatexauch in der nächsten Version von enthalten sein sollte xetex. Wenn der an übergebene Dateiname (der in LaTeX \inputist ) mit beginnt (und aktiv ist), wird ein Prozess mit dem Rest des Namens als Befehlszeile gestartet; die Standardausgabe wird als Eingabedatei betrachtet.\@@input|-shell-escape

In diesem speziellen Fall kann man jedoch nicht viel tun: Wenn die Befehlszeile Leerzeichen enthält, muss der gesamte „Dateiname“ in doppelte Anführungszeichen gesetzt werden, und die inneren Anführungszeichen zur Angabe gnuplotder Ausgabe würden den Parser verwirren. Ein Ausweg könnte beispielsweise ein Bash-Skript xoff-norm.shmit folgendem Inhalt sein:

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

damit Ihr Dokument

\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}

Ich habe es immer catchfilevermieden, das Rad neu zu erfinden. In diesem Fall jedochzweiProzesse werden anstelle von einem gestartet. Treffen Sie Ihre Wahl.

verwandte Informationen