使用 siunitx 时,数学模式下的单位重量检测错误?

使用 siunitx 时,数学模式下的单位重量检测错误?

这是一个显示该问题的(最小)代码示例。

\documentclass{article}
\usepackage{luatextra}
\usepackage[bold-style=ISO]{unicode-math}
\usepackage[noload=abbr]{siunitx}
\sisetup{decimalsymbol=comma,detect-all}

\begin{document}
\begin{itemize}
\item Text : \SI{2}{cm}.
\item Math : $\SI{2}{cm}$.
\item Bold Text : \textbf{\SI{2}{cm}}.
\item Bold Math : $\symbf{\SI{2}{cm}}$.
\end{itemize}
\end{document}

结果如下。

enter image description here

最后一个单元应采用粗体。

答案1

目前我还没有针对此问题的“执行 X”修复,但我可以解释此问题出现的原因,并指出我正在考虑这个问题。

TeX 中设置的“传统”数学字体使用一系列不同的字体系列来呈现不同的外观。在 中siunitx,我使用它通过查看值来检测\mathsf\mathtt(而不是罗马文本)\fam。粗体处理方式不同,因为 LaTeX\boldmath为一个数学模式部分中的所有材料提供了开关,而且事实上由于 TeX 的工作方式,不能(安全地)在数学模式中应用。可以使用 LaTeX 内部数据结构检测其是否打开/关闭。siunitx从未做过的是检查\mathbf(我将在下面返回)。

Unicode 数学字体方法与上述方法完全不同:只\fam使用一种,通过选择正确的输入到输出映射来进行切换。unicode-math这可以从另一个内部变量中检测到。然而,仅凭这一点还不够,因为siunitx设置输出的方式也针对传统设置。该包所做的实际上是

\text{\unboldmath\ensuremath{<content>}}

因为这样可以避免任何“意外”的粗体文本(请记住\boldmath,反向操作只适用于整个数学模式块)。unicode-math由于字体方法完全不同,因此无法正常工作。

事后看来,这是一件很棒的事情,如果我从头开始,我会采取不同的方法来检测字体(或不检测)。特别是,我会忽略\mathsf, \mathtt,ETC。完全不考虑“周围文本”的设置:实际上数学模式标记不应被解释为提供“设计”信息。我也会以不同的方式进行“检测”,只强制进行必要的字体更改。然而,问题是我是否可以做到这一点而不破坏太多文档。

我正在断断续续地开发第三个版本siunitx,这是值得关注的一件事。目前,我不确定我是否可以做一个从我的角度来看非常有用的更新(更清晰的内部结构),同时保持每个人的文档不变(基本内容很好,难的是输出不方便)。我会先在 v3 环境中查看这个区域,然后再查看哪些内容可以移回 v2。后者更棘手,因为一些内部设置实际上取决于经典的 TeX 数学方法。

相关内容