我注意到,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}