我正在寻找一种方法,在文本模式下用其数学等价物(即)在一个环境/组中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{-}
而不是$-$
。