在无衬线文档(带有\renewcommand{\familydefault}{\sfdefault}
)中,我希望将文本模式下的单位和数字设置为无衬线字体,将数学模式(内联或显示)中的数字和单位设置为罗马字体,因为所有其他数学也是罗马字体。
我创建了一个测试文档来尝试不同的选项,但我在 siunitx(版本 3)中没有找到导致所需行为的选项†(请参阅末尾的代码)。在图像中,我标记了字体系列不符合我预期的情况。
没有任何\sisetup
(与 相同\sisetup{reset-text-family = false, reset-text-series = false, reset-text-shape = false}
) :
和\AtBeginDocument{\sisetup{unit-font-command = \mathrm}}
:
使用\sisetup{detect-all = true}
,而不管unit-font-command
:
使用\sisetup{mode = match}
,而不管unit-font-command
:
\documentclass{article}
\usepackage[margin=3cm]{geometry} % just to fit 3 tables in one line
\usepackage{siunitx}
%\AtBeginDocument{\sisetup{unit-font-command = \mathrm}}
%\sisetup{detect-all = true}
%\sisetup{mode = match}
%\sisetup{reset-text-family = false, reset-text-series = false, reset-text-shape = false}
\renewcommand{\familydefault}{\sfdefault} % My document should be in sans serif
\begin{document}%
Some text where the voltage $u$ is \qty{5}{\kilo\volt},
also containing the equation \(u = \qty{5}{\kilo\volt}\).
And display math:
\[
u = \qty{5}{\kilo\volt}
\]
\end{document}
看似相关但无帮助的问题:
- siunitx 在文本中使用无衬线字体,但在数学中使用衬线字体(我没有使用 XeLaTeX,没有 fontspec 就会出现问题)
- 我可以让 siunitx 命令像 beamer 中的其他数学一样使用衬线字体吗?(解决方案不符合我的要求,如上所示)
- 带有 siunitx 的无衬线字体(不同的问题)
†我必须承认,我发现 siunitx v3 中的字体配置相当复杂和混乱,而且我还没有尝试过。虽然一旦理解了,它可能非常强大。但这并没有帮助,因为大多数搜索结果现在都会产生针对版本 2 的过时解决方案,而这些解决方案不适用于新版本 3。以我个人的拙见,最好为重写的包使用一个新名称,以避免这种混乱和破坏(当然,这是以其他缺点为代价的)。
答案1
解决方案
以下选项集将始终将单位的字体与周围的材料相匹配,无论是文本模式还是数学模式:
\AtBeginDocument{ % See Note below
\sisetup{
mode=match,
unit-font-command = \mathrm, % See Note below
reset-text-family=false,
reset-text-series=false,
reset-text-shape=false
}
}
笔记:在将来的版本中siunitx
(当这次提交使其成为发布版本),设置unit-font-command = \mathrm
和\AtBeginDocument
将不再需要。目前,这是必要的,因为siunitx
当默认字体(即)是无衬线字体时,假设数学字体也是无衬线字体。在新版本中,这仅在使用文档类\familydefault
时才适用。beamer
旧答案
好的,我找到了一个我可以接受的解决方案:
\AtBeginDocument{\sisetup{mode=match, unit-font-command = \mathrm}}
但是,这种情况在使用(或)\qty
格式化的文本块中仍会产生不一致的字体。在这种情况下,使用的是 sans 字体,而不是罗马字体。对我来说这并不重要,因为我没有大块的罗马文本,但对其他人来说可能很重要。\textrm
\rmfamily
如上所述,我用黄色标记了那些情况,其中字体系列与周围文本不匹配:
\documentclass{article}
\usepackage[margin=3cm]{geometry} % just to fit 3 tables in one line
\usepackage{siunitx}
%\AtBeginDocument{\sisetup{unit-font-command = \mathrm}}
%\sisetup{detect-all = true}
%\sisetup{mode = match}
%\sisetup{reset-text-family = false, reset-text-series = false, reset-text-shape = false}
\renewcommand{\familydefault}{\sfdefault} % My document should be in sans serif
\newcommand{\sifonttable}[1]{%
\fbox{\begingroup\small
\sisetup{#1}
\begin{tabular}{@{}lll@{}}
\multicolumn{3}{@{}p{4.5cm}@{}}{\scriptsize\texttt{\detokenize{#1}}} \\
& Text & Math \\
(default) & u is \qty{5}{\kilo\volt} & \(u = \qty{5}{\kilo\volt}\) \\
rmfamily & \rmfamily u is \qty{5}{\kilo\volt} & \rmfamily \(u = \qty{5}{\kilo\volt}\) \\
sffamily & \sffamily u is \qty{5}{\kilo\volt} & \sffamily \(u = \qty{5}{\kilo\volt}\) \\
bfseries & \bfseries u is \qty{5}{\kilo\volt} & \bfseries \(u = \qty{5}{\kilo\volt}\) \\
itshape & \itshape u is \qty{5}{\kilo\volt} & \itshape \(u = \qty{5}{\kilo\volt}\) \\
% slshape & \slshape u is \qty{5}{\kilo\volt} & \slshape $u = \qty{5}{\kilo\volt}$ \\
% mathrm & & $\mathrm{u = \qty{5}{\kilo\volt}}$ \\
% mathsf & & $\mathsf{u = \qty{5}{\kilo\volt}}$ \\
% mathbf & & $\mathbf{u = \qty{5}{\kilo\volt}}$ \\
% mathit & & $\mathit{u = \qty{5}{\kilo\volt}}$ \\
\end{tabular}
\endgroup}
}
\begin{document}%
{\sisetup{mode=match, unit-font-command=\mathrm}
Some text where the voltage $u$ is \qty{5}{\kilo\volt},
also containing the equation \(u = \qty{5}{\kilo\volt}\).
And display math:
\[
u = \qty{5}{\kilo\volt}
\]
}
\subsubsection*{Single options}
\sifonttable{}
\sifonttable{detect-all=true}
\sifonttable{detect-mode=true}
\sifonttable{mode=match}
\sifonttable{unit-font-command=\mathrm}
\sifonttable{reset-text-family=false}
\sifonttable{reset-text-series=false}
\sifonttable{reset-text-shape=false}
\sifonttable{propagate-math-font=true}
\sifonttable{reset-math-version=true}
\sifonttable{text-family-to-math=true}
\sifonttable{text-series-to-math=true}
\subsubsection*{Combinations}
\sifonttable{detect-all=true, mode=match}
\sifonttable{detect-all=true, unit-font-command=\mathrm}
\sifonttable{detect-all=true, mode=match, unit-font-command=\mathrm}
\sifonttable{mode=match, unit-font-command=\mathrm}
\sifonttable{mode=match, unit-font-command=\mathrm, reset-text-series=false}
\sifonttable{reset-text-family=false, reset-text-series=false, reset-text-shape=false}
\end{document}