定义一个改变数字符号类别码的宏(即\makenumbersignletter)

定义一个改变数字符号类别码的宏(即\makenumbersignletter)

在下面使用自然语法排版主题标签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

您可以使用

`\#

因此,反引号表示法采用单个字符或单个字符控制标记。

相关内容