\operatorname 生成 ∓ 而不是连字符

\operatorname 生成 ∓ 而不是连字符

如果我编译

\documentclass{article}
\usepackage{stix}
\usepackage{amsmath}
\begin{document}
$\operatorname{some-operator}$
\end{document}

然后我得到输出

some∓运算符

我该如何解决这个问题?

答案1

默认的 LaTeX 定义是通过

\DeclareMathSymbol{-}{\mathbin}{symbols}{"00}

这意味着-获得一个数学代码0x2200

但是如果你加载 stix,那么 amsmath:

  • stix 将数学代码更改为0x202A使用“运算符”字体,
  • amsmath\operatorname也使用“运算符”字体,但著名的宏强制为连字符\newmcodes@分配数学代码。0x0045

事实证明,在 stix 设置的“operators”字体中,在这个位置有您看到的字符。(字体宏是\LS1/stix/m/n

最小的例子是

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{stix}
\usepackage{amsmath}
\begin{document}
$\operatorname{foo-bar}$
\end{document}

stix 的文档确实建议加载 amsmath, 尽管 :-(

可能的(不是很有用)解决方法

\makeatletter
$\operatorname{foo\mathord{\std@minus}bar}$

stix啊,好的,包里有一个补丁

\@ifpackageloaded{amsopn}{
    \begingroup \catcode`\"=12
    \gdef\newmcodes@{%
      \mathcode`\'="007F\relax%
      \mathcode`\*="003C\relax%
      \mathcode`\.="613A\relax%
      \ifnum\mathcode`\-="002A \else
        \mathchardef\std@minus\mathcode`\-\relax
      \fi
      \mathcode`\-="002A\relax%
      \mathcode`\/="005F\relax%
      \mathcode`\:="603A\relax%
    }
    \endgroup
}{}

因此,您应该简单地执行括号内的代码,在\makeatletter/\makeatother加载之后amsmath(在之后加载的情况下stix)。

相关内容