\input
我想知道在没有任何参数/参数的情况下调用后跟一个空行会产生什么效果:
代码:
....
\input
....
答案1
TeX 基元\input
不使用括号组,而是以特定于实现的方式(对 TeX 来说很少见)解析以下标记以查找文件名,并根据需要扩展标记。在基于 web2c 的实现中(几乎所有当前实现),这是非空白字符或"
带引号的字符串内的空格序列。
LaTeX 将其包装在一个定义中,该定义会提前查找{
,如果存在,则采用括号组并丢弃括号,并在末尾添加一个空格。
所以
\input
是相同的
\input{}
并输入文件.tex
(LaTeX 发行版包含该文件以避免在此输入时出现低级文件未找到错误)
答案2
这取决于接下来会发生什么\input
。如果我跑tex zehrfeld
,zehrfeld.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
会进行宏扩展,直到找到字符标记。