将文本模式下的字符替换为相应的数学符号

将文本模式下的字符替换为相应的数学符号

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

相关内容