컴파일 중 메시지 표시 안 함

컴파일 중 메시지 표시 안 함

나는 큰 문서의 각 페이지에서 \write18및 와 함께 매크로를 여러 번 사용합니다 . \@@input그러나 \@@input컴파일하는 동안 메시지를 출력합니다.

(filename)

이는 매우 짜증나는 일이며 다른 관련 정보가 넘쳐납니다.

\@@input매크로를 컴파일하는 동안 조용히 할 수 있는 방법이 있습니까 (저는 를 사용합니까 pdflatex)?

내가 지금 가지고 있는 것은 다음과 같습니다.

\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

나는 write18에서 계산 결과를 얻는 데 사용합니다 gnuplot. 그러나 keep이 있는 줄은 메시지 \@@input를 출력합니다 (filename). 의 출력을 읽기 위해 다른 것을 사용할 수 있습니까 gnuplot?

그것을 사용하려면: \gpNorm{\res}{1}의 계산 결과를 gnuplot매크로에 할당합니다 \res.

답변1

억제할 수 있는 방법이 없습니다.

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

터미널의 메시지와 \input읽을 파일을 열어 기본 요소가 작동할 때마다 TeX에 의해 생성되는 로그 파일에 있습니다(일치 항목은 )파일 끝을 스캔할 때 생성됩니다).

이 진단 정보는 TeX 내부 깊은 곳에서 나오며 매크로를 사용하여 동작을 변경할 수 없습니다. 기본 요소 \font(글꼴이 아직 메모리에 로드되지 않은 경우) 또는 및 \openin및 를 사용하여 읽은 파일만 \read표시되지 않습니다.


명령 의 출력이 gnuplot하나의 라이너라는 것을 알고 있는 경우 다음을 사용하여 해당 단일 행을 읽을 수 있습니다 \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}

PDF 파일의 출력은 다음과 같습니다.

0.977249868051821

터미널 출력은

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.

NET의 다음 릴리스에도 포함되어야 하며 pdftex사용할 수 있는 "파이프 입력" 기능을 활용하는 다른 방법이 있습니다 . 전달된 파일 이름 ( LaTeX에 있음 )이 다음으로 시작 하고 활성화된 경우 프로세스는 나머지 이름을 명령줄로 사용하여 시작됩니다. 표준 출력은 입력 파일로 간주됩니다.luatexxetex\input\@@input|-shell-escape

그러나 이 특별한 경우에는 할 일이 많지 않습니다. 명령줄에 공백이 있으면 전체 "파일 이름"을 큰따옴표로 묶어야 하며 gnuplot출력을 알리기 위한 내부 이름은 구문 분석기를 혼란스럽게 합니다. 탈출구는 xoff-norm.sh다음 내용을 포함하는 Bash 스크립트를 사용하는 것입니다.

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

귀하의 문서가

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

나는 catchfile바퀴를 재발명하는 것을 피하곤 했습니다. 하지만 이 경우에는프로세스가 하나 대신 시작됩니다. 골라보세요.

관련 정보