I'll answer under the assumption that you're the one who emailed me the other day about Missing bond type in chemical rendering packages? and to whom I suggested the following definition of the submol {Rsubst}
:
\tikzset{
subst/.style={shorten <= 10pt,preaction={draw=white,line width=6pt}}
}
\definesubmol{subst}{-[,-1,,,draw=none]-[::-30,1.5,,,subst]}
\definesubmol{Rsubst}{!{subst}R}
\definesubmol{Xsubst}{!{subst}X}
since a submol {Rsubst}
is used in your code but never defined. If that is wrong please correct me.
Your first and second question are actually the same: captions and a list of <thingy>
both are properties of floats. The real question therefore is: how to define a new float?
Since you're already using the caption
package I suggest to use the newfloat
package for defining a {scheme}
environment analogous to the {figure}
and {table}
environments. The package is from the same author and will work together nicely.
\usepackage{newfloat}
\DeclareFloatingEnvironment[
fileext = los , % name of file extension
name = Scheme , % name of float type
within = chapter ,% counter within
placement = htbp % default placement
]{scheme}
This also defines a \listofschemes
which will (after two compilations) give the list of schemes.
A few remarks to your scheme: I don't understand what you mean with “line up” in your third question but I made some adjustments:
- I used the fourth possibility of stacking stuff in arrow labels from my answer to your question Chemfig new line reaction scheme. This means: no need for the
\parbox
.
- I deleted the
\rlap{...}
constructs as I don't think they're needed. The R^2
substituents can be adjusted with chemfig
's |
syntax for dividing atoms and the use of the arrival option of bonds, see another answer of mine.
- I used an invisible arrow (type
0
) of length 0
to center the plus with respect to the preceding molecule. There are other ways but I find this way the most convenient one in most cases.
- I introduced the packages
siunitx
and chemmacros
for typesetting of units and for typesetting of chemical formulae.
- I shortened the bond length of the molecules in the scheme by setting
\setatomsep{1.8em}
.
The result of all of the above is this, page one:
and on page two:
Here's the whole code:
\documentclass[12pt,letterpaper]{report}
\usepackage{chemfig}
% make the arrow label nodes center aligned. This will also allow to use \\ in
% the arrow labels and will make the use of \parbox unnecessary
\usepackage{regexpatch}
\makeatletter
% \xpatchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
% the starred variant replaces all occurrences of <search>
\xpatchcmd*\CF@arrow@display@label@i
{node[}% search
{node[align=center,}% replace
{}% success
{}% failure
\makeatother
% define the substituent submol:
\tikzset{
subst/.style={shorten <= 10pt,preaction={draw=white,line width=4pt}}
}
\definesubmol{subst}{-[,-1,,,draw=none]-[::-30,1.5,,,subst]}
\definesubmol{Rsubst}{!{subst}R}
\definesubmol{Xsubst}{!{subst}X}
% use other useful chemistry tools, too, e.g. the handy \ch command:
\usepackage{chemmacros}
% set units in a unified way:
\usepackage{siunitx}
\DeclareSIUnit{\molpercent}{mol\%}
% customize captions, define floating scheme environment:
\usepackage{caption}
\usepackage{newfloat}
\DeclareFloatingEnvironment[
fileext = los ,
name = Scheme ,
within = chapter ,
placement = htbp
]{scheme}
\begin{document}
\listofschemes
\chapter{Foo Bar}
\begin{scheme}
\footnotesize\centering
\setatomsep{1.8em}
\schemestart[0,2.5,thick]
\chemfig{*6(
-(!{Rsubst})
=-(-[,0.8]I)
=(-[,0.9]N(-[:150,1.3,,1]R|^2)(-[:30,1.3]R|^1))
-=)
}
\arrow{0}[,0]\+
\chemfig{R^4-~}
\arrow{->%
[\SI{3}{\molpercent}, \ch{PdCl2(PPh)3}\\ \SI{2}{\molpercent},\ch{CuI}, \ch{Et3N}]%
[MW, \SI{60}{\degree}, \SI{20}{\minute}]}
\chemfig{*6(
-(!{Rsubst})
=-(-~-R|^4)
=(-[,0.9]N(-[:150,1.3,,1]R|^2)(-[:30,1.3]R|^1))
-=)
}
\schemestop
\caption{Microwave assisted Sonogashira coupling reaction.}
\end{scheme}
\end{document}
As I understand the question, the problem is in the "label" of the arrow and how to do the "circle" with arrows. One way to do this is to play with the properties of chemmove
and the arrows.
For example:
\schemestart
\chemfig{First molecule}
\arrow{->[
\chemname[24pt]{\chemfig{N@{st1}ADH}}{\scriptsize \parbox[c]{40pt}{\centering ammonium formate}}
\hspace{0.5cm}
\chemname[24pt]{\chemfig{N@{en1}AD}}{\chemfig{CO_2}}
\chemmove{\draw[->,shorten <=5pt, shorten >=5pt](st1) .. controls +(+50:8mm) and +(+130:8mm)..(en1);}
\chemmove{\draw[->,shorten <=5pt, shorten >=5pt](en1) .. controls +(-130:8mm) and +(-50:8mm)..(st1);}
\chemmove{\draw[->,shorten <=5pt, shorten >=5pt,transform canvas={yshift=-32pt}](st1) .. controls +(+50:8mm) and +(+130:8mm)..(en1);}
]}[,2.4]
\chemfig{second molecule}
\schemestop
Note that maybe further adjusting of the spaces is required.
Best Answer
There is no free positioning. But with the help of invisible arrows it is not too hard: