Version with Equilibrium and Disequalibrium arrows
Inspired by Troy's answer and Jasper Habicht's answer to a similar question. Uses same I/O convention as Troy's answer and as the -U>
arrow from the ChemFig Documentation.
Addent arrows in the -X>
arrow defintion are customized according to the PGF arrows documentation. See the PGFManual section 16 for more info on how to customize these.
Compatable with ChemFig 1.41
\documentclass[border=1mm,tikz]{standalone}
\usepackage{chemfig}
\usepackage[version=4,arrows=pgf-filled]{mhchem}
\usetikzlibrary{arrows.meta}
\catcode`\_=11
% Initial arguments:
% #1, #2: Same as for -U> (above arrow)
% #3: Additional label at midpoint (also above arrow)
% #4, #5, #6: Like #1, #2, and #3, but below arrow
% #7: Optional shift, default 0
% #8: Optional arrow radius
% #9: Optional arrow angle
\definearrow9{-X>}{%
% handle optional shift
\CF_arrowshiftnodes{#7}%
% handle optional arrow radius
\CF_ifempty{#8}
{\def\CF_Xarrowradius{0.333}}
{\def\CF_Xarrowradius{abs{#8}}}%
% handle optional arrow angle
\CF_ifempty{#9}%
{\def\CF_Xarrowabsangle{60}}
{\pgfmathsetmacro\CF_Xarrowabsangle{abs(#9)}}
% draw basic arrow
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)node[midway](Xarrowarctangent){};%
\begingroup
\pgfarrowharpoontrue
% Draw top arrow (start)
\edef\CF_tmpstr{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (Xarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Xarrowabsangle]node(Xarrow1start){};
% Draw bottom arrow (end)
\edef\CF_tmpstr{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-{Stealth[left,round,scale=1.1,inset'=0pt 0.55]}]}%angle'=40
\expandafter\draw\CF_tmpstr (Xarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle-90,%
delta angle=\CF_Xarrowabsangle]%
node(Xarrow1end){};
% Draw bottom arrow (start)
\edef\CF_tmpstr{[\CF_ifempty{#4}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (Xarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle+90,delta angle=\CF_Xarrowabsangle]node(Xarrow2start){};
% Draw bottom arrow (end)
\edef\CF_tmpstr{[\CF_ifempty{#5}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-{Stealth[right,round,scale=1.1,inset'=0pt 0.555]}]}%
\expandafter\draw\CF_tmpstr (Xarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle+90,%
delta angle=-\CF_Xarrowabsangle]%
node(Xarrow2end){};
\endgroup
% Insert labels
\pgfmathsetmacro\CF_tmpstra{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
\pgfmathsetmacro\CF_tmpstrb{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"+":"-"}%
\CF_arrowdisplaylabel{#1}{0}\CF_tmpstra{Xarrow1start}{#2}{1}\CF_tmpstra{Xarrow1end}%
\CF_arrowdisplaylabel{#4}{0}\CF_tmpstrb{Xarrow2start}{#5}{1}\CF_tmpstrb{Xarrow2end}%
\CF_arrowdisplaylabel{#3}{0.5}\CF_tmpstra\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\CF_arrowdisplaylabel{#6}{0.5}\CF_tmpstrb\CF_arrowstartnode{}{}{}\CF_arrowendnode%
}
% Initial arguments:
% #1, #2: Same as for -U> (above arrow)
% #3: Additional label at midpoint (also above arrow)
% #4, #5, #6: Like #1, #2, and #3, but below arrow
% #7: Optional shift, default 0
% #8: Optional arrow radius
% #9: Optional arrow angle
\definearrow9{<=X=>}{%
% handle optional shift
\CF_arrowshiftnodes{#7}%
% handle optional arrow radius
\CF_ifempty{#8}
{\def\CF_Xarrowradius{0.333}}
{\def\CF_Xarrowradius{abs{#8}}}%
% handle optional arrow angle
\CF_ifempty{#9}%
{\def\CF_Xarrowabsangle{60}}
{\pgfmathsetmacro\CF_Xarrowabsangle{abs(#9)}}
% ensure harpoon style lines
\begingroup
\pgfarrowharpoontrue%
% draw equilibrium lines
\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){};%
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode u0)--(\CF_arrowstartnode u1)node[midway](toparrowarctangent){};%
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode d1)--(\CF_arrowstartnode d0)node[midway](bottomarrowarctangent){};%
% Draw top arrow (start) (left hand side)
\edef\CF_tmpstr{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (toparrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Xarrowabsangle]node(Xarrow1start){};
% Draw top arrow (end) (right hand side)
\edef\CF_tmpstr{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-CF]}%
\expandafter\draw\CF_tmpstr (toparrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle-90,%
delta angle=\CF_Xarrowabsangle]%
node(Xarrow1end){};
% Draw bottom arrow (end) (left hand side)
\edef\CF_tmpstr{[\CF_ifempty{#4}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-CF]}%
\expandafter\draw\CF_tmpstr (bottomarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle+90,delta angle=\CF_Xarrowabsangle]node(Xarrow2start){};
% Draw bottom arrow (start) (right hand side)
\edef\CF_tmpstr{[\CF_ifempty{#5}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (bottomarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle+90,%
delta angle=-\CF_Xarrowabsangle]%
node(Xarrow2end){};
% Insert labels
\pgfmathsetmacro\CF_tmpstra{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
\pgfmathsetmacro\CF_tmpstrb{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"+":"-"}%
\CF_arrowdisplaylabel{#1}{0}\CF_tmpstra{Xarrow1start}{#2}{1}\CF_tmpstra{Xarrow1end}%
\CF_arrowdisplaylabel{#4}{0}\CF_tmpstrb{Xarrow2start}{#5}{1}\CF_tmpstrb{Xarrow2end}%
\CF_arrowdisplaylabel{#3}{0.5}\CF_tmpstra\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\CF_arrowdisplaylabel{#6}{0.5}\CF_tmpstrb\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\endgroup
}
% Initial arguments:
% #1, #2: Same as for -U> (above arrow)
% #3: Additional label at midpoint (also above arrow)
% #4, #5, #6: Like #1, #2, and #3, but below arrow
% #7: Optional shift, default 0
% #8: Optional arrow radius
% #9: Optional arrow angle
\definearrow9{<=X=>>}{%
% handle optional shift
\CF_arrowshiftnodes{#7}%
% handle optional arrow radius
\CF_ifempty{#8}
{\def\CF_Xarrowradius{0.333}}
{\def\CF_Xarrowradius{abs{#8}}}%
% handle optional arrow angle
\CF_ifempty{#9}%
{\def\CF_Xarrowabsangle{60}}
{\pgfmathsetmacro\CF_Xarrowabsangle{abs(#9)}}
% ensure harpoon style lines
\begingroup
\pgfarrowharpoontrue%
% draw equilibrium lines
\path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
node[pos=0.000,yshift= 1pt](\CF_arrowstartnode f0){}%
node[pos=0.155,yshift=-1pt](\CF_arrowstartnode r0){}%
node[pos=1.000,yshift= 1pt](\CF_arrowstartnode f1){}%
node[pos=0.845,yshift=-1pt](\CF_arrowstartnode r1){};%
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode f0)--(\CF_arrowstartnode f1)node[midway](forarrowarctangent){};%
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode r1)--(\CF_arrowstartnode r0)node[midway](revarrowarctangent){};%
% Draw top arrow (start) (left hand side)
\edef\CF_tmpstr{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (forarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Xarrowabsangle]node(Xarrow1start){};
% Draw top arrow (end) (right hand side)
\edef\CF_tmpstr{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-CF]}%
\expandafter\draw\CF_tmpstr (forarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle-90,%
delta angle=\CF_Xarrowabsangle]%
node(Xarrow1end){};
% Draw bottom arrow (end) (left hand side)
\edef\CF_tmpstr{[\CF_ifempty{#4}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-CF]}%
\expandafter\draw\CF_tmpstr (revarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle+90,delta angle=\CF_Xarrowabsangle]node(Xarrow2start){};
% Draw bottom arrow (start) (right hand side)
\edef\CF_tmpstr{[\CF_ifempty{#5}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (revarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle+90,%
delta angle=-\CF_Xarrowabsangle]%
node(Xarrow2end){};
% Insert labels
\pgfmathsetmacro\CF_tmpstra{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
\pgfmathsetmacro\CF_tmpstrb{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"+":"-"}%
\CF_arrowdisplaylabel{#1}{0}\CF_tmpstra{Xarrow1start}{#2}{1}\CF_tmpstra{Xarrow1end}%
\CF_arrowdisplaylabel{#4}{0}\CF_tmpstrb{Xarrow2start}{#5}{1}\CF_tmpstrb{Xarrow2end}%
\CF_arrowdisplaylabel{#3}{0.5}\CF_tmpstra\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\CF_arrowdisplaylabel{#6}{0.5}\CF_tmpstrb\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\endgroup
}
% Initial arguments:
% #1, #2: Same as for -U> (above arrow)
% #3: Additional label at midpoint (also above arrow)
% #4, #5, #6: Like #1, #2, and #3, but below arrow
% #7: Optional shift, default 0
% #8: Optional arrow radius
% #9: Optional arrow angle
\definearrow9{<<=X=>}{%
% handle optional shift
\CF_arrowshiftnodes{#7}%
% handle optional arrow radius
\CF_ifempty{#8}
{\def\CF_Xarrowradius{0.333}}
{\def\CF_Xarrowradius{abs{#8}}}%
% handle optional arrow angle
\CF_ifempty{#9}%
{\def\CF_Xarrowabsangle{60}}
{\pgfmathsetmacro\CF_Xarrowabsangle{abs(#9)}}
% ensure harpoon style lines
\begingroup
\pgfarrowharpoontrue%
% draw equilibrium lines
\path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
node[pos=0.155,yshift= 1pt](\CF_arrowstartnode f0){}%
node[pos=0.000,yshift=-1pt](\CF_arrowstartnode r0){}%
node[pos=0.845,yshift= 1pt](\CF_arrowstartnode f1){}%
node[pos=1.000,yshift=-1pt](\CF_arrowstartnode r1){};%
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode f0)--(\CF_arrowstartnode f1)node[midway](forarrowarctangent){};%
\expandafter\draw\expandafter[\CF_arrowcurrentstyle](\CF_arrowstartnode r1)--(\CF_arrowstartnode r0)node[midway](revarrowarctangent){};%
% Draw top arrow (start) (left hand side)
\edef\CF_tmpstr{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (forarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Xarrowabsangle]node(Xarrow1start){};
% Draw top arrow (end) (right hand side)
\edef\CF_tmpstr{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-CF]}%
\expandafter\draw\CF_tmpstr (forarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle-90,%
delta angle=\CF_Xarrowabsangle]%
node(Xarrow1end){};
% Draw bottom arrow (end) (left hand side)
\edef\CF_tmpstr{[\CF_ifempty{#4}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-CF]}%
\expandafter\draw\CF_tmpstr (revarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,start angle=\CF_arrowcurrentangle+90,delta angle=\CF_Xarrowabsangle]node(Xarrow2start){};
% Draw bottom arrow (start) (right hand side)
\edef\CF_tmpstr{[\CF_ifempty{#5}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
\expandafter\draw\CF_tmpstr (revarrowarctangent)%
arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Xarrowradius,%
start angle=\CF_arrowcurrentangle+90,%
delta angle=-\CF_Xarrowabsangle]%
node(Xarrow2end){};
% Insert labels
\pgfmathsetmacro\CF_tmpstra{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
\pgfmathsetmacro\CF_tmpstrb{\CF_Xarrowradius*cos(\CF_arrowcurrentangle)<0?"+":"-"}%
\CF_arrowdisplaylabel{#1}{0}\CF_tmpstra{Xarrow1start}{#2}{1}\CF_tmpstra{Xarrow1end}%
\CF_arrowdisplaylabel{#4}{0}\CF_tmpstrb{Xarrow2start}{#5}{1}\CF_tmpstrb{Xarrow2end}%
\CF_arrowdisplaylabel{#3}{0.5}\CF_tmpstra\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\CF_arrowdisplaylabel{#6}{0.5}\CF_tmpstrb\CF_arrowstartnode{}{}{}\CF_arrowendnode%
\endgroup
}
\catcode`\_=8
\begin{document}
\schemestart
A
\arrow{-X>[1][2][3][4][5][6]}
B
\schemestop
\schemestart
A
\arrow{<=X=>[1][2][3][4][5][6]}
B
\schemestop
\schemestart
Z
\arrow{-X>[1][2][3][4][5][6]}
Y
\arrow{<=X=>[1][2][3][4][5][6]}
X
\schemestop
\schemestart
A
\arrow{<=X=>>[1][2][3][4][5][6]}
B
\arrow{<<=X=>[1][2][3][4][5][6]}
C
\schemestop
\end{document}
Output

Note
As of version 1.4 of ChemFig (c. May 2019), the previous answers, are no longer functional as a result of a change in the way that ChemFig handles internal calls. - I have posted un updated version of Troy's code as a comment on his answer
\documentclass{article} \usepackage{chemfig} \begin{document} \schemestart A \arrow{-U>[X][Y]} B \schemestop \end{document}
, where without theU
theY
text would appear under the arrow.