如果\@percentchar
代表%
,是否有 的宏#
?我试过\@sharpchar
和 ,\@numberchar
但都不存在。您知道 的正确宏名是什么吗#
?
答案1
这取决于你想做什么。如果你需要的只是打印a#
是\#
好的;但是\#
不可扩展,因此在 a 中\write
它将被传递为\#
。在 a 中,\write18
shell 有责任正确解释它。例如,在 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#}
或者您选择的其他宏名称。