\input 如何添加空格?

\input 如何添加空格?

考虑以下 :

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.texB<newline>%<newline>。前两个文件有一条记录,第三个文件有两条记录。

在我们的类别代码为 5 的例子中,被<newline>替换。\endlinechar^^M

类别代码 5 字符的操作是触发在标记输入流中插入空格标记,并将 TeX 设置为状态. 通常情况下,\par如果在跳过下一行的空格之后只^^M发现另一个空格,则会触发标记的插入。

当 TeX 开始读取\input文件时,它会被强制处于状态,无论扫描时的状态如何。但是,当文件完全读入后,\inputTeX 会恢复到之前的状态。\input

因此你得到了空格(或双倍空格),因为最后一个^^M没有跟^^M在状态后面

异常(的模块 538 tex.web):如果\input文件为空,则认为它由单个空行组成,从而触发\par

它与 LaTeX 相同,因为\input最终会调用\@@input,即原始的\input

因此示例中的行为equation与示例中的行为基本相同

A\input foo1
C

这相当于A\input{foo1}CLaTeX 语法。不\par插入。

相关内容