2

I've been trying to draw the following reaction scheme using chemfig: Reaction scheme

Following the response given here: chemfig: double harpoon + arched in/out arrow in reaction, I've managed to draw the following scheme: Created scheme

Which uses the arrow <U=> defined as:

\makeatletter
\definearrow2{<U=>}{%
    \CF@arrow@shift@nodes{#2}%
    \path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
            node[pos=0,yshift=1pt](\CF@arrow@start@node @u0){}%
            node[pos=0,yshift=-1pt](\CF@arrow@start@node @d0){}%
            node[pos=1,yshift=1pt](\CF@arrow@start@node @u1){}%
            node[pos=1,yshift=-1pt](\CF@arrow@start@node @d1){};%
    \begingroup%
        \pgfarrowharpoontrue%
        \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1)node[pos=0.4](Uarrow@arctangent){};%
        \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @d1)--(\CF@arrow@start@node @d0);%
    \endgroup%
    \expandafter\draw\expandafter(Uarrow@arctangent) arc (270:190:.333) node (Uarrow@end) {};%
    \node[anchor=south,yshift=2pt] at (Uarrow@end.north) {#1};
}
\makeatother

As you may have noticed by now, I am missing the rate constants w and z. I've tried to modified the definition of the arrow <U=>, but I haven't been able to create the complete diagram yet. Here is a fully working example:

    \documentclass{article}
\usepackage{chemfig}
\makeatletter
\definearrow2{<U=>}{%
    \CF@arrow@shift@nodes{#2}%
    \path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
            node[pos=0,yshift=1pt](\CF@arrow@start@node @u0){}%
            node[pos=0,yshift=-1pt](\CF@arrow@start@node @d0){}%
            node[pos=1,yshift=1pt](\CF@arrow@start@node @u1){}%
            node[pos=1,yshift=-1pt](\CF@arrow@start@node @d1){};%
    \begingroup%
        \pgfarrowharpoontrue%
        \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1)node[pos=0.4](Uarrow@arctangent){};%
        \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @d1)--(\CF@arrow@start@node @d0);%
    \endgroup%
    \expandafter\draw\expandafter(Uarrow@arctangent) arc (270:190:.333) node (Uarrow@end) {};%
    \node[anchor=south,yshift=2pt] at (Uarrow@end.north) {#1};
}
\makeatother


\begin{document}
\section{Example}
\begin{equation}
\label{threestateslinear1}
\schemestart
A
\arrow{<=>[$x$][$y$]}
B
\arrow{<U=>[D]}
C
\schemestop
\end{equation}
\end{document}

What am I missing?

2
  • 1
    Welcome to TeX.SE! Instead of pasting only a code snippet, please add a fully but minimal working example!
    – user156344
    Feb 17 '19 at 15:04
  • 1
    Thans @JouleV, I have added a working example. Feb 17 '19 at 15:18
5

enter image description here

The above images is produced using the following MWE:

\documentclass{article}
\usepackage{chemfig}
\catcode`\_=11
\definearrow4{<U=>}{%
    \CF_arrowshiftnodes{#4}%
    \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
            node[pos=0,yshift=1pt](\CF_arrowstartnode u0){}%
            node[pos=0,yshift=-1pt](\CF_arrowstartnode d0){}%
            node[pos=1,yshift=1pt](\CF_arrowstartnode u1){}%
            node[pos=1,yshift=-1pt](\CF_arrowstartnode d1){};%
    \begingroup%
        \pgfarrowharpoontrue%
        \expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode u0)--(\CF_arrowstartnode u1)node[pos=0.4](Uarrowarctangent){};%
        \expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode d1)--(\CF_arrowstartnode d0);%
    \endgroup%
    \expandafter\draw\expandafter(Uarrowarctangent) arc (270:190:.333) node (Uarrowend) {};%
    \node[anchor=south,yshift=2pt] at (Uarrowend.north) {#1};
    \node[anchor=south,yshift=2pt,xshift=5pt] at (Uarrowarctangent) {#2};  
    \node[anchor=south,yshift=-8pt,xshift=5pt] at (Uarrowarctangent) {#3};
}
\catcode`\_=8


\begin{document}
\section{Example}
\begin{equation}
\label{threestateslinear1}
\schemestart
A
\arrow{<=>[$x$][$y$]}
B
\arrow{<U=>[D][$w$][$z$]}
C
\schemestop
\end{equation}
\end{document}

Previous MWE (for versions of chemfig older than 1.4):

\documentclass{article}
\usepackage{chemfig}
\makeatletter
\definearrow4{<U=>}{%      %<--------------------
    \CF@arrow@shift@nodes{#4}%    %<--------------------
    \path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
            node[pos=0,yshift=1pt](\CF@arrow@start@node @u0){}%
            node[pos=0,yshift=-1pt](\CF@arrow@start@node @d0){}%
            node[pos=1,yshift=1pt](\CF@arrow@start@node @u1){}%
            node[pos=1,yshift=-1pt](\CF@arrow@start@node @d1){};%
    \begingroup%
        \pgfarrowharpoontrue%
        \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1)node[pos=0.4](Uarrow@arctangent){};%
        \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @d1)--(\CF@arrow@start@node @d0);%
    \endgroup%
    \expandafter\draw\expandafter(Uarrow@arctangent) arc (270:190:.333) node (Uarrow@end) {};%
    \node[anchor=south,yshift=2pt] at (Uarrow@end.north) {#1};
    \node[anchor=south,yshift=2pt,xshift=5pt] at (Uarrow@arctangent) {#2};    %<--------------------
    \node[anchor=south,yshift=-8pt,xshift=5pt] at (Uarrow@arctangent) {#3};    %<--------------------
}
\makeatother


\begin{document}
\section{Example}
\begin{equation}
\label{threestateslinear1}
\schemestart
A
\arrow{<=>[$x$][$y$]}
B
\arrow{<U=>[D][$w$][$z$]}
C
\schemestop
\end{equation}
\end{document}

Lines that I have changed or added are highlighted with %<--------------------. Please note that absolute positioning of the labels as done in the example might not be the most elegant solution.

2
  • I tried running this example in Overleaf but it doesn't work anymore. Jul 31 at 22:31
  • 1
    @LucasAlanis: Thanks for making me aware of this. I just edited my answer to adapt it to the new syntax. The new MWE should now work with verisons of chemfig that are newer than 1.4.
    – leandriis
    Aug 1 at 10:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.