解决方案

解决方案

在无衬线文档(带有\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}}

unit-font-command = mathrm 的示例文本

使用\sisetup{detect-all = true},而不管unit-font-command

带有 detect-all = true 的示例文本

使用\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 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
  }
}

显示 mode=match、unit-font-command = \mathrm 的结果的文本示例

表格显示了不同周围字体对 siunitx 的影响

笔记:在将来的版本中siunitx(当这次提交使其成为发布版本),设置unit-font-command = \mathrm\AtBeginDocument将不再需要。目前,这是必要的,因为siunitx当默认字体(即)是无衬线字体时,假设数学字体也是无衬线字体。在新版本中,这仅在使用文档类\familydefault时才适用。beamer


旧答案

好的,我找到了一个我可以接受的解决方案:

\AtBeginDocument{\sisetup{mode=match, unit-font-command = \mathrm}}

但是,这种情况在使用(或)\qty格式化的文本块中仍会产生不一致的字体。在这种情况下,使用的是 sans 字体,而不是罗马字体。对我来说这并不重要,因为我没有大块的罗马文本,但对其他人来说可能很重要。\textrm\rmfamily

如上所述,我用黄色标记了那些情况,其中字体系列与周围文本不匹配:

siunitx v3 的几种不同字体选项的比较表

\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}

相关内容