我正在尝试画一个麦克拉弗蒂重排使用 chemfig(顺便说一下,这是一个很棒的工具)。使用
梅威瑟:
\documentclass[a4paper,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage{chemfig}
\renewcommand*\printatom[1]{\sffamily{#1}}
\newcommand*\radcationvert{\raisebox{4.7pt}{\hspace{.5pt}\lewis{6.,\scriptsize +}}}
\setcrambond{5pt}{1pt}{2pt}
\setlewis[]{2.5pt}{}{}
\usetikzlibrary{arrows}% per right to e left to
\usepackage{tgheros}
\renewcommand*\familydefault{\sfdefault}
\usepackage{sansmath}
\sansmath
\usepackage[T1]{fontenc}
\begin{document}
\chemfig{C*6((-[:-150]Y)(=[@{b6}:90]@{O}{\lewis{4:,O}\rlap{\radcationvert}})-[@{b1}]@{C2}C(<[:-110]H)(<:[:-70]R\rlap{'})-[@{b2}]C(<[:-50]H)(<:[:-10]H)-[@{b3}]C(<[:10]H)(<:[:50]R)-[@{b4}]H-[@{b5},,,,draw=none]\phantom{O})}
\chemmove[->]{\draw[-right to,shorten <=2pt,shorten >=2pt](b2).. controls +(120:5mm) and +(90:5mm).. (C2);}
\chemmove[->]{\draw[-left to,shorten <=2pt,shorten >=2pt](b2).. controls +(120:5mm) and +(180:5mm).. (b3);}
\chemmove[->]{\draw[-right to,shorten <=2pt,shorten >=2pt](b4).. controls +(-120:5mm) and +(180:5mm).. (b3);}
\chemmove[->]{\draw[-left to,shorten <=2pt,shorten >=2pt](b4).. controls +(-120:4mm) and +(-60:4mm).. (b5);}
\chemmove[->]{\draw[-right to,shorten <=5pt,shorten >=2pt](O).. controls +(-15:6mm) and +(-60:5mm).. (b5);}
\end{document}
我得到了这个奇怪的方案,但它显然是无用的:
一种可能的解决方法是像这样重新绘制箭头
\chemmove[->]{\draw[-right to,shorten <=3pt,shorten >=3pt](b2).. controls +(140:3mm) and +(70:3mm).. (C2);}
\chemmove[->]{\draw[-right to,shorten <=3pt,shorten >=3pt](b2).. controls +(100:4mm) and +(190:4mm).. (b3);}
\chemmove[->]{\draw[-left to,shorten <=3pt,shorten >=3pt](b4).. controls +(-100:4mm) and +(170:4mm).. (b3);}
\chemmove[->]{\draw[-right to,shorten <=3pt,shorten >=3pt](b4).. controls +(-140:4mm) and +(-50:4mm).. (b5);}
\chemmove[->]{\draw[-left to,shorten <=5pt,shorten >=3pt](O).. controls +(-15:6mm) and +(-70:4mm).. (b5);}
这引发了一个相当不错的
请注意,鱼钩箭的倒钩通常位于凸面,第一个例子中的倒钩就是如此绘制的。第二个例子中的倒钩会扰乱新形成的键区。
我的问题是:有没有办法在第一个例子中移动箭头的起点/终点,以便我得到一些漂亮而整洁的东西,比如这?
我尝试过两次指定相同的键,一次用,@{b,0.4}
另一次用,@{b,0.6}
但似乎不起作用。
请允许我再问两个问题,我认为对于知识渊博的人来说这些问题很快,但对我来说却不一定:
1)我使用宏来编写自由基阳离子(它来自上一个问题)
\newcommand*\radcationvert{\raisebox{4.7pt}{\hspace{.5pt}\lewis{6.,\scriptsize +}}}
问题在于,当我从氧和氢之间的键向东北方向拉时,电荷的 + 号会挡住路。我怎样才能稍微降低“+”的位置?
我试过在任何地方都放置 \raiseboxes(LaTeX 的启发式方法,众所周知是最好的方法),但这总是会移动点,而我需要它们更接近一点。
2) 我可以为箭头放置第三个控制点吗?有时它们看起来并不像我想要的那样漂亮和圆润,我觉得另一个控制点正是我所需要的。同样,我的启发式尝试没有奏效,但 TikZ 文档让我感到害怕,而不是我病态的挑剔想要完成它。
答案1
您可以使用 Tikz 库calc
手动将 shift 添加到箭头的尖端。请注意,arrows
已弃用,因此我将其替换为arrows.meta
。有关新的箭头尖端,请参阅Tikz 手册,16.5 参考:箭头提示,第 203 页。
输出
代码
\documentclass[a4paper,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{sansmath}
\usepackage{chemfig}
\usepackage{tgheros}
\renewcommand*\printatom[1]{\sffamily{#1}}
\newcommand*\radcationvert{\raisebox{4.7pt}{\hspace{.5pt}\lewis{6.,\scriptsize +}}}
\setcrambond{5pt}{1pt}{2pt}
\setlewis[]{2.5pt}{}{}
\usetikzlibrary{calc,arrows.meta}% per right to e left to
\tikzset{
myedge/.style={->, -{Latex[#1]}}
}
\renewcommand*\familydefault{\sfdefault}
\sansmath
\begin{document}
\chemfig{C*6((-[:-150]Y)(=[@{b6}:90]@{O}{\lewis{4:,O}\rlap{\radcationvert}})-[@{b1}]@{C2}C(<[:-110]H)(<:[:-70]R\rlap{'})-[@{b2}]C(<[:-50]H)(<:[:-10]H)-[@{b3}]C(<[:10]H)(<:[:50]R)-[@{b4}]H-[@{b5},,,,draw=none]\phantom{O})}
\chemmove{\draw[myedge={right},shorten <=2pt,shorten >=2pt]($(b2)+(30:-1mm)$).. controls +(120:5mm) and +(90:5mm).. (C2);}
\chemmove{\draw[myedge={left},shorten <=2pt,shorten >=2pt]($(b2)+(30:1mm)$).. controls +(120:5mm) and +(180:5mm).. ($(b3)+(0,-1mm)$);}
\chemmove{\draw[myedge={right},shorten <=2pt,shorten >=2pt]($(b4)+(-30:1mm)$).. controls +(-120:5mm) and +(180:5mm).. ($(b3)+(0,1mm)$);}
\chemmove{\draw[myedge={left},shorten <=2pt,shorten >=2pt]($(b4)+(-30:-1mm)$).. controls +(-120:4mm) and +(-60:4mm).. ($(b5)+(30:1mm)$);}
\chemmove{\draw[myedge={right},shorten <=5pt,shorten >=2pt](O).. controls +(-15:3mm) and +(-60:5mm).. ($(b5)+(30:-1mm)$);}
\end{document}