\write18 与 \csname 不评估

\write18 与 \csname 不评估

我注意到,write18在 中定义时,其行为有所不同csname

也就是说,给出以下代码:

\documentclass{article}
\begin{document}

\csname textbf\endcsname{param} after

\csname write18\endcsname{sleep 10}

\end{document}

它产生以下输出:

在此处输入图片描述

我期望它评估 shell 命令sleep 10,但它却将其写入 pdf 流。我最好的猜测是,这是一种防止write18命令混淆的安全机制,但我不确定。

PS latex 被称为pdflatex -shell-escape test.tex

答案1

当你这样做

\csname write18\endcsname{sleep 10}

TeX 构建了一个名为 的控制序列write18。(为了清晰起见,我使用了键盘符号。) 的副作用\csname...\endcsname是,如果控制序列未定义,它将被定义,并且其定义是\relax。整个构造不执行任何操作,您只能{sleep 10}以通常的方式打印出 。

\write18有所不同:它是(原始)控制序列,write后跟数字18(然后需要一个标记列表)。您期望的结果是通过

\csname write\endcsname18{sleep 10}

相关内容