使用 lmodern 与 siunitx 包时出现奇怪的行为

使用 lmodern 与 siunitx 包时出现奇怪的行为

我想siunitx在我的文档中使用该包,但是当我尝试使用命令打印一个角度时\ang{90},我收到了

90日

代替

90°

逐渐减少代码,我发现原因在于包的使用lmodern。如何解决这个问题?似乎这种行为与问题中的描述类似:siunitx:µ 不起作用

MNWE:

\documentclass{scrbook}
\usepackage{xltxtra}
\usepackage{lmodern}
\usepackage{siunitx}

\begin{document}
 Angle is \ang{90} or \(\ang[number-angle-product = \,]{2.67}\)
\end{document}

答案1

中的字体设置siunitx试图覆盖一系列“常见”情况。在这里,我“希望”您使用 Unicode 引擎 XeTeX fontspec(可能使用unicode-math)。如果您刚刚加载,lmodern一切看起来都不错(但请参阅下面的注释),但添加xltxtra之前lmodern完全混淆了“猜测”:这是一个远非典型的设置。一旦您“偏离轨道”,您就必须自己设置这些东西:siunitx无法预测字体选择的所有可能组合。(加载fontspecxltxtra使用 OpenType 形式的 Latin Modern,所以我不太确定您的目标是什么!)

具体来说,这里发生的事情是siunitx检测到了fontspec度数符号的标准定义,因此将其切换为使用 Unicode 代码点(十进制 176)。当您稍后加载时lmodern,此位置不再是正确的字形,因为您最终在数学模式下使用的 OT1 编码字体在该位置上有所不同。


虽然可以lmodern使用 XeTeX 加载,但字体编码(OT1 或 T1)是错误的:某些插槽不正确,并且连字符会很糟糕。您确实应该考虑fontspec在这里使用。

相关内容