我想\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}
我应该如何定义 \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}
笔记
\ensuremath
不需要,因为你知道处于文本模式- 软件包作者 Joseph Wright 应该在 下以外的不同文件中提供单元定义
\ExplSyntaxOn
,以便为进一步的定义提供模型。