chemfig
allows to add explizit node names to either bonds or atoms in its formulae by using the @{<name>}
syntax. These names can be used in a tikzpicture with the options remember picture, overlay
to draw the curved arrows. chemfig
provides the wrapper \chemmove
for this. So a combination of chemfig
and TikZ can be used to draw the schemes. (BTW: the chemfig
manual actually has quite a few examples of such schemes...)
Here is something that might get you started:
\documentclass{article}
\usepackage{chemfig}
\tikzset{
elmove/.style={->,shorten >=3pt, shorten <=3pt}
}
\begin{document}
\schemestart
\chemfig{*8(-[@{sb1}]=[@{db1}]-[@{sb2}]=[@{db2}]-[@{sb3}]=[@{db3}]-[@{sb4}]=[@{db4}])}
\arrow{<->}
\chemfig{*8(=-=-=-=-)}
\schemestop
\chemmove[red,elmove]{
\draw (db1) .. controls +(90:5mm) and +(45:5mm) .. (sb1) ;
\draw (db2) .. controls +(180:5mm) and +(135:5mm) .. (sb2) ;
\draw (db3) .. controls +(270:5mm) and +(225:5mm) .. (sb3) ;
\draw (db4) .. controls +(0:5mm) and +(315:5mm) .. (sb4) ;
% similar the others
}
\bigskip
\schemestart
\chemfig{**6(----[@{b}]--)}
\arrow(benzene.base east--.base west){->[][][15pt]}
\chemfig{**[120,420,dashed]6(---(-[,-1,,,draw=none]{+})-(-[:120]H)(-[:60]NO_2)--)}
\arrow(@benzene.45--){0}[45,.2]
\chemfig{@{N}\chemabove{N}{+}O_2}
\schemestop
\chemmove[blue,elmove]{
\draw[shorten <=-5pt] (b) .. controls +(30:5mm) and +(-90:1cm) .. (N) ;
}
\end{document}
My package modiagram
can be used to draw the electronic state diagram. IMHO It doesn't fit perfectly and a TikZ-only solution may be preferable. On the other hand the code is rather easy:
\documentclass[11pt]{book}
\usepackage[utf8]{inputenc}
\usepackage{chemformula,modiagram,chemfig}
% necessary due to stupid bug in `modiagram':
\newcommand*\makecolonother{\catcode`\:=12 }
\begin{document}
\ch{_4Be}: 1s$^2$~2s$^2$
ground state:
\begin{MOdiagram}[style=square,AO-width=8pt]
\AO(0pt){s}{0;pair}
\AO(12pt){s}{0;pair}
\AO(24pt){s}{0;}
\AO(34pt){s}{0;}
\AO(44pt){s}{0;}
\draw[overlay,red,->]
(AO2.north) .. controls +(0,.5) and +(0,.5) .. (AO3.north) ;
\end{MOdiagram}
excited state:
\begin{MOdiagram}[style=square,AO-width=8pt]
\AO(0pt){s}{0;pair}
\AO(12pt){s}{0;up}
\AO(24pt){s}{0;up}
\AO(34pt){s}{0;}
\AO(44pt){s}{0;}
\makecolonother
\draw[<-,overlay]
(AO2.south) -- ++(-100:3mm) node[below] {Cl} ;
\draw[<-,overlay]
(AO3.south) -- ++(-80:3mm) node[below] {Cl} ;
\end{MOdiagram}
\end{document}
A name can be put below a molecule with \chemname{<molecule>}{<name>}
.
In a scheme everything between different \arrow
s is consideres as one compound and the arrow is centered to the whole structure. This can be made visible with \schemedebug{true}
:
So one possibility is to put invisible arrows of zero length (\arrow{0}[,0]
) in between:
\schemedebug{true}
\schemestart
\sodiumbenzoate \arrow{0}[,0]
+
\NaOH
\arrow{->[\footnotesize\chemfig{CaO}][$\Delta$]}
\benzene \arrow{0}[,0] + \CaO
\schemestop
In combination this would give (note that I use a different possibility to draw sodium benzoate in order to give it a different baseline (page 4 of the chemfig
manual: »ChemFig always places the first atom of the molecule on the baseline of the preceding code.«)):
\schemedebug{true}
\schemestart
\chemname{\chemfig{COONa-[4]**6(------)}}{sodium benzoate}
\+
NaOH
\arrow{->[\footnotesize\chemfig{CaO}][$\Delta$]}
\chemfig{**6(------)}
\arrow{0}[,0]
\+
CaO
\schemestop
The name disturbs alignment again. Now you can either not use \chemname
but put the name below with more invisible arrows or you can adjust the anchor where the \arrow
starts (have a look at the (.{4.85}--)
argument of \arrow
and study section »Anchoring« in part »reaction schemes« of the chemfig
manual):
\schemedebug{true}
\schemestart
\chemname{\chemfig{COONa-[4]**6(------)}}{sodium benzoate}
\+
NaOH
\arrow(.{4.85}--){->[\footnotesize\chemfig{CaO}][$\Delta$]}
\chemfig{**6(------)}
\arrow{0}[,0]
\+
CaO
\schemestop
There may be other solutions, too. I always tend to forget one or more ways…
Best Answer
How about this:
Despite the scaling and the
\tiny
fontsize for the arrow labels the scheme stil exceeds the page width. Personally I'd play withchemfig
'satom sep
(andbond offset
) but choose a larger fontsize,\footnotesize
maybe. (In the example belowshowframe
visualizes the page dimensions.)The example uses the
chemmacros
package (which also loads thechemformula
package). It provides the\scrp
and offers the possibility to print all charges inchemformula
's formulas (\ch
) as formal charges (\chemsetup{ charges/circled = all }
)