当尝试使用 编译chemfig
手册“酯化:步骤 1”(第 22 页,第 11.2 节)中给出的xelatex
示例时,输出与手册中给出的预期结果不匹配。当使用 编译示例时pdflatex
,输出与预期结果匹配。
\setatomsep{7mm}
\schemestart
\chemfig{R-@{dnl}\lewis{26,O}-H}
\+
\chemfig{R-@{atoc}C([6]-OH)=[@{db}]O}
\arrow(.mid east--){<->[\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}]}
\schemestop
\chemmove[shorten <=2pt]{
\draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
\draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}
有没有办法在仍然使用 XeTeX 的同时解决这个问题?
答案1
这只是对 OP 问题的部分回答。
第一的,如何在 XeTeX 中修复 chemfig 的 chemmove? 我相信答案是,在大多数情况下,chemmove
使用 编译时都能按预期工作XeLaTeX
,如以下从 中的示例开发的简单测试所示ChemFig 手册。
\documentclass[10pt,a4paper]{article}
\usepackage{chemfig}
\usepackage{fontspec}
\usepackage{caption}
\usepackage{verbatim}
\setmainfont{Arial}
\fboxsep=0pt
\renewcommand\printatom[1]{\ensuremath{\mathsf{#1}}}
\setatomsep{5mm}
\begin{document}
\begin{figure}
\caption{XeLaTeX can be used to compile reaction schemes that use the \texttt{chemmove} macro. Example from: \textit{ChemFig Manual} v1.2d section 11.1 and 11.2 p20, December 2015}
\vspace{1cm}
\begin{tikzpicture}
%Example from: ChemFig Manual v1.2d section 11.1 p20, December 2015}
\schemestart
\chemfig{@{a1}=_[@{db}::30]-[::-60]\lewis{2,X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
\schemestop
\chemmove{\draw(db).. controls +(100:5mm) and +(145:5mm).. (a1);}
\end{tikzpicture}\hspace{6cm}%
\begin{tikzpicture}
%Example from: ChemFig Manual v1.2d section 11.2 p22, December 2015}
\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\lewis{26,O}H}\hspace{1cm}
\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}
\chemmove{
\draw[shorten <=2pt, shorten >=7pt]
(dnl).. controls +(south:1cm) and +(north:1.5cm).. (atoh);}
\end{tikzpicture}
\end{figure}
\end{document}
尽管如此,原帖作者在使用第 22 页的例子时显然遇到了问题ChemFig 手册(往上看)当代码被编译时XeLaTeX
. 使用 进行编译时不会发生此问题pdfLaTeX
。
ChemFig
建立在 之上Tikz
。其宏允许绘制化学分子和反应方案等。
通过消去法,可以证明该问题归因于chemmove
当它跨越用宏绘制的化学反应时绘制反应机制arrow
。
这里我使用了一些假设的反应方案来提供代码和输出的示例,以尝试找出问题的原因。通常,反应方案可以从使用ChemFig
此类宏的简单代码编写和编译。
\documentclass[border=20pt,crop=true]{standalone}
\usepackage{chemfig}
%\usepackage{fontspec}
%\setmainfont{Comic Sans MS} %substitute with any font
%\defaultfontfeatures{Ligatures=TeX}
\setatomsep{5mm}
\begin{document}
\schemestart
\chemfig{@{x1}A}
\arrow {<->} % this is the reaction
\chemfig{@{x2}B}
\schemestop
\chemmove{\draw[shorten >=4pt](x1).. controls +(90:1cm) and +(90:1cm).. (x2);} % this may be relevant when something moves from A to B
\end{document}
它产生如下反应方案:
另一方面,编译相同的代码,适当修改后用 XeLaTeX 调用 fontspec,结果如下。我无法解释使用pdfLaTeX
和之间结果的奇怪差异XeLaTeX
。
删除\arrow
表明问题的根源在于\arrow
命令。
\documentclass[border=20pt,crop=true]{standalone}
\usepackage{chemfig}
\usepackage{fontspec}
\setmainfont{Comic Sans MS} %substitute with any font
\defaultfontfeatures{Ligatures=TeX}
\setatomsep{5mm}
\begin{document}
\schemestart
\chemfig{@{x1}A}
% \arrow{<->}
\chemfig{@{x2}B}
\schemestop
\chemmove{\draw[shorten >=4pt](x1).. controls +(90:1cm) and +(90:1cm).. (x2);}
\end{document}
部分解决方法可能是将箭头命令包装在子方案环境中,在这种情况下,会产生所需的反应方案。
\documentclass[border=20pt,crop=true]{standalone}
\usepackage{chemfig}
\usepackage{fontspec}
\setmainfont{Comic Sans MS} %substitute with any font
\defaultfontfeatures{Ligatures=TeX}
\setatomsep{5mm}
\begin{document}
\schemestart
\chemfig{@{x1}A}
\subscheme{\arrow(.mid east--) {<->}}
\chemfig{@{x2}B}
\schemestop
\chemmove{\draw[shorten >=4pt](x1).. controls +(90:1cm) and +(90:1cm).. (x2);}
\end{document}
我并不认为 的使用subscheme
代表了一种通用解决方案,因为我无法为 OP 的问题构建合适的子方案。更精通 ChemFig 语法的人也许可以做到这一点。