打印在文本和/或数学模式下激活的字符?

打印在文本和/或数学模式下激活的字符?

我不太熟悉 TeX 的分类代码。如果我使用

\catcode`\|=13 \renewcommand{|}{hello world}

那么我的文档中所有 都|将被 替换hello world。但是,我如何才能继续打印符号呢|?当然,循环引用

\catcode`\|=13 \renewcommand{|}{hello|world}

不起作用(超出了 TeX 的强大容量),尽管我希望所有 的实例都|打印为。如果我没记错的话,上面的代码只适用于常规文本模式。如果要在数学模式下使用hello|world,上面的代码会有什么变化?|

答案1

通常采用两种方法来解决这个问题。

A

在更改 catcode 之前,将具有原始 catcode 的字符保存在宏中。这是有效的,因为 catcode 是在输入时分配的。

\documentclass{article}

\newcommand{\mypipe}{|}
\catcode`\|=\active
\renewcommand{|}{hello\mypipe world}

\begin{document}

|

\end{document}

使用 强制将 catcode 设置|为 12 \string

\documentclass{article}

\catcode`\|=\active
\renewcommand{|}{hello\string|world}

\begin{document}

|

\end{document}

数学模式

字符也可以仅在数学模式下处于活动状态,即其数学代码可以是"8000。为了在这种情况下获得原始含义,可以定义一个控制序列作为字符前一个数学代码的同义词:

\mathchardef\mymathpipe=\mathcode`\|

看看实施情况icomma包作为示例。

相关内容