使用 chemfig 的无衬线字体

使用 chemfig 的无衬线字体

在我的文档中,我目前使用 来chemformula表示化学式。为了绘制反应机制,我尝试使用chemfig,但事实证明让 chemfig 使用相同的无衬线字体非常困难chemformula

我使用 XeLaTeX 作为我的引擎,因此我正在使用fontspecunicode-math

我的文档的主字体是衬线字体 (Palatino);数学字体是 Cambria Math,最后无衬线字体是 Source Sans Pro。默认情况下chemfig使用数学模式排​​版原子,因此它们会出现在我的数学字体中。

我如何让它使用我的无衬线字体?

我努力了:

重新定义\printatom使用\ch

不起作用。这将是最好的解决方案(我认为),但我不知道如何\ch从 chemformula 接受chemfig的输入。

\documentclass[a4paper,11pt]{report}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{fontspec}

\setmainfont{Palatino Linotype}
\setmathfont[version=cm]{Cambria Math}
\setsansfont{Source Sans Pro}
\setmathfont[version=ssp]{Source Sans Pro}

\usepackage{chemformula}
\usepackage{chemfig}

\setchemformula{format=\sffamily}
\def\printatom#1{\ch{#1}}

\begin{document}
\chemfig{C=Cl}
\end{document}

我明白了:

! Undefined control sequence.
<argument> \atom 1 \CF
                       nodestrut
l.19 \chemfig{C=Cl}
                   ^^M

重新定义\printatom使用\mathsf

\def\printatom#1{\ensuremath{\mathsf{#1}}}

它可以构建,但\mathsf不使用 Source Sans Pro,而是使用 Unicode 数学无衬线字符(因为unicode-math)并且我不确定如何让它实际使用 Source Sans Pro。

重新定义\printatom使用\mathversion

\def\printatom#1{\mathversion{ssp}\ensuremath{#1}\mathversion{cm}}

不起作用。TikZ\mathversion似乎不喜欢数学块之外,并且\mathversion不能在数学模式中使用。

! Package tikz Error: Giving up on this path. Did you forget a semicolon?.

See the tikz package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.18 \chemfig{C=Cl}
                   ^^M

其他尝试

我也尝试使用\DeclareMathAlphabetSource Sans Pro 定义为数学字体,但我不知道如何让它工作。

答案1

看起来像是\chemfig用适当的\mathversions 作品包装:

\makeatletter
\let\@@chemfig\chemfig
\def\chemfig#1{\mathversion{ssp}\@@chemfig{#1}\mathversion{cm}}
\makeatother

相关内容