我有一个简单的 tex 文件:
\documentclass{article}\begin{document}
Hi world.
\end{document}
当我将它传递给pdflatex
stdin( 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
这样当遇到换行符时就不会感到困惑?