尾随空格结束 \input| 参数

尾随空格结束 \input| 参数

为什么\message{\input|"texlua ..."}\message{\input|"texlua ..." }的结果截然不同?请注意}第二种情况之前的多余空格。

下面是要编译的最小示例pdftex --shell-escape

% Create an empty file \jobname.lua
%
\immediate\openout5\jobname.lua
\immediate\closeout5
%
% Only difference between \A and \B: a trailing space.
% Set \everyeof to allow \input within \edef.
%
\everyeof{\noexpand}
\edef\A{\input|"texlua \jobname.lua"}
\edef\B{\input|"texlua \jobname.lua" }
%
% Display the meanings in the terminal.
%
\newlinechar=10
\message
  {%
    ^^J^^J%
    \meaning\A % => macro:->Script file <jobname>.lua
    ^^J^^J%
    \meaning\B % => macro:->\par
    ^^J^^J%
  }
\bye

答案1

我认为这是因为引号不是参数括号,只是用来保护空格的引号。如果您运行以下命令:

\input "abc"d

\input "abc" d
\bye

您将收到以下错误消息(当然假设文件不存在):

! I can't find file `abcd'.
l.14 \input "abc"d

! I can't find file `abc'.
l.16 \input "abc" 
                  d

例如使用 xetex\XeTeXinputencoding "utf8"cde也会导致Unknown encoding utf8cde。您必须使用空格来真正结束输入。

根据评论中的讨论进行补充:

这意味着该\edef\A案例的处理方式可能如下:\edef\A{\input|"texlua \jobname.lua"}\relax=> \edef\A{Script file <jobname>.lua>} not found=>\AScript file <jobname>.lua并且not found是排版的。

相关内容