![将文本模式下的字符替换为相应的数学符号](https://linux22.com/image/287198/%E5%B0%86%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F%E4%B8%8B%E7%9A%84%E5%AD%97%E7%AC%A6%E6%9B%BF%E6%8D%A2%E4%B8%BA%E7%9B%B8%E5%BA%94%E7%9A%84%E6%95%B0%E5%AD%A6%E7%AC%A6%E5%8F%B7.png)
我正在寻找一种方法,在文本模式下用其数学等价物(即)在一个环境/组中TeX
替换(或其他字符) 。我正在寻找一个“开关”(而不是)。-
$-$
\foo #
\foo{#}
下面的代码基本上实现了我想要的功能,但只能在数学模式下工作。
\def\foo{%
\bgroup\uccode`\~\expandafter`\string-%
\uppercase{\egroup\edef~{\noexpand\text{$-$\relax}}}%
\mathcode\expandafter`\string-"8000 }
\def\textsymbols{\foo}
我一直没能想出解决办法。我最接近的办法是以下命令,它接受一个参数(我不想要),并且它不起作用$-$
(但$+$
可以工作)。
\begingroup
\catcode`-=\active\gdef\foo{%
\begingroup\catcode`-=\active\gdef-{$+$}%
\fooaux
}\gdef\fooaux#1{\endgroup #1}
\endgroup
用例如下:
\begin{table}
\foo
- is now set in math.
\end{table}
答案1
您应该-
在替换文本中使用非活动的文本:
\def\foo{\catcode`\-=\active
\begingroup\lccode`~=`-
\lowercase{\endgroup\def~}{$-$}%
}
\begingroup\foo
This is a - sign and not a hyphen.
\endgroup
Now - is a hyphen.
\bye
在 LaTeX 上下文中您可能希望使用\ensuremath{-}
而不是$-$
。