调用不带参数的 \input

调用不带参数的 \input

\input我想知道在没有任何参数/参数的情况下调用后跟一个空行会产生什么效果:

代码:

....
\input

....

答案1

TeX 基元\input不使用括号组,而是以特定于实现的方式(对 TeX 来说很少见)解析以下标记以查找文件名,并根据需要扩展标记。在基于 web2c 的实现中(几乎所有当前实现),这是非空白字符或"带引号的字符串内的空格序列。

LaTeX 将其包装在一个定义中,该定义会提前查找{,如果存在,则采用括号组并丢弃括号,并在末尾添加一个空格。

所以

\input

是相同的

\input{}

并输入文件.tex(LaTeX 发行版包含该文件以避免在此输入时出现低级文件未找到错误)

答案2

这取决于接下来会发生什么\input。如果我跑tex zehrfeldzehrfeld.tex

\input

blank line above

\input
no blank line

\bye

我得到以下控制台输出:

This is TeX, Version 3.14159265 (TeX Live 2018) (preloaded format=tex)
(./zehrfeld.tex (/usr/local/texlive/2018/texmf-dist/tex/latex/tools/.tex
File ignored)
! I can't find file `no'.
l.6 no 
       blank line
(Press Enter to retry, or Control-D to exit)
Please type another input file name: 

原因是空白行被转换为\par,在正常情况下是不可展开的。因此,在第一种情况下文件名为空,并被.tex尝试;它存在于 LaTeX 工具分发中。

在第二种情况下,空格再次被忽略并且文件名在空格处停止,因此no.tex被寻找。

顺便说一句,\input\space story不要寻找带有前导空格的文件。

如果你尝试使用 LaTeX,也会发生同样的事情,因为\input被重新定义为寻找以下内容{(吃空格);如果没有找到开括号,则\input调用原语。测试文件

\documentclass{article}
\begin{document}

\input

blank line above

\input
no blank line

\stop

生产

This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) (preloaded format=latex)
 restricted \write18 enabled.
entering extended mode
(./zehrfeld.tex
LaTeX2e <2018-12-01>
(/usr/local/texlive/2018/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/local/texlive/2018/texmf-dist/tex/latex/base/size10.clo)) (./zehrfeld.aux
) (/usr/local/texlive/2018/texmf-dist/tex/latex/tools/.tex File ignored)
! I can't find file `no'.
l.9 no 
       blank line
(Press Enter to retry, or Control-D to exit)
Please type another input file name: 

当查找文件名为空的文件时会发生什么取决于您的发行版,也可能取决于 TeX 实现。例如,旧的 TeXtures 首先尝试查找文件没有扩展名,因为在 Macintosh 世界(80 年代末和 90 年代)中不使用文件扩展名。

最后说明:如果\par重新定义,则可能会发生其他事情:尝试

\def\par{a\endgraf}

\input

blank line above

\input
no blank line

\stop

因为a.tex原语\input会进行宏扩展,直到找到字符标记。

相关内容