我使用 overleaf 作为我的 latex 编辑器,我的反应机制中的箭头有问题,蓝色箭头应该是这样的,但它们却停留在第一个分子中(红色箭头)
\tikzset{obrace/.style={left delimiter={[},inner sep=3pt},
cbrace/.style={right delimiter={]},inner sep=3pt},
braces/.style={left delimiter={[},right delimiter={]},inner sep=3pt}}
\setchemfig{atom sep=2em}
\schemestart
\chemfig{H-C(=[:60]O)-[:-60]O-H}
\arrow(--M1[obrace]){-U>[\scriptsize\chemfig{H_2SO_4^{}}][\scriptsize\chemfig{HSO_4^\ominus}][][.25]}
[,1.5,shorten >=6pt]
\chemfig{H-@{a2}C(-[:60]O-H)(-[:30,.5,,,draw=none]{\scriptstyle\oplus})-[:-60]O-H}
\arrow(--[cbrace]){<->}
\chemfig{H-C(=[:60]\chemabove{O}{\scriptstyle\oplus}-H)-[:-60]O-H}
\arrow(@M1--){<=>[*{0}\scriptsize\chemfig{H-[:120]@{a1}O-[:60]CH_3}][*{0}\tiny addition]}[-90,1.33]
\chemfig{H-C(-[2]O-[:30]H)(-\chemabove{O}{\scriptstyle\oplus}(-[:60]CH_3)-[:-60]H)-[6]O-[:-30]H}
\arrow{<=>[\tiny protolysis]}[180]
\chemfig{H-C(-[2]O-[:30]H)(-O-CH_3)-[@{B1}6]@{a3}O(-[:-150]H)-[:-30]H}
\arrow(--[obrace]){<=>[*{0}\scriptsize\chemfig{{-}H_2O}][*{0}\tiny elimination]}[-90,,shorten >=6pt]
\chemfig{H-C(-[:60]O-H)(-[,.5,,,draw=none]{\scriptstyle\oplus})-[:-60]O-CH_3}
\arrow(--[cbrace]){<->}
\chemfig{H-C(=[:60]\chemabove{O}{\scriptstyle\oplus}-H)-[:-60]O-CH_3}
\arrow{-U>[\scriptsize\chemfig{HSO_4^\ominus}][\scriptsize\chemfig{H_2SO_4^{}}][][.25]}[,1.5]
\chemfig{H-C(=[:60]O)-[:-60]O-CH_3}
\arrow(@M1--[yshift=-5pt]){0}[180,.5]{\tiny protolysis}
\schemestop
\chemmove[red,shorten <=3pt, shorten >=1pt]{
\draw(a1)..controls +(0:1.5cm)and+(0:3cm)..(a2);
\draw(B1)..controls +(0:5mm)and+(5:5mm)..(a3);}
即使使用更简单的例子,我也遇到了同样的问题,红色箭头应该指向箭头上方的 H,而不是 R1,并且使用代码我发现当我不在分子之间使用 \arrow(仅使用 +)时,机制箭头会指向它们应该去的地方,有人知道我该如何解决这个问题吗,这是否是 Overleaf 问题,或者我是否需要特定的包
\setchemfig{atom sep=7mm}
\schemestart
\chemfig{R1-@{dnl}\lewis{2:6:,O}-H}
\+
\chemfig{R2-@{atoc}C([6]-OH)=[@{db}]O}
\arrow(.mid east--){<->[\chemfig{ @{atoh}H}]}
\chemfig{R2-C([6]-OH)(-[2]O(-[1]H)-[3]R1)-OH}
\schemestop
\chemmove[shorten <=2pt]{
\draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
\draw[red, shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}
答案1
此处讨论了该问题:如何在 XeTeX 中修复 chemfig 的 chemmove这里提供了一个解决方案:tikzmark 和 xelatex和这里:使用 tikz 叠加并记住图片时定位不正确。这是一个已知的 XeLaTeX 问题。
第二和第三个链接提供了同样的解决方案,具体实现如下。用XeLaTeX编译两次。
\documentclass[border=3pt]{standalone}
\usepackage{chemfig}
\makeatletter
\def\pgfsys@hboxsynced#1{%
{%
\pgfsys@beginscope%
\setbox\pgf@hbox=\hbox{%
\hskip\pgf@pt@x%
\raise\pgf@pt@y\hbox{%
\pgf@pt@x=0pt%
\pgf@pt@y=0pt%
\special{pdf: content q}%
\pgflowlevelsynccm%
\pgfsys@invoke{q -1 0 0 -1 0 0 cm}%
\special{pdf: content -1 0 0 -1 0 0 cm q}% translate to original coordinate system
\pgfsys@invoke{0 J [] 0 d}% reset line cap and dash
\wd#1=0pt%
\ht#1=0pt%
\dp#1=0pt%
\box#1%
\pgfsys@invoke{n Q Q Q}%
}%
\hss%
}%
\wd\pgf@hbox=0pt%
\ht\pgf@hbox=0pt%
\dp\pgf@hbox=0pt%
\pgfsys@hbox\pgf@hbox%
\pgfsys@endscope%
}%
}
\makeatother
\begin{document}
\setchemfig{atom sep=7mm}
\schemestart
\chemfig{R1-@{dnl}\lewis{2:6:,O}-H}
\+
\chemfig{R2-@{atoc}C([6]-OH)=[@{db}]O}
\arrow(.mid east--){<->[\chemfig{ @{atoh}H}]}
\chemfig{R2-C([6]-OH)(-[2]O(-[1]H)-[3]R1)-OH}
\schemestop
\chemmove[shorten <=2pt]{
\draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
\draw[red, shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}
\end{document}
或者,正如已经建议的那样,您可以使用 LuaLaTeX 进行编译。