在下面使用自然语法排版主题标签Joseph Wrigh 让我问一个新问题:
在 LaTeX 中,\makeatletter
是更改 类别代码的缩写@
。但类似
\def\makenumbersignletter{\catcode`#=11}
出现错误。我该怎么办?
这是一个不起作用的例子。
\documentclass{minimal}
\begin{document}
\def\makenumbersignletter{\catcode`#=11}
\end{document}
更多问题
根据约瑟夫的回答,最安全的方法是
\catcode`\#=11\relax
然后我想到为什么 TeX 接受不安全方式\catcode`@11
?那应该\catcode`\=11
是什么:是\catcode`\\=11
还是\catcode`\==11
?\let\a\b
和之间也存在同样的问题\let\a=\b
。最糟糕的是`
和=
没有特定的类别代码,如果有一天我需要\makegraveletter
还是怎么办\makeequalsignletter
?
答案1
这里的简单答案是您需要转义#
并使用\#
:某些字符本身并不“安全”,但转义版本始终是安全的。一个典型的例子是%
,它通常会启动注释,但当您使用时则不会\%
。正如戴维 说,特克斯总是允许在诸如 `\catcode 的上下文中使用单字符命令作为反引号语法的一部分,因此即使不需要,使用转义版本也总是安全的。
利用这些知识,并使用链接问题中的例子来提出一些不同的可能性,我们最终可能会得到类似
\documentclass{article}
\newcommand*\makehashletter{\catcode`\#=11 }
\newcommand*\makehashparameter{\catcode`\#=6 }
\newcommand*\makehashtag{%
\begingroup
\lccode`\~=\#
\lowercase{%
\endgroup
\def~##1}{\maketag{##1}}%
\catcode`\#=\active
}
\newcommand\maketag[1]{\##1}
\begin{document}
\makehashletter
#
\makehashtag
#text
\makehashparameter
\end{document}
请注意,我在这两种情况下的 catcode 后面都添加了一个空格:这会阻止 TeX 寻找更多数字,这是创建此类命令时的最佳做法。(我可以\relax
在这里使用。)
答案2
您可以使用
`\#
因此,反引号表示法采用单个字符或单个字符控制标记。