将 stdin 传递给 pdflatex 会给出“请输入命令或说 \end”

将 stdin 传递给 pdflatex 会给出“请输入命令或说 \end”

我有一个简单的 tex 文件:

\documentclass{article}\begin{document}

Hi world.

\end{document}

当我将它传递给pdflatexstdin( cat tmp.tex | pdflatex) 时,它会正确生成输出 pdf texput.pdf,但会在每个换行符上跳转,并显示

*(Please type a command or say '\end')

如图所示:

% cat tmp.tex | pdflatex             

This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021) (preloaded format=pdflatex)
 restricted \write18 enabled.
**entering extended mode
LaTeX2e <2020-10-01> patch level 4
L3 programming layer <2021-02-18>
(/usr/local/texlive/2021basic/texmf-dist/tex/latex/base/article.cls
Document Class: article 2020/04/10 v1.4m Standard LaTeX document class
(/usr/local/texlive/2021basic/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2021basic/texmf-dist/tex/latex/l3backend/l3backend-pdftex.d
ef) (./texput.aux)
*(Please type a command or say `\end')
*
*(Please type a command or say `\end')
*[1{/usr/local/texlive/2021basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./texput.aux)</usr/local/texlive/2021basic/texmf-dist/fonts/type1/public/amsfo
nts/cm/cmr10.pfb>
Output written on texput.pdf (1 page, 11848 bytes).
Transcript written on texput.log.

似乎一个解决方法是将每个换行符替换为\\,从而给出pdflatex一行长输入。事实上pdflatex --help

Alternatively, if the first non-option argument begins with a backslash,
interpret all non-option arguments as a line of pdfTeX input.

(在本例中,第一个非选项参数是 stdin 的第一行:\documentclass{...。)但是,用 替换所有换行符\\似乎不是正确的方法。当我在较大的 .tex 文件中尝试此方法时,pdflatex内存不足。

我怀疑我需要设置pdflatex一个模式,让它像文件一样读取 stdin。但我试过了

cat tmp.tex | pdflatex -interaction=nonstopmode

cat tmp.tex | pdflatex -interaction=batchmode

但它们都没有生成 pdf,并且它们的 .log 文件显示了错误

*** (job aborted, no legal \end found)

我的问题是:传递 stdin 的正确方法是什么,pdflatex这样当遇到换行符时就不会感到困惑?

相关内容