问题简要描述
我想在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
为什么包裹装载时操作员没有打印出来?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}
答案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
(