Curved double harpoon (equilibrium) arrows in Chemfig
I did it! It's not ideal, but I did it. it is a benzene formation scheme.
\documentclass[a4paper]{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage{chemfig}
\begin{document}
\begin{figure}[h!]
\tiny
\begin{center}
\noindent
\makeatletter
\definearrow1{s>}{%
\ifx\@empty#1\@empty
\expandafter\draw\expandafter[\CF@arrow@current@style,-CF](\CF@arrow@start@node)--(\CF@arrow@end@node);%
\else
\def\curvedarrow@style{shorten <=\CF@arrow@offset,shorten >=\CF@arrow@offset,}%
\CF@expadd@tocs\curvedarrow@style\CF@arrow@current@style
\expandafter\draw\expandafter[\curvedarrow@style,-CF](\CF@arrow@start@name)..controls#1..(\CF@arrow@end@name);
\fi
}
\makeatother
\schemedebug{false}
\schemestart
\noindent
\setcrambond{2pt}{}{}
\chemfig{ % Benzene Center
[:60]**6(------)} % Команда [:60] обозначает поворот молекулы на 60 град. Для ЦГ это незаметно. Однако baseline теперь внизу молекулы.
\arrow(benz.north--ch.south){<=>[][][]}[90,2] % Линия к циклогексану
\chemfig{(*6(------))} % циклогексан
\arrow(@benz.125--mch.305){<=>[][][]}[125,2,,,draw=none] % Линия к метилциклогексану
\chemfig{(*6(----(-)--))} % метилциклогексан
\arrow(@benz.192--tol.east){<=>[][][]}[185,2,,,draw=none] % Линия к толуолу
\chemfig{(**6(-----(-)-))} % толуол
\arrow(@benz.226--xy.10){<=>[][][]}[219,2,,,draw=none] % Линия к ксилолу
\chemfig{(**6((-)----(-)--))} % ксилол
\arrow(@benz.255--eb.45){<=>[][][]}[248,2,,,draw=none] % Линия к этилбензолу
\chemfig{(**6((--[:150])------))} % этилбензол
\arrow(@benz.285--hep.west){<=>[][][]}[285,2,,,draw=none] % Линия к гептану
\chemfig{(-[:35]-[:-35]-[:35]-[:-35]-[:35]-[:-35])} % гептан
\arrow(@benz.325--hex.west){<=>[][][]}[325,2,,,draw=none] % Линия к гексану
\chemfig{(-[:35]-[:-35]-[:35]-[:-35]-[:35])} % гексан
\arrow(@benz.355--ihex.175){<=>[][][]}[355,2,,,draw=none] % Линия к изогексану
\chemfig{(-[:-35](-[:270])-[:35]-[:-35]-[:35])} % изогексан
\arrow(@benz.55--mcp.235){<=>[][][]}[55,2,,,draw=none] % Линия к МЦП
\chemfig{([:234]*5((-)-----))} % МЦП
\arrow(@benz.210--l.235){<=>[][][]}[210,2]
\arrow(@benz.330--r.235){<=>[][][]}[330,2]
\arrow(@tol.90--mch.225){s>[+(90:2) and +(210:1)]}[60,2] % curved arrows
%\arrow(@[email protected]){s>[+(245:1.7) and +(90:2.4)]}[60,2] % curved arrows
\arrow(@[email protected]){s>[+(249:1.7) and +(86:2.5)]}[60,2] % curved arrows
\arrow(@ihex.90--mcp.330){s>[+(90:2.4) and +(330:0.8)]}[120,2.3]
\arrow(@[email protected]){s>[+(306:1.5) and +(86:2.5)]}[120,2.3]
\arrow(@hep.240--eb.340){s>[+(240:1.2) and +(340:2)]}[195,2.6]
\schemestop
\end{center}
\normalsize
\caption{Схематичное представление путей образования бензола в процессе каталитического риформинга}
\label{fig:Benzene_precursors}
\end{figure}
\end{document}
Using the macro definition of the <=>
and ->
arrows, you could create similar bent alternatives. Like this:
\documentclass[a4paper]{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage{chemfig}
\begin{document}
\begin{figure}[h!]
\footnotesize
\begin{center}
\noindent
\makeatletter
\definearrow3{<§>}{%
\CF@arrow@shift@nodes{#3}%
\path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
node[pos=0,sloped,yshift= .866pt,xshift=-.5pt](\CF@arrow@start@node @u0){}%
node[pos=0,sloped,yshift=-.866pt,xshift= .5pt](\CF@arrow@start@node @d0){}%
node[pos=1,sloped,yshift= .866pt,xshift= .5pt](\CF@arrow@start@node @u1){}%
node[pos=1,sloped,yshift=-.866pt,xshift=-.5pt](\CF@arrow@start@node @d1){};%
\begingroup
\pgfarrowharpoontrue
\expandafter\draw\expandafter[\CF@arrow@current@style , bend left](\CF@arrow@start@node @u0) to (\CF@arrow@start@node @u1);%
\expandafter\draw\expandafter[\CF@arrow@current@style , bend right](\CF@arrow@start@node @d1) to (\CF@arrow@start@node @d0);%
\endgroup
\CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node%
}
\definearrow3{s>}{%
\CF@arrow@shift@nodes{#3}%
\expandafter\draw\expandafter[\CF@arrow@current@style, bend left](\CF@arrow@start@node) to (\CF@arrow@end@node);%
\CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
}
\makeatother
\schemedebug{false}
\schemestart
\noindent
\setcrambond{2pt}{}{}
\chemfig{ % Benzene Center
[:60]**6(------)} % Команда [:60] обозначает поворот молекулы на 60 град. Для ЦГ это незаметно. Однако baseline теперь внизу молекулы.
\arrow(benz.north--ch.south){<=>[][][]}[90,2] % Линия к циклогексану
\chemfig{(*6(------))} % циклогексан
\arrow(@benz.125--mch.305){<=>[][][]}[125,2,,,draw=none] % Линия к метилциклогексану
\chemfig{(*6(----(-)--))} % метилциклогексан
\arrow(@benz.192--tol.east){<=>[][][]}[185,2,,,draw=none] % Линия к толуолу
\chemfig{(**6(-----(-)-))} % толуол
\arrow(@benz.226--xy.10){<=>[][][]}[219,2,,,draw=none] % Линия к ксилолу
\chemfig{(**6((-)----(-)--))} % ксилол
\arrow(@benz.255--eb.45){<=>[][][]}[248,2,,,draw=none] % Линия к этилбензолу
\chemfig{(**6((--[:150])------))} % этилбензол
\arrow(@benz.285--hep.west){<=>[][][]}[285,2,,,draw=none] % Линия к гептану
\chemfig{(-[:35]-[:-35]-[:35]-[:-35]-[:35]-[:-35])} % гептан
\arrow(@benz.325--hex.west){<=>[][][]}[325,2,,,draw=none] % Линия к гексану
\chemfig{(-[:35]-[:-35]-[:35]-[:-35]-[:35])} % гексан
\arrow(@benz.355--ihex.175){<=>[][][]}[355,2,,,draw=none] % Линия к изогексану
\chemfig{(-[:-35](-[:270])-[:35]-[:-35]-[:35])} % изогексан
\arrow(@benz.55--mcp.235){<=>[][][]}[55,2,,,draw=none] % Линия к МЦП
\chemfig{([:234]*5((-)-----))} % МЦП
\arrow(@benz.210--l.235){<=>[][][]}[210,2]
\arrow(@benz.330--r.235){<=>[][][]}[330,2]
\arrow(@tol.90--mch.225){<§>[][][]}[60,2] % curved arrows
\arrow(@[email protected]){<§>[][][]}[120,2.3]
\arrow(@hep.240--eb.340){s>[][][]}[195,2.6]
\schemestop
\end{center}
\normalsize
\caption{Пути образования бензола}
\label{fig:Benzene_precursors2}
\end{figure}
\end{document}
The double arrows are still not super accurate, but at least the curve of both arrows is the same. And then, using bend
is easier then using curves with coordinates, I guess. The above code yields:
Edit: Edited the yshift
and xshift
, so that they fit the 30 degree angle of bend
.