在我的文档中,我目前使用 来chemformula
表示化学式。为了绘制反应机制,我尝试使用chemfig
,但事实证明让 chemfig 使用相同的无衬线字体非常困难chemformula
。
我使用 XeLaTeX 作为我的引擎,因此我正在使用fontspec
它unicode-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
其他尝试
我也尝试使用\DeclareMathAlphabet
Source Sans Pro 定义为数学字体,但我不知道如何让它工作。
答案1
看起来像是\chemfig
用适当的\mathversion
s 作品包装:
\makeatletter
\let\@@chemfig\chemfig
\def\chemfig#1{\mathversion{ssp}\@@chemfig{#1}\mathversion{cm}}
\makeatother