2

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

我建议让你的 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!
于 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 对文件进行了两次传递,而 TeX 没有。在第一遍中,LaTeX 尝试确定某些内容,然后关闭文件,并在第二遍中重新打开它。

于 2009-09-18T04:38:37.140 回答