2

Unixの名前付きパイプfifoでLaTeX を実行しています。fifo のようなものを作成します。

$ mkfifo fifo

次に、LaTeX を次のように実行します。

$ latex fifo

このプロセスはブロックされ、別のシェルから fifo に書き込むまで出力がありません。

$ echo "\\end" > fifo

$ latex fifoの出力は次のようになります。

This is pdfTeXk, Version 3.1415926-1.40.9 (Web2C 7.5.7)
%&-line parsing enabled.
entering extended mode

ただし、LaTeX プロセスが終了することはありません。LaTeXを終了するにはどうすればよいですか? chr(0) と chr(4) (つまりctrl-d ) を送信しようとしましたが、どちらも機能しません。LaTeX に終了を指示するコマンド (\exit など) はありますか?

読んでくれてありがとう。

編集

latexのバリアントの代わりにtexを実行すると、次のことが期待どおりに機能することに注意してください。

$ echo "story\\end" > fifo

(その間、texコンソールで)

$ tex fifo
This is TeX, Version 3.1415926 (Web2C 7.5.7)
(./fifo [1] )
Output written on fifo.dvi (1 page, 212 bytes).
Transcript written on fifo.log.

ただし、Leslie Lamport はA Document Preparation System LaTeX on page 233 で、\end が \end{document} に置き換えられたと述べていますが、次のいずれも LaTeX セッションを終了しません。

$ echo "\begin{document}story\end{document}"
$ echo "\\begin{document}story\\end{document}"
4

2 に答える 2

2

シェルがfifoパイプを標準入力に向けることを許可することをお勧めします。

latex < fifo

これを行うと、最初に次の出力が得られます。

This is pdfeTeXk, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2009.3.25)  18 SEP 2009 14:25
entering extended mode
 file:line:error style messages enabled.
 %&-line parsing enabled.

そして、echo コマンドの後:

**\end

*
! Emergency stop.
<*> \end

End of file on the terminal!
于 2009-09-18T04:28:44.977 に答える
1

最初に fifo に空白行をエコーし​​、次にドキュメントの残りをエコーすると、正常に動作します。

mkfifo test
latex test

その他のコンソール:

echo "" > test
echo "\documentclass{report}\begin{document}asdf\end{document}" > test

最初のコンソール:

xdvi test

私の推測では、LaTeX はファイルの 2 つのパスを作成しますが、TeX は作成しません。最初のパスで、LaTeX は何かを判断しようとし、次にファイルを閉じ、2 番目のパスで再び開きます。

于 2009-09-18T04:38:37.140 に答える