我见过这个问题,但在制作 MWE 时,我发现这种情况fontspec
根本没有加载。我期望 的siunitx
模式检测会导致输出与文档其余部分中的文本或数学模式中的数字相匹配。
它按照我预期的方式工作,包括两种字体,包括旧式数字(cfr-lm
和mathpazo
):中使用的数字与\num{560}
中使用的数字相对应,和也是560
如此。\(\num{560}\)
\(560\)
但是使用adobe-garamond
时mathdesign
,我会得到老式数字,\(\num{560}\)
而使用 时会得到大写数字。如果我使用或来分隔数学模式\(560\)
,则行为相同。我试图找到一种也有此问题的免费字体,但没有成功;因此,对于由此造成的不便,我提前表示歉意。$ $
\( \)
如何使用siunitx
并\usepackage[adobe-garamond]{mathdesign}
让siunitx
的模式检测功能正常运作?
平均能量损失
\documentclass{article}
%\usepackage{cfr-lm} % this works as expected
%\usepackage[osf]{mathpazo} % this works as expected
%\usepackage{mathpazo} % this also works as expected
\usepackage[adobe-garamond]{mathdesign} % this doesn't work as expected (siunitx typesets oldstyle figures)
\usepackage{siunitx}
%\sisetup{detect-all} % tried this; it has no effect
\begin{document}
Here, a test of numerals in text mode: 560
And numerals in mathematics mode: \(560\)
And numerals in \textsf{siunitx} macros (text): \num{560}
And numerals in \textsf{siunitx} macros (math): \(\num{560}\)
% for Joseph's comment:
With mathnormal: $\mathnormal{560}$
With mathrm: $\mathrm{560}$
\end{document}
输出
*我意识到无衬线字体在我的 MWE 中是位图的;只是为了保持 MWE 最小,我没有加载任何其他东西。
答案1
所使用的机制siunitx
假设 LaTeX 字体命令的设置或多或少“表现良好”。特别是,在数学模式下,该包使用\mathrm
将输出排版为标准。如果失败,使用\mathnormal
是通常的后备方法,但这里似乎不适用。因此,我将使用第二种后备方法\ensuremath
:
\sisetup{number-math-rm = \ensuremath}
这实际上会强制输出“正常数学模式”。如果数字中有字母,这当然会弄乱格式,但这种情况不太可能发生,所以应该没问题。