使用 \unit 更改单位的字体(在 LyX 中,\unittwo)

使用 \unit 更改单位的字体(在 LyX 中,\unittwo)

使用命令(在units.sty中定义)\unit[value]{dimensions},使用设置尺寸\mathrm。我正在制作一个使用标准Beamer无衬线字体(不记得名字了)的演示文稿,这意味着每当我使用该\unit命令时,尺寸都会因为字体不同而显得突出。有没有办法重新定义用于尺寸的字体?

顺便说一句,我使用的是 LyX,因此命令\unit是通过调用\unittwo然后在第一个框中插入值并在第二个框中插入尺寸来调用的。我似乎找不到更改字体的方法,除非\unit完全避免使用这些命令。

我正在寻找类似的东西(在序言中),\newcommand{\unit}{\sffamily\unit}但它不起作用。(我对使用非常不熟练newcommand

答案1

units包裹评论(在units.dtx,第 328-329 行):

%    The use of upright fonts for the dimension is forced in math
%    mode.  Units in text mode are typeset with the currently active font.

这是一个平均能量损失突出显示此输出:

在此处输入图片描述

\documentclass{beamer}% http://ctan.org/pkg/beamer
\usepackage{units}% http://ctan.org/pkg/units
\begin{document}
some text \unit[17]{mm} some more text

some text $\unit[17]{mm}$ some more text
\end{document}

为了避免这种情况,您有多种选择:

  1. \unit重新定义插入方式\mathsf,而不是\mathrm。您可以从源中复制定义并进行相应更新。以下更新仅修复了 的使用\mathrm

    \makeatletter
    \DeclareRobustCommand*{\unit}[2][]{%
      \begingroup
        \def\0{#1}%
        \expandafter
      \endgroup
      \ifx\0\@empty
      \else
        #1%
        \ifthenelse{\boolean{B@UnitsLoose}}{~}{\,}%
      \fi
      \ifthenelse{\boolean{mmode}}{\mathsf{#2}}{#2}% <---- Fixed
    }
    \makeatletter
    

    将上述内容放在文档序言中(文档 > 设置... > LaTeX 序言)。有关宏为何包含在\makeatletter...\makeatother对中的解释,请参阅做什么\makeatletter\makeatother做什么?

  2. 使用etoolbox的表弟xpatch\unit按照与上述建议类似的方式进行修补:

    \usepackage{xpatch}% http://ctan.org/pkg/xpatch
    % \xpatchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
    \xpatchcmd{\unit}{\mathrm}{\mathsf}{}{}
    
  3. 在文档中进行全局更改,让全部 \mathrm相当于\mathsf

    \let\mathrm\mathsf% \mathrm is equivalent to \mathsf
    

在所有上述情况下,MWE 现在输出:

在此处输入图片描述

现在建议使用siunitx包裹相反,因为它允许更好地控制单位格式(全局和本地)。

相关内容