如何使用 Siunitx 获得粗体单位

如何使用 Siunitx 获得粗体单位

我的问题比较简单,但是阅读了新siunitx文档后,我仍然没有答案。

在数学模式下,如何使单位对命令敏感\mathbf\symbf从而将单位以粗体显示?

对于数字来说,它运行良好,所以我不明白为什么对于单位来说不是这样。

\documentclass{article}

\usepackage{fontspec, unicode-math, siunitx}

\sisetup{
mode=match,
reset-text-family = false ,
reset-text-series = false ,
reset-text-shape = false,
text-family-to-math = false ,
text-series-to-math = false,
propagate-math-font = true,
reset-math-version = false
}

\begin{document}

\noindent
xxxx $\mathbf{2 x = \qty{10}{\kilo\gram}}$ xxxx\\
xxxx $\symbf{2 x = \qty{10}{\kilo\gram}}$ xxxx.\\

\noindent
What I would like to have:\\
xxxx $\symbf{2 x = 10\, kg}$ xxxx.\\

\end{document}

在此处输入图片描述

答案1

我已将初始问题记录为https://github.com/josephwright/siunitx/issues/525。这里出现这种情况的原因是这里的“referenece”输出是10\,\mathrm{kg},所以我们最终\mathbf{10\,\mathrm{kg}}得到了不一致的粗体。

目的propagate-math-font是涵盖字体系列,而不是其他方面:我应该把这一点说得更清楚。我会考虑如何最好地解决这个问题,因为这里有两种说法。

我想说的是,让数学模式文本变粗体是 的工作\boldmath。因此,我希望使用

\documentclass{article}
\usepackage{siunitx}
\sisetup{reset-math-version = false}
\begin{document}
xxxx {\boldmath$2 x = \qty{10}{\kilo\gram}$} xxxx
\end{document}

这里,可能与语义有关。(\mathbf本质上是关于外观,表明字体的选择具有数学意义。)x\boldmath\mathbf


尽管如此,我决定扩展这里的代码以覆盖\mathbf。在达到 CTAN 之前,您可以使用

\cs_gset_protected:Npn \__siunitx_print_math_auxiv:n #1
  {
    \bool_if:NTF \l__siunitx_print_math_font_bool
      {
        \__siunitx_print_math_aux:N
          \mathbf \mathit \mathsf \mathtt
          \q_recursion_tail \q_recursion_stop
      }
      { \__siunitx_print_math_auxv:n }
        {#1}
  }

答案2

这可能不是最优雅的解决方案,但您可以强制将\SI{}{}设置为\text,然后使用\bfseries\textbf。使用siunitx选项时detect-all=true,输出将为粗体。

我在下面举了一个例子,\newcommand让你的生活变得更轻松。

\documentclass{article}
\usepackage{fontspec, unicode-math, siunitx}
\sisetup{detect-all=true}

\newcommand{\bfqty}[2]{\text{\bfseries\SI{#1}{#2}}}
\begin{document}
    \noindent
    xxxx $\mathbf{2 x = \text{\bfseries\SI{10}{\kilogram}}}$ xxxx\\
    xxxx $\mathbf{2 x = \bfqty{10}{\kilogram}}$ xxxx\\
        
    \noindent
    What I would like to have:\\
    xxxx $\symbf{2 x = 10\, kg}$ xxxx.\\
\end{document}

编辑:类似的解决方案是,您不必将所有内容都放入环境中,text如下所示。请注意,这里detect-weight就足够了,而在上面的示例则需要detect-all。不过,您仍然需要将整个方程式放入\textbf{}环境中{\bfseries }

\documentclass{article}
\usepackage{fontspec, unicode-math, siunitx}
\sisetup{
    mode=text,
    detect-weight=true,
}

\begin{document}
    \noindent
    xxxx \textbf{$\mathbf{2 x = \qty{10}{\kilo\gram}}$} xxxx\\
    \noindent
    What I would like to have:\\
    xxxx $\symbf{2 x = 10\, kg}$ xxxx.\\
\end{document}

相关内容