考虑以下 :
A\input{foo1}C
A\input{foo2}C
A\input{foo3}C
A\input{foo3}
C
其中 foo1.tex 包含“B”,foo2.tex 包含“B%”,foo3.tex 包含“B\n%”。
在第一种情况下,我们得到“AB C”,在第二种情况下得到“ABC”,在第三种情况下得到“AB C”,在第四种情况下得到“AB C”(双倍空格)。
到目前为止我们可以认为A\input{foo}C
等同于A<insert foo>\n C
。
但,
\begin{equation}
\input{bar}
\end{equation}
bar.tex 包含“a=b”不会产生预期的错误(两个 \n 在等式内部形成一个空行)。
问题
所以我的问题是:什么\input{foo}
相当于?当文件未以 % 或其他方式结束时,是否有条件添加 \n?
我并不是问如何摆脱多余的空间,而是相反,问在\input{foo}
用 的内容替换时如何保留这些多余的空间foo.bar
。
不等价于额外的换行符
让foo.tex
仅包含“A”
\input{foo}B
会产生与“A\nB”相同的结果,但是
\input{foo} B
将在 A 和 B 之间产生更大的空间,这并不等同于“A\n B”。
答案1
我猜\n
你的意思是“新路线”。
由于文件系统可以对文件执行不同的操作,因此 TeX 总是在输入文件的末尾添加一个隐式的行尾字符。在这里我将讨论原始 \input
。
因此,foo1.tex
可以看到您的文件包含B<newline>
、foo2.tex
包含B%<newline>
和foo3.tex
有B<newline>%<newline>
。前两个文件有一条记录,第三个文件有两条记录。
在我们的类别代码为 5 的例子中,被<newline>
替换。\endlinechar
^^M
类别代码 5 字符的操作是触发在标记输入流中插入空格标记,并将 TeX 设置为状态否. 通常情况下,否\par
如果在跳过下一行的空格之后只^^M
发现另一个空格,则会触发标记的插入。
当 TeX 开始读取\input
文件时,它会被强制处于状态否,无论扫描时的状态如何。但是,当文件完全读入后,\input
TeX 会恢复到之前的状态。\input
因此你得到了空格(或双倍空格),因为最后一个^^M
没有跟^^M
在状态后面否。
异常(的模块 538 tex.web
):如果\input
文件为空,则认为它由单个空行组成,从而触发\par
。
它与 LaTeX 相同,因为\input
最终会调用\@@input
,即原始的\input
。
因此示例中的行为equation
与示例中的行为基本相同
A\input foo1
C
这相当于A\input{foo1}C
LaTeX 语法。不\par
插入。