如果 \@percentchar 代表%,那么是否有# 的宏?

如果 \@percentchar 代表%,那么是否有# 的宏?

如果\@percentchar代表%,是否有 的宏#?我试过\@sharpchar和 ,\@numberchar但都不存在。您知道 的正确宏名是什么吗#

答案1

这取决于你想做什么。如果你需要的只是打印a#\#好的;但是\#不可扩展,因此在 a 中\write它将被传递为\#。在 a 中,\write18shell 有责任正确解释它。例如,在 Unix 系统上你不能这样做

\write18{echo # foo}

(可能会传递更有用的命令),因为 shell 不会将其视为foo注释#字符。执行

\write18{echo \# foo}

将回显# foo。另一方面,

\write18{echo '# foo'}

会回显## foo,因为 TeX 有一个特殊的习惯,即在标记列表中将井号加倍#,而类别代码通常为 6。但是

\write18{echo '\# foo'}

会回响\# foo

因此,一个好的策略是拥有一个在所有情况下都扩展为类别代码 12 井号的控制序列,因为 TeX 会扩展标记列表\write

\edef\hashmark{\string#}

因此

\write 18{echo '\hashmark\space foo'}

将会回显# foo

不幸的是,不同的 shell 往往有自己的特性,对于特殊字符,在每个操作系统上让所有 shell 的行为都相同总是很麻烦。有些 shell 需要在命令周围加上引号,有些则不需要(我猜 Windows 的惯例与 Unix 非常不同)。

答案2

要排版,#您可以使用\#,但要有一个扩展为 catcode 12(普通字符)的宏,#请使用\zzz

\edef\zzz{\string#} 

或者您选择的其他宏名称。

相关内容