问题不言而喻,以下是示例:
\documentclass[12pt]{article}
%% Language of the document
\usepackage{polyglossia}
\setmainlanguage{spanish}
\usepackage{unicode-math}
%% Text font of the document
\setmainfont{STIX2Text-Regular.otf}[
BoldFont = STIX2Text-Bold.otf ,
ItalicFont = STIX2Text-Italic.otf,
BoldItalicFont = STIX2Text-BoldItalic.otf
]
%% Math font of the document
\setmathfont{STIX2Math.otf}
\usepackage{mathtools}
\begin{document}
\[
\underbrace{\text{A long equation}}_{\text{This is a long equation}}
\]
\end{document}
编译后,下括号就不存在了。当然,我在配置中遗漏了一些东西。
答案1
该mathtools
软件包包含对 LaTeX 内核的修复\underbrace
和\overbrace
定义。
如果我们比较这两个定义
%%% LaTeX kernel
\DeclareRobustCommand\underbrace[1]{\mathop{\vtop{\m@th\ialign{##\crcr
$\hfil\displaystyle{#1}\hfil$\crcr
\noalign{\kern3\p@\nointerlineskip}%
\upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
%%% mathtools.sty
\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
$\hfil\displaystyle{#1}\hfil$\crcr
\noalign{\kern.7\fontdimen5\textfont2\nointerlineskip}%
\upbracefill\crcr\noalign{\kern.5\fontdimen5\textfont2}}}}\limits}
我们看到它们几乎相同,但是mathtools
通过不使用 3pt 的固定长度并使用当前数学字体设置进行调整可以提高清晰度。
\underbrace
然而,的定义unicode-math
是
\UnicodeMathSymbol{"023DF}{\underbrace}{\mathunder}{bottom curly bracket (mathematical use)}
这意味着更低层次的
\underbrace=\protected macro:
#1->\mathop {\Umathaccent bottom 7\symoperators "023DF\scan_stop: {{}#1}}\limits
如果你加载会发生什么mathtools
后 unicode-math
是 的“Unicode”定义\underbrace
被 上面的修复所覆盖mathtools
。请注意,您不会收到任何错误:确实使用了与旧版 LaTeX 数学字体中的括号部分不对应的\upbracefill
数学字符。unicode-math
总结:mathtools
对旧式数学字体进行了很好的修复,但unicode-math
加载时不应该这样做。在mathtools
更新之前,解决方案是加载它前 unicode-math
。
答案2
应该加载mathtools
包前和fontspec
/或unicode-math
包。注意:由于polyglossia
包会自动加载fontspec
,因此您还应注意mathtools
在之前加载polyglossia
。
当然,如果你将指令\usepackage{mathtools}
移至前和\usepackage{polyglossia}
均能\usepackage{unicode-math}
正常\underbrace
工作,无论是否polyglossia
加载。