我的计算设置的背景信息:MacBook Air(2019 年末型号)、MacOS 11.2.3“Big Sur”、MacTeX2021,所有更新均为最新。
考虑以下 MWE:
\documentclass{article}
%\obeylines
\begin{document}
abc
\end{document}
它(毫不奇怪)在 pdfLaTeX、XeLaTeX 和 LuaLaTeX 下编译良好。相反,如果删除%
之前的注释字符\obeylines
,则会收到以下错误消息:
在 pdfLaTeX 下:
... (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def ! Missing \endcsname inserted. <to be read again> ^^M l.29 {l3backend-pdftex.def}{2021-03-18}{}
在 XeLaTeX 下:
(/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-xetex.def ! Missing \endcsname inserted. <to be read again> ^^M l.29 {l3backend-xetex.def}{2021-03-18}{}
在 LuaLaTeX 下:
... (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-luatex.def ! Missing \endcsname inserted. <to be read again> l.29 {l3backend-luatex.def}{2021-03-18}{}
观察:
^^M
LuaLaTeX 错误消息中没有,与 pdfLaTeX 和 XeLaTeX 不同。
附言:Plain-TeX 测试文档
\obeylines
abc
\bye
在 pdfTeX、XeTeX 和 LauTeX 下编译良好。
问题:这是错误吗?还是功能?有已知的解决方法吗?FWIW:我确信测试程序在 MacTeX2020 下可以很好地编译。
答案1
根据评论的社区答案
\obeylines
必须使用该命令后\begin{document}
和不是前\begin{document}
。
背景
您可能有几行连续的输入,而您希望输出以相同的方式逐行显示。一种解决方案是
\par
在每行输入的末尾键入;但这有点麻烦,所以纯 TeX 提供缩写\obeylines
,这导致每个行结束在输入中像\par
。在您说完后,\obeylines
您将每输入一行获得一行输出,除非输入行以 结尾%
,或者除非输入行太长而必须断开。例如,\obeylines
如果您正在排版一首诗,您可能想要使用 。一定要用\obeylines
组括起来,除非您希望此“诗歌模式”持续到文档末尾。TeXBook 第 94 页
正确的
版本 1
\documentclass{article}
\begin{document}
\obeylines % :)
Word
Word
\end{document}
版本 2
\documentclass{article}
\begin{document}
% Alternative :)
% https://latex.org/forum/viewtopic.php?t=12340
\begin{obeylines}
Word
Word
\end{obeylines}
\end{document}
不正确
\documentclass{article}
\obeylines % :(
\begin{document}
Word
Word
\end{document}
<to be read again> \scan_stop: l.29 {l3backend-pdftex.def}{2021-07-12}{} The control sequence marked <to be read again> should not appear between \csname and \endcsname.