\TeX 和 \LaTeX 以不同的方式 expl3-x-written(穷举扩展)到辅助文件

\TeX 和 \LaTeX 以不同的方式 expl3-x-written(穷举扩展)到辅助文件

正如以下 MCE 所指出的,\TeX\LaTeX写入expl3辅助文件:

  • 一样的方法什么时候无操纵涉及(\iow_now:Nn)(但这对我的实际用例来说毫无用处):

    \LaTeX {}
    \TeX {}
    
  • 不同地什么时候穷举扩展参与 (\iow_now:Nx):

    \protect \LaTeX  {}
    T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\@{}
    

为什么会有这种差异以及如何得到\protect \TeX {}而不是T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\@{}

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\iow_new:N \g_output_stream

\iow_open:Nn \g_output_stream { \c_sys_jobname_str.sbj }
\iow_now:Nn \g_output_stream { \LaTeX{} }
\iow_now:Nn \g_output_stream { \TeX{} }
\iow_now:Nx \g_output_stream { \exp_not:V\LaTeX{} }
\iow_now:Nx \g_output_stream { \exp_not:V\TeX{} }
\iow_close:N \g_output_stream

\ExplSyntaxOff

\begin{document}
\end{document}

答案1

如果我们这样做\show\TeX,结果是

\TeX=macro:
->T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\@.

另一方面,结果\show\LaTeX

   > \LaTeX=macro:
   ->\protect \LaTeX  .

现在在使用\LaTeX中定义,并且正如@egreg 指出的那样,可以以相同的方式保护现有的宏。latex.ltx\DeclareRobustCommand\MakeRobust

\documentclass{article}
\MakeRobust{\TeX}

\usepackage{xparse}

\ExplSyntaxOn

\iow_new:N \g_output_stream

\iow_open:Nn \g_output_stream { \c_sys_jobname_str.sbj }
\iow_now:Nn \g_output_stream { \LaTeX{} }
\iow_now:Nn \g_output_stream { \TeX{} }
\iow_now:Nx \g_output_stream { \exp_not:V\LaTeX{} }
\iow_now:Nx \g_output_stream { \exp_not:V\TeX{} }
\iow_close:N \g_output_stream

\ExplSyntaxOff

\begin{document}
\end{document}

答案2

你不想要\exp_not:V,而是\exp_not:N

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\iow_new:N \g_output_stream

\iow_open:Nn \g_output_stream { \c_sys_jobname_str.sbj }
\iow_now:Nn \g_output_stream { \LaTeX{} }
\iow_now:Nn \g_output_stream { \TeX{} }
\iow_now:Nx \g_output_stream { \exp_not:N \LaTeX{} }
\iow_now:Nx \g_output_stream { \exp_not:N \TeX{} }
\iow_close:N \g_output_stream

\ExplSyntaxOff

\begin{document}
\end{document}

辅助文件将具有

\LaTeX {}
\TeX {}
\LaTeX {}
\TeX {}

有什么区别?在这种情况下,\exp_not:V进行一步扩展,但这里不需要,因为\LaTeX\TeX不是变量,但没有参数功能. 回想一下,V代表多变的并用于获取其值,不受进一步扩展。

相关内容