我正在写关于 NO2 气体的论文。正确的写法是$NO_2$
。目前,我定义了一个宏来简化输入:
\newcommand{\notwo}[0]{\chem{NO_2}\xspace}
\chem
是一个宏定义在哥白尼包裹:
\def\testbx{bx}
\DeclareRobustCommand*{\chem}[1]{\ensuremath{%
\mathcode`-="0200\mathcode`\=="003D% no space around "-" and "="
\ifx\testbx\f@series\mathbf{#1}\else\mathrm{#1}\fi}}
但是,我想进一步扩展这一点。特别是,当我使用无衬线字体时,我希望它\notwo
是无衬线的;当我使用无衬线粗体字体时,我希望它\notwo
是无衬线粗体。
我正在使用 xelatex,并且正在使用系统范围安装的Myraid 专业版字体(OTF)通过以下行
\setsansfont[Mapping=tex-text,ItalicFont={MyriadPro-It},BoldFont={MyriadPro-Bold}]{Myriad Pro}.
我怎样才能实现这个目标?
答案1
看着那(这mhchem
用于化学公式通用方法的软件包。这允许使用简单的语法
\ce{NO2}
答案2
您需要扩展测试并定义新的数学字母表:
\makeatletter
\def\test@bx{bx}
\edef\test@sf{\sfdefault}
\DeclareRobustCommand*{\chem}[1]{\ensuremath{%
\mathcode`-="0200 \mathcode`\=="003D % no space around "-" and "="
\ifx\f@family\test@sf
\ifx\test@bx\f@series
\let\next\mathsfbf
\else
\let\next\mathsf
\fi
\else
\ifx\test@bx\f@series
\let\next\mathbf
\else
\let\next\mathrm
\fi
\fi
\next{#1}}}
\DeclareMathAlphabet{\mathsfbf}{\encodingdefault}{\sfdefault}{bx}{n}
\makeatother