在命名管道(fifo)上调用LaTeX?

时间:2009-09-18 04:12:33

标签: latex named-pipes fifo

我在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}"

2 个答案:

答案 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尝试确定某些内容,然后关闭文件,并在第二次传递时重新打开它。