在 siunitx 中定义一个具有下标的新单位

在 siunitx 中定义一个具有下标的新单位

我想\electronmass在包中定义一个类似于的新单位,但这次是针对质子质量。所以我只是从样式文件中siunitx复制/粘贴了的定义并进行了修改。请参阅下面的 MWE。\electronmass

\documentclass{article}

\usepackage{siunitx}


\DeclareSIUnit[]\protonmass
{ \text { \ensuremath { m _ { \textup { p } } } } }

\begin{document}

electron mass = \si{\electronmass}

proton mass = \si{\protonmass}

\end{document}

如果我查看输出,则会发现“m”和“p”之间有一个小空格。在此处输入图片描述

我应该如何定义 \protonmass 单位以便空间消失?

答案1

从定义中删除空格。之所以没有出现空格,\electronmass是因为我认为这siunitx是一个expl3包,并且在由输入定义的环境中,expl3所有空格都会被忽略。您的新定义不是在该环境中编写的。

\documentclass{article}

\usepackage{siunitx}


\DeclareSIUnit[]\protonmass
{\text{\ensuremath{m_{\textup{p}}}}}

\begin{document}

electron mass = \si{\electronmass}

proton mass = \si{\protonmass}

\end{document}

这是输出。

在此处输入图片描述

答案2

定义后

\DeclareSIUnit[]\protonmass
{ \text { \ensuremath { m _ { \textup { p } } } } }

替换文本\protonmass变为

•\text{•\ensuremath{•m•_{•\textup{•p•}•}•}•}•

其中表示空格标记。第三、第四、第五、第八和第九个空格标记被忽略,因为它们恰好在数学模式下求值。其余的空格标记不会被忽略(但最外面的空格标记会被 移除siunitx),因为它们在文本模式。所以你仍然得到第二、第六、第七和第十个空间标记:总共四个。确实

\documentclass{article}

\usepackage{siunitx}


\DeclareSIUnit[]\protonmass
{ \text { \ensuremath { m _ { \textup { p } } } } }

\begin{document}

X\si{\electronmass}X

X\si{\protonmass}X

\end{document}

生产

在此处输入图片描述

四个空间清晰可见。

正确的定义

\documentclass{article}

\usepackage{siunitx}

\DeclareSIUnit{\protonmass}{%
 \text{$m_{\textup{p}}$}%
}

\begin{document}

X\si{\electronmass}X

X\si{\protonmass}X

\end{document}

在此处输入图片描述

笔记

  1. \ensuremath不需要,因为你知道处于文本模式
  2. 软件包作者 Joseph Wright 应该在 下以外的不同文件中提供单元定义\ExplSyntaxOn,以便为进一步的定义提供模型。

相关内容