我在Unix上的命名管道 fifo 上运行LaTeX。我像这样创建了fifo:
$ mkfifo fifo
然后我像那样运行LaTeX:
$ latex fifo
在我从另一个shell写入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)?
感谢阅读。
修改:
值得注意的是,当您运行 tex 而不是 latex 的变体时,以下内容将按预期工作:
$ 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在第233页的文档准备系统LaTeX 中注意到\ end已被\ end {document}替换,但以下任何一项都不会结束LaTeX会话:
$ echo "\begin{document}story\end{document}"
$ echo "\\begin{document}story\\end{document}"
答案 0 :(得分:2)
我建议允许你的shell将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!
答案 1 :(得分:1)
如果我先将空白行回显到fifo中,然后然后回显文档的其余部分,它就可以正常工作。
mkfifo test
latex test
其他控制台:
echo "" > test
echo "\documentclass{report}\begin{document}asdf\end{document}" > test
第一个控制台:
xdvi test
我的猜测是,LaTeX会对文件进行两次传递,而TeX则没有。在第一次传递时,LaTeX尝试确定某些内容,然后关闭文件,并在第二次传递时重新打开它。