如果我编译
\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
)。