当加载 unicode-math 包时,如何声明一个以希腊字母 sigma 为字形的数学运算符?

当加载 unicode-math 包时,如何声明一个以希腊字母 sigma 为字形的数学运算符?

问题简要描述

我想在unicode-math加载包时创建一个数学运算符,其字形是希腊小写字母 sigma。

通过最小工作示例演示问题

我在文件中保存了以下 LaTeX 代码~/Test.tex

\documentclass{article}
\usepackage{amsmath}
%\usepackage{unicode-math}
%\setmathfont{STIX Two Math}
\DeclareMathOperator{\op}{\sigma}
\begin{document}
\begin{align*}
&\op x\\
&\sigma x
\end{align*}
\end{document}

代码创建了一个名为 的数学运算符\op,其字形为希腊小写字母 sigma。文档正文既使用了运算符,也使用了裸字母 sigma。

然后我在终端中执行了以下命令。

> cd ~
> lualatex Test

这导致创建了文件~/Test.pdf。在 PDF 查看器中打开时,此文件显示如下。(我仅截取了显示的相关部分)。

西格玛数学运算符

可以看出,运算符和裸 sigma 的行为不同:运算符和后续字母之间的间距大于裸 sigma 和后续字母之间的间距。这就是我希望将 sigma 定义为数学运算符而不是简单地使用裸字母的原因。

如果现在取消注释这两行,以便加载unicode-math包并将数学字体设置为STIX二,并重新编译代码,得到的PDF文件显示如下。

带有 unicode-math 的 Sigma

正如所见,操作员应该在的位置没有打印出任何内容。

问题

  1. unicode-math为什么包裹装载时操作员没有打印出来?
  2. unicode-math当包加载时,如何定义一个数学运算符,其字形为希腊小写字母 sigma,以及STIX二设置为数学字体吗?

评论

(以下评论是在原始问题发布一天后发布的,并且已经提出了几种答案。)

下面的回答中提到,有几个用户\DeclareMathOperator在文档的文本字体中寻找作为第二个参数传递的字符代码的字形,因此STIX Two Text使用命令将文档的文本字体设置为\setmainfont{STIX Two Text},应该可以解决我在原始问题中描述的问题。

然而,下面的代码破坏了这些说法。

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\DeclareMathOperator{\op}{\sigma}
\begin{document}
\begin{align*}
&\op x\\
&\sigma x
\end{align*}
\end{document}

STIX Two Text 不能解决问题。

答案1

使用传统字体设置\mathrm对 sigma 没有影响,字体没有变化也是如此,因此您可以\mathrm{\sigma}使用\sigma

\newcommand\op{\mathop{{}\sigma}}

有或没有都可以unicode-math

答案2

操作员取自文本字体,因此你需要一个合适的并且有希腊字母的字体。例如

\documentclass{article}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{STIX}
\usepackage{unicode-math}
\setmathfont{STIX Two Math}
\DeclareMathOperator{\op}{\sigma}
\begin{document}
\begin{align*}
&\op x\\
&\sigma x
\end{align*}
\end{document}

(如果没有可用的字形,日志会显示警告:Missing character: There is no

答案3

在 8 位 TeX 中,字体的大小非常有限,因此 Knuth 提出了家庭在 LaTeX 中,它们被称为数学团体

该命令\sigma实际上是数学码,四个十六进制数字,指定应从哪个数学组中获取符号。只有最高有效位为 7 的数学代码才允许从 的当前值中获取符号\mathgroup

工作原理如下\mathrm:它设置\mathgroup为 0 而不是默认值 -1,因此以 7 为首位数字的数学代码将指向与数学组 0 相对应的字体中的所需插槽。

这不是 的模型unicode-math,其中基本上只有一种数学字体,而不是几种。大多数字符的数学代码都以 7 开头,包括\sigma,因为unicode-math想要更改而不是字体。

还要注意,\mathrm使用 定义的命令会\DeclareMathOperator切换到主文本字体,而该字体不一定包含 sigma(准确地说,

答案4

在第二行中,\sigma将使用字形U+1D70E(

相关内容