summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/chemfig
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/chemfig')
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/chemfig.sty6
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/chemfig.tex807
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/t-chemfig.tex4
3 files changed, 722 insertions, 95 deletions
diff --git a/Master/texmf-dist/tex/generic/chemfig/chemfig.sty b/Master/texmf-dist/tex/generic/chemfig/chemfig.sty
index 85c3a9269c0..27a0fbe14de 100644
--- a/Master/texmf-dist/tex/generic/chemfig/chemfig.sty
+++ b/Master/texmf-dist/tex/generic/chemfig/chemfig.sty
@@ -1,13 +1,13 @@
% __________________________________________________________________
% | |
% | |
-% | chemfig v0.4b |
+% | chemfig v1.0 |
% | |
-% | April 24, 2011 |
+% | June 15, 2011 |
% | |
% |__________________________________________________________________|
%
-% This is t-chemfig.tex, the package file for conTeXt.
+% This is chemfig.sty, the package file for LaTeX.
%
% Maintainer: Christian Tellechea
% E-mail : unbonpetit@gmail.com
diff --git a/Master/texmf-dist/tex/generic/chemfig/chemfig.tex b/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
index 11a90945caf..c1385494eba 100644
--- a/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
+++ b/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
@@ -1,9 +1,9 @@
% __________________________________________________________________
% | |
% | |
-% | chemfig v0.4b |
+% | chemfig v1.0 |
% | |
-% | April 24, 2011 |
+% | June 15, 2011 |
% | |
% |__________________________________________________________________|
%
@@ -42,10 +42,10 @@
% Sauvegarde tous les catcodes des caract\`eres sp\'eciaux sauf #
\begingroup
-\def\X#1{\catcode\number`#1=\number\catcode`#1\relax}
-\expandafter\xdef\csname CF@savedcatcode\endcsname{%
- \X\[\X\]\X\:\X\(\X\)\X\,\X\-\X\=\X\~\X\!\X\?\X\<\X\>\X\;\X\*\X\|\X\@%
-}
+ \def\X#1{\catcode\number`#1=\number\catcode`#1\relax}
+ \expandafter\xdef\csname CF@savedcatcode\endcsname{%
+ \X\[\X\]\X\:\X\(\X\)\X\,\X\-\X\=\X\~\X\!\X\?\X\<\X\>\X\;\X\*\X\|\X\@%
+ }
\endgroup
% Pour la dur\'ee de lecture du package, changer les catcodes :
@@ -62,10 +62,10 @@
\def#1%
}
-\CF@def\CF@ver {0.4b}
-\CF@def\CF@date {2011/04/24}
-\CF@def\CF@fr@date {24 avril 2011}
-\CF@def\CF@en@date {April 24, 2011}
+\CF@def\CF@ver {1.0}
+\CF@def\CF@date {2011/06/15}
+\CF@def\CF@fr@date {15 juin 2011}
+\CF@def\CF@en@date {June 15, 2011}
\CF@def\CF@package@name{chemfig}
\expandafter\ifx\csname @latexerr\endcsname\relax% on n'utilise pas LaTeX ?
@@ -534,21 +534,12 @@
\expandafter\def\expandafter#1\expandafter{\expandafter{\expandafter}#1}%
}
-\CF@def\CF@make@other#1{%
- \ifx\@empty#1\@empty
- \else
- \expandafter\@makeother\@car#1\@nil
- \CF@swap@fi
- \expandafter\CF@make@other\expandafter{\@gobble#1}%
- \fi
-}
-
\CF@def\chemfig{\@testopt\CF@chemfig@i{}}
\CF@def\CF@chemfig@i[#1]{\@testopt{\CF@chemfig@ii[#1]}{}}
\CF@def\CF@chemfig@ii[#1][#2]{%
- \edef\CF@tmp@str{[remember picture,every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt\ifx\@empty#2\@empty\else,#2\fi},baseline\ifx\@empty#1\@empty\else,#1\fi]}%
+ \edef\CF@tmp@str{[remember picture,every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@\ifx\@empty#2\@empty\else,#2\fi},baseline\ifx\@empty#1\@empty\else,#1\fi]}%
\expandafter\tikzpicture\CF@tmp@str
\begingroup
\let\CF@hook@list\@empty
@@ -1227,90 +1218,100 @@
\setlewis{}{}{}
-\CF@def\lewis{\begingroup\@makeother;\@makeother:\CF@lewis@i}
-
-\CF@def\CF@lewis@i#1{\CF@lewis@ii#1\@nil}
-
-\CF@def\CF@lewis@ii#1,#2\@nil{%
- \setbox\CF@lewis@box\hbox{\printatom{#2}}%
- \def\CF@lewis@remainpos{#1}%
- \let\CF@lewis@previouspos\@empty
- \loop
- \unless\ifx\CF@lewis@remainpos\@empty
- \edef\CF@lewis@currentpos{\expandafter\@car\CF@lewis@remainpos\@nil}%
- \edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \pgfmathparse{\wd\CF@lewis@box/2+\ifcase\CF@lewis@currentpos\space1\or1\or0\or-1\or-1\or-1\or0\or1\fi*(\wd\CF@lewis@box/2+\CF@lewis@offset)}%
- \let\CF@lewis@x\pgfmathresult
- \pgfmathparse{\ht\CF@lewis@box/2+\ifcase\CF@lewis@currentpos\space0\or1\or1\or1\or0\or-1\or-1\or-1\fi*(\ht\CF@lewis@box/2\ifnum\CF@lewis@currentpos>4 +\dp\CF@lewis@box\fi+\CF@lewis@offset)}%
- \let\CF@lewis@y\pgfmathresult
- \edef\CF@lewis@xoffset{\ifcase\CF@lewis@currentpos\space
- 0\or0.70711\or1\or0.70711\or0\or-0.70711\or-1\or-0.70711\fi}%
- \edef\CF@lewis@yoffset{\ifcase\CF@lewis@currentpos\space
- -1\or-0.70711\or0\or0.70711\or1\or0.70711\or0\or-0.70711\fi}%
- \pgfmathparse{veclen(\CF@lewis@xoffset,\CF@lewis@yoffset)}\let\CF@len@normvec\pgfmathresult
- \edef\CF@lewis@diagmul{\ifcase\CF@lewis@currentpos\space1\or0\or1\or0\or1\or0\or1\or0\fi}% annule l'offset pour les diagonales
- \if.\expandafter\@car\CF@lewis@remainpos\relax\@nil
+\CF@def\Lewis{%
+ \tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline]%
+ \@makeother;\@makeother:%
+ \CF@lewis@i{}}
+
+\CF@def\lewis{%
+ \tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline]%
+ \@makeother;\@makeother:%
+ \CF@lewis@i{overlay}}
+
+\CF@def\CF@lewis@i#1#2{\CF@lewis@ii#2\@nil{#1}}
+
+\CF@def\CF@lewis@ii#1,#2\@nil#3{%
+ \setbox\CF@lewis@box\hbox{\printatom{#2}}%
+ \node(CF@lewis@anchor){};
+ \def\CF@lewis@remainpos{#1}%
+ \let\CF@lewis@previouspos\@empty
+ \loop
+ \unless\ifx\CF@lewis@remainpos\@empty
+ \edef\CF@lewis@currentpos{\expandafter\@car\CF@lewis@remainpos\@nil}%
\edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \tikz \draw[overlay,fill,black]
- (\CF@lewis@x pt-\CF@lewis@yoffset*\CF@lewis@diagmul*0.1ex,
- \CF@lewis@y pt+\CF@lewis@xoffset*\CF@lewis@diagmul*0.1ex)circle(0.15ex);%
- \else
- \if|\expandafter\@car\CF@lewis@remainpos\relax\@nil
+ \pgfmathparse{\wd\CF@lewis@box/2+\ifcase\CF@lewis@currentpos\space1\or1\or0\or-1\or-1\or-1\or0\or1\fi*(\wd\CF@lewis@box/2+\CF@lewis@offset)}%
+ \let\CF@lewis@x\pgfmathresult
+ \pgfmathparse{\ht\CF@lewis@box/2+\ifcase\CF@lewis@currentpos\space0\or1\or1\or1\or0\or-1\or-1\or-1\fi*(\ht\CF@lewis@box/2\ifnum\CF@lewis@currentpos>4 +\dp\CF@lewis@box\fi+\CF@lewis@offset)}%
+ \let\CF@lewis@y\pgfmathresult
+ \edef\CF@lewis@xoffset{\ifcase\CF@lewis@currentpos\space
+ 0\or0.70711\or1\or0.70711\or0\or-0.70711\or-1\or-0.70711\fi}%
+ \edef\CF@lewis@yoffset{\ifcase\CF@lewis@currentpos\space
+ -1\or-0.70711\or0\or0.70711\or1\or0.70711\or0\or-0.70711\fi}%
+ \pgfmathparse{veclen(\CF@lewis@xoffset,\CF@lewis@yoffset)}\let\CF@len@normvec\pgfmathresult
+ \edef\CF@lewis@diagmul{\ifcase\CF@lewis@currentpos\space1\or0\or1\or0\or1\or0\or1\or0\fi}% annule l'offset pour les diagonales
+ \if.\expandafter\@car\CF@lewis@remainpos\relax\@nil
\edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \expandafter\tikz\expandafter\draw\expandafter[\CF@lewis@style,overlay]%
- (\CF@lewis@x-\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y-\CF@lewis@length*\CF@lewis@yoffset/2 pt)--
- ([xshift=-\CF@lewis@yoffset*\CF@lewis@widthdouble,yshift=\CF@lewis@xoffset*\CF@lewis@widthdouble]\CF@lewis@x-\CF@lewis@xoffset*\CF@lewis@length/2 pt,\CF@lewis@y-\CF@lewis@yoffset*\CF@lewis@length/2 pt)--
- ([xshift=-\CF@lewis@yoffset*\CF@lewis@widthdouble,yshift=\CF@lewis@xoffset*\CF@lewis@widthdouble]\CF@lewis@x+\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@yoffset/2 pt)--
- (\CF@lewis@x+\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@yoffset/2 pt)--cycle;%
+ \draw[fill,black,#3]
+ (\CF@lewis@x pt-\CF@lewis@yoffset*\CF@lewis@diagmul*0.1ex,
+ \CF@lewis@y pt+\CF@lewis@xoffset*\CF@lewis@diagmul*0.1ex)circle(0.15ex);%
\else
- \if:\expandafter\@car\CF@lewis@remainpos\relax\@nil
+ \if|\expandafter\@car\CF@lewis@remainpos\relax\@nil
\edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \tikz \draw[overlay,fill,black]
- (\CF@lewis@x pt-\CF@lewis@yoffset*\CF@lewis@diagmul*0.2ex-.2em*\CF@lewis@xoffset/\CF@len@normvec,\CF@lewis@y pt+\CF@lewis@xoffset*\CF@lewis@diagmul*0.2ex-.2em*\CF@lewis@yoffset/\CF@len@normvec)circle(0.15ex)%
- (\CF@lewis@x pt-\CF@lewis@yoffset*\CF@lewis@diagmul*0.2ex+.2em*\CF@lewis@xoffset/\CF@len@normvec,\CF@lewis@y pt+\CF@lewis@xoffset*\CF@lewis@diagmul*0.2ex+.2em*\CF@lewis@yoffset/\CF@len@normvec)circle(0.15ex);%
+ \expandafter\draw\expandafter[\CF@lewis@style,#3]%
+ (\CF@lewis@x-\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y-\CF@lewis@length*\CF@lewis@yoffset/2 pt)--
+ ([xshift=-\CF@lewis@yoffset*\CF@lewis@widthdouble,yshift=\CF@lewis@xoffset*\CF@lewis@widthdouble]\CF@lewis@x-\CF@lewis@xoffset*\CF@lewis@length/2 pt,\CF@lewis@y-\CF@lewis@yoffset*\CF@lewis@length/2 pt)--
+ ([xshift=-\CF@lewis@yoffset*\CF@lewis@widthdouble,yshift=\CF@lewis@xoffset*\CF@lewis@widthdouble]\CF@lewis@x+\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@yoffset/2 pt)--
+ (\CF@lewis@x+\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@yoffset/2 pt)--cycle;%
\else
- \expandafter\tikz\expandafter\draw\expandafter[\CF@lewis@style,overlay]%
- (\CF@lewis@x-\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y-\CF@lewis@length*\CF@lewis@yoffset/2 pt)--%
- (\CF@lewis@x+\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@yoffset/2 pt);%
+ \if:\expandafter\@car\CF@lewis@remainpos\relax\@nil
+ \edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
+ \draw[fill,black,#3]
+ (\CF@lewis@x pt-\CF@lewis@yoffset*\CF@lewis@diagmul*0.2ex-.2em*\CF@lewis@xoffset/\CF@len@normvec,\CF@lewis@y pt+\CF@lewis@xoffset*\CF@lewis@diagmul*0.2ex-.2em*\CF@lewis@yoffset/\CF@len@normvec)circle(0.15ex)%
+ (\CF@lewis@x pt-\CF@lewis@yoffset*\CF@lewis@diagmul*0.2ex+.2em*\CF@lewis@xoffset/\CF@len@normvec,\CF@lewis@y pt+\CF@lewis@xoffset*\CF@lewis@diagmul*0.2ex+.2em*\CF@lewis@yoffset/\CF@len@normvec)circle(0.15ex);%
+ \else
+ \expandafter\draw\expandafter[\CF@lewis@style,#3]%
+ (\CF@lewis@x-\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y-\CF@lewis@length*\CF@lewis@yoffset/2 pt)--%
+ (\CF@lewis@x+\CF@lewis@length*\CF@lewis@xoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@yoffset/2 pt);%
+ \fi
\fi
- \fi
- \fi
- \repeat
- \box\CF@lewis@box
- \endgroup
+ \fi
+ \repeat
+ \node[anchor=base west]at(CF@lewis@anchor){\box\CF@lewis@box};%
+ \endtikzpicture
}
-\CF@def\chembelow{%
- \@testopt\CF@chembelow{1.5pt}}
+\CF@def\Chembelow{\begingroup\let\CF@tmp@str\@gobble\CF@chembelow@i}
-\CF@def\CF@chembelow[#1]#2#3{%
+\CF@def\chembelow{\begingroup\let\CF@tmp@str\@firstofone\CF@chembelow@i}
+
+\CF@def\CF@chembelow@i{\@testopt\CF@chembelow@ii{1.5pt}}
+
+\CF@def\CF@chembelow@ii[#1]#2#3{%
\setbox\CF@box@boxa\hbox{\printatom{#2}}\setbox\CF@box@boxb\hbox{\printatom{#3}}%
\vtop{%
\hbox{\printatom{#2}}%
- \hrule width0pt depth0pt height#1\relax
- \hbox{%
- \hskip\dimexpr(\wd\CF@box@boxa-\wd\CF@box@boxb)/\tw@
- \printatom{#3}%
- \hskip\dimexpr(\wd\CF@box@boxa-\wd\CF@box@boxb)/\tw@
- }%
- \vskip-\dimexpr\ht\CF@box@boxb+\dp\CF@box@boxb+#1\relax
+ \hrule width\z@ depth\z@ height#1
+ \hbox to\wd\CF@box@boxa{\hss\printatom{#3}\hss}%
+ \CF@tmp@str{\hrule width\z@ depth\z@ height-\dimexpr\ht\CF@box@boxb+\dp\CF@box@boxb+#1\relax}%
}%
+ \endgroup
}
-\CF@def\chemabove{%
- \@testopt\CF@chemabove{1.5pt}}
+\CF@def\Chemabove{\begingroup\let\CF@tmp@str\@gobble\CF@chemabove@i}
+
+\CF@def\chemabove{\begingroup\let\CF@tmp@str\@firstofone\CF@chemabove@i}
+
+\CF@def\CF@chemabove@i{\@testopt\CF@chemabove@ii{1.5pt}}
-\CF@def\CF@chemabove[#1]#2#3{%
+\CF@def\CF@chemabove@ii[#1]#2#3{%
\setbox\CF@box@boxa\hbox{\printatom{#2}}\setbox\CF@box@boxb\hbox{\printatom{#3}}%
- \vtop{%
+ \vbox{%
+ \CF@tmp@str{\hrule width\z@ depth\z@ height-\dimexpr\ht\CF@box@boxb+\dp\CF@box@boxb+#1\relax}%
+ \hbox to\wd\CF@box@boxa{\hss\printatom{#3}\hss}%
+ \hrule width\z@ depth\z@ height#1
\hbox{\printatom{#2}}%
- \hrule width0pt depth0pt height-\dimexpr#1+\ht\CF@box@boxa+\ht\CF@box@boxb+\dp\CF@box@boxb\relax
- \hbox{%
- \hskip\dimexpr(\wd\CF@box@boxa-\wd\CF@box@boxb)/\tw@
- \printatom{#3}%
- \hskip\dimexpr(\wd\CF@box@boxa-\wd\CF@box@boxb)/\tw@
- }%
- }%
+ }%
+ \endgroup
}
%%%%%% les signes et les fl\`eches
@@ -1326,15 +1327,14 @@
\setchemrel{}{}{}
-\CF@def\chemrel{%
- \@testopt\CF@chemchemrel@i{}}
+\CF@def\chemrel{\@testopt\CF@chemchemrel@i{}}
\CF@def\CF@chemchemrel@i[#1]{\@testopt{\CF@chemchemrel@ii[#1]}{}}
\CF@def\CF@chemchemrel@ii[#1][#2]#3{%
\def\CF@chemrel@stuff
{\leavevmode\kern\CF@chemrel@hsep
- \tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
+ \tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline]%
\CF@if@instr{#3}{<>}%
{\node[yshift=-1pt] at(0,0)(chemrel@start){\vphantom I};\node[yshift=-1pt] at(\CF@chemrel@length,0)(chemrel@end){\vphantom I};%
\expandafter\draw\expandafter[\CF@remove@equichars#3,\@nil-](chemrel@end)--(chemrel@start);\fill (chemrel@start)--++(4pt,-1.75pt)--+(-1.5pt,1.75pt)--cycle;%
@@ -1407,6 +1407,625 @@
}%
}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% S C H E M A S R E A C T I O N N E L S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\CF@compound@cnt
+
+\newdimen\CF@arrow@size
+
+\newif\ifCF@name@start
+\newif\ifCF@name@end
+\newif\ifCF@reac@debug
+
+\let\CF@scheme@nest\z@% ne PAS modifier cette ligne !
+
+\CF@def\CF@subscheme{\@testopt\CF@subscheme@i{}}
+\CF@def\CF@subscheme@i[#1]{\@testopt{\CF@subscheme@ii[#1]}{text}}
+\CF@def\CF@subscheme@ii[#1][#2]#3{\schemestart[#1][#2]#3\schemestop}
+
+\CF@def\schemedebug#1{% #1=true ou false
+ \ifcsname CF@reac@debug#1\endcsname\csname CF@reac@debug#1\endcsname\else\CF@reac@debugfalse\fi
+}
+\schemedebug{false}
+
+\CF@def\setcompoundstyle{\def\CF@default@compound@style}
+\setcompoundstyle{}
+
+\CF@def\CF@set@arrow@style#1,#2,#3\@nil#4#5#6{%
+ \def#4{#1}%
+ \expandafter\def\expandafter#5\expandafter{#2}%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter#6\expandafter\expandafter\expandafter{\expandafter\CF@sanitize@lastitem#3,\@empty\@nil}%
+}
+
+\CF@def\setarrowdefault#1{%
+ \CF@set@arrow@style#1,\@empty,\@empty\@nil\CF@default@arrow@angle\CF@default@arrow@length\CF@default@arrow@style
+ \ifx\@empty\CF@default@arrow@angle\def\CF@default@arrow@angle{0}\fi
+ \ifx\@empty\CF@default@arrow@length\def\CF@default@arrow@length{1}\fi
+}
+\setarrowdefault{}
+
+\CF@def\setarrowoffset#1{\def\CF@arrow@offset{#1}\ifx\CF@arrow@offset\@empty\def\CF@arrow@offset{1em}\fi}
+\setarrowoffset{}
+
+\CF@def\setcompoundsep#1{\def\CF@compound@sep{#1}\ifx\CF@compound@sep\@empty\def\CF@compound@sep{5em}\fi}
+\setcompoundsep{}
+
+\CF@def\setarrowlabelsep#1{\def\CF@arrow@labelsep{#1}\ifx\CF@arrow@labelsep\@empty\def\CF@arrow@labelsep{3pt}\fi}
+\setarrowlabelsep{}
+
+\CF@def\chemleft#1#2\chemright#3{%
+ \leavevmode
+ \begingroup
+ \setbox\z@\hbox{$\vcenter{\hbox{}}$}\edef\CF@delim@math@ht{\the\ht\z@}%
+ \setbox\z@\hbox{#2}\edef\CF@delim@dim{\the\dimexpr(\ht\z@+\dp\z@)/\tw@}%
+ \edef\CF@delim@shift{\the\dimexpr(\ht\z@-\dp\z@)/\tw@-\CF@delim@math@ht}%
+ \raise\CF@delim@shift\hbox{$\left#1\vrule height\CF@delim@dim depth\CF@delim@dim width\z@\right.$}\unhbox\z@
+ \raise\CF@delim@shift\hbox{$\left.\vrule height\CF@delim@dim depth\CF@delim@dim width\z@\right#3$}%
+ \endgroup
+}
+
+\CF@def\chemright#1{%
+ \immediate\write\CF@unused{Package \CF@package@name\space Warning: "\string\chemright\string#1"ignored! No \string\chemleft\space previously found.^^J}%
+}
+
+\CF@def\chemup#1#2\chemdown#3{%
+ \begingroup
+ \setbox\z@\hbox{\printatom{#2}}\edef\CF@delim@dim{\the\dimexpr\wd\z@/\tw@}%
+ \tikzpicture[every node/.style={inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline]%
+ \node[anchor=base west](chem@stuff){\unhbox\z@};%
+ \node[at=(chem@stuff.north),anchor=east,rotate=-90]{$\left#1\vrule height\CF@delim@dim depth\CF@delim@dim width\z@\right.$};%
+ \node[at=(chem@stuff.south),anchor=west,rotate=-90]{$\left.\vrule height\CF@delim@dim depth\CF@delim@dim width\z@\right#3$};%
+ \endtikzpicture
+ \endgroup
+}
+
+\CF@def\chemdown#1{%
+ \immediate\write\CF@unused{Package \CF@package@name\space Warning: "\string\chemdown\string#1" ignored! No \string\chemup\space previously found.^^J}%
+}
+
+\CF@def\CF@and{\futurelet\CF@toks@a\CF@and@i}
+
+\CF@def\CF@and@i{%
+ \ifx\CF@toks@a\bgroup
+ \expandafter\CF@and@ii
+ \else
+ \expandafter\CF@and@ii\expandafter{\expandafter}%
+ \fi
+}
+
+\CF@def\CF@and@ii#1{%
+ \CF@set@arrow@style#1,\@empty,\@empty\@nil\CF@signspace@ante\CF@signspace@post\CF@sign@vshift
+ \ifx\@empty\CF@signspace@ante\let\CF@signspace@ante\CF@signspace@ante@default\fi
+ \ifx\@empty\CF@signspace@post\let\CF@signspace@post\CF@signspace@post@default\fi
+ \ifx\@empty\CF@sign@vshift\let\CF@sign@vshift\CF@sign@vshift@default\fi
+ \raise\CF@sign@vshift\hbox{\kern\CF@signspace@ante$+$\kern\CF@signspace@post}%
+}
+
+\CF@def\setandsign#1{%
+ \CF@set@arrow@style#1,\@empty,\@empty\@nil\CF@signspace@ante@default\CF@signspace@post@default\CF@sign@vshift@default
+ \ifx\@empty\CF@signspace@ante@default\def\CF@signspace@ante@default{.5em}\fi
+ \ifx\@empty\CF@signspace@post@default\def\CF@signspace@post@default{.5em}\fi
+ \ifx\@empty\CF@sign@vshift@default\let\CF@sign@vshift@default\z@\fi
+}
+\setandsign{}
+
+\CF@def\schemestart{%
+ \xdef\CF@scheme@nest{\number\numexpr\CF@scheme@nest+\@ne}%
+ \@testopt\CF@schemestart@i{}%
+}
+
+\CF@def\CF@schemestart@i[#1]{%
+ \CF@set@arrow@style#1,\@empty,\@empty\@nil\CF@arrow@angle\CF@arrow@length\CF@arrow@style
+ \ifx\@empty\CF@arrow@angle\let\CF@arrow@angle\CF@default@arrow@angle\fi
+ \ifx\@empty\CF@arrow@length\let\CF@arrow@length\CF@default@arrow@length\fi
+ \ifx\@empty\CF@arrow@style
+ \let\CF@arrow@style\CF@default@arrow@style
+ \else
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\CF@arrow@style\expandafter\expandafter\expandafter
+ {\expandafter\CF@default@arrow@style\expandafter,\CF@arrow@style}% se rajoute apr\`es le style par d\'efaut
+ \fi
+ \ifCF@reac@debug
+ \tikzpicture[every node/.style={draw,anchor=base,inner sep=\z@,outer sep=\z@,minimum size=1.5pt},baseline,remember picture]%
+ \else
+ \tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline,remember picture]%
+ \fi
+ \let\+\CF@and
+ \let\arrow\CF@arrow
+ \let\schemestop\CF@schemestop
+ \let\subscheme\CF@subscheme
+ \@testopt{\CF@schemestart@ii[#1]}{text}%
+}
+
+\CF@def\CF@schemestart@ii[#1][#2]{%
+ \ifnum\CF@scheme@nest=\@ne% la commande n'est pas imbriqu\'ee ?
+ \CF@compound@cnt\z@
+ \fi
+ \edef\CF@current@nodename{c\number\CF@compound@cnt}%
+ \let\CF@next@nodename\@empty
+ \let\CF@next@nodestyle\@empty
+ \let\CF@direct@arrow@list\@empty
+ \ifCF@reac@debug
+ \node[fill,green](\CF@current@nodename){};%
+ \else
+ \node(\CF@current@nodename){};%
+ \fi
+ \def\CF@next@nodeanchor{#2}%
+ \ifx\CF@next@nodeanchor\@empty\def\CF@next@nodeanchor{text}\fi
+ \let\CF@compound\@empty
+ \CF@schemestart@iii
+}
+
+\CF@def\CF@schemestart@iii{%
+ \futurelet\CF@toks@a\CF@schemestart@v% va sentir le prochain token...
+}
+
+{\def\:{\CF@schemestart@iv}\expandafter}\expandafter\CF@def\: {\futurelet\CF@toks@a\CF@schemestart@v}
+
+\CF@def\CF@schemestart@v{% ... et l'examine :
+ \CF@if@firsttokin@i{\arrow\schemestop\merge}%
+ \relax
+ {\ifx\CF@toks@a\bgroup
+ \let\CF@next@action\CF@add@nextarg
+ \else
+ \ifx\CF@toks@a\@sptoken
+ \CF@add@tocs\CF@compound{ }%
+ \let\CF@next@action\CF@schemestart@iv
+ \else
+ \def\CF@next@action{\CF@add@tocs\CF@compound}%
+ \afterassignment\CF@schemestart@iii
+ \fi
+ \fi
+ \CF@next@action}%
+}
+
+\CF@def\CF@add@nextarg#1{\CF@add@tocs\CF@compound{{#1}}\CF@schemestart@iii}
+
+\CF@def\CF@display@compound#1#2{% #1 = nom et #2 = style
+ \unless\ifx\@empty\CF@compound
+ \global\advance\CF@compound@cnt\@ne
+ \ifx\CF@default@compound@style\@empty
+ \let\CF@current@nodestyle\@empty
+ \else
+ \expandafter\def\expandafter\CF@current@nodestyle\expandafter{\CF@default@compound@style,}%
+ \fi
+ \CF@add@tocs\CF@current@nodestyle{anchor=\CF@next@nodeanchor,at=(\CF@current@nodename)}%
+ \ifx\@empty#2\@empty
+ \unless\ifx\CF@next@nodestyle\@empty
+ \CF@expadd@tocs\CF@current@nodestyle{\expandafter,\CF@next@nodestyle}%
+ \fi
+ \else
+ \unless\ifx\CF@next@nodestyle\@empty
+ \immediate\write\CF@unused{Package \CF@package@name\space Warning: two styles for the same node, first style "\CF@next@nodestyle" ignored^^J}%
+ \fi
+ \CF@add@tocs\CF@current@nodestyle{,#2}%
+ \fi
+ \ifx\@empty#1\@empty
+ \edef\CF@tmp@str{\ifx\CF@next@nodename\@empty c\number\CF@compound@cnt\else\CF@next@nodename\fi}%
+ \else
+ \unless\ifx\CF@next@nodename\@empty
+ \immediate\write\CF@unused{Package \CF@package@name\space Warning: two names for the same node, first name "\CF@next@nodename" ignored^^J}%
+ \fi
+ \edef\CF@tmp@str{#1}%
+ \fi
+ \expandafter\node\expandafter[\CF@current@nodestyle](\CF@tmp@str){\CF@compound};%
+ \ifCF@reac@debug
+ \node[draw=none,anchor=270,at=(\CF@tmp@str.90),fill=green!60,overlay,opacity=0.5]{\scriptsize\bfseries\CF@tmp@str};%
+ \fi
+ \let\CF@current@nodename\CF@tmp@str
+ \fi
+}
+
+\CF@def\CF@schemestop{%
+ \CF@display@compound{}{}%
+ \CF@direct@arrow@list
+ \endtikzpicture
+ \xdef\CF@scheme@nest{\number\numexpr\CF@scheme@nest-\@ne}%
+}
+
+\CF@def\CF@analyse@arrowarg#1{\CF@analyse@arrowarg@i#1[]\@nil}
+
+\CF@def\CF@analyse@arrowarg@i#1[#2]#3\@nil{%
+ \CF@if@instr{#1}.{\CF@add@tocs\CF@tmp@str{#1[#2]}}{\CF@add@tocs\CF@tmp@str{#1.[#2]}}%
+}
+
+\CF@def\CF@arrow{%
+ \@ifnextchar(%
+ \CF@arrow@i
+ {\@ifnextchar\bgroup{\CF@arrow@ii(.[]--.[])}{\CF@arrow@ii(.[]--.[]){}}}%
+}
+
+\CF@def\CF@arrow@i(#1--#2){%
+ \def\CF@tmp@str{(}%
+ \CF@analyse@arrowarg{#1}%
+ \CF@add@tocs\CF@tmp@str{--}%
+ \CF@analyse@arrowarg{#2}%
+ \CF@add@tocs\CF@tmp@str)%
+ \@ifnextchar\bgroup{\expandafter\CF@arrow@ii\CF@tmp@str}{\expandafter\CF@arrow@ii\CF@tmp@str{}}%
+}
+
+\CF@def\CF@arrow@ii(#1.#2[#3]--#4.#5[#6])#7{%
+ \def\CF@current@arrowtype{#7}%
+ \ifx\CF@current@arrowtype\@empty\def\CF@current@arrowtype{->}\fi
+ \@testopt{\CF@arrow@iii(#1.#2[#3]--#4.#5[#6])}{}%
+}
+
+\CF@def\CF@arrow@iii(#1.#2[#3]--#4.#5[#6])[#7]{%
+ \def\CF@tmp@str{\CF@arrow@v(#1.#2[#3]--#4.#5[#6])}%
+ \CF@arrow@iv#7,\@empty,\@empty\@nil
+}
+
+\CF@def\CF@arrow@iv#1,#2,#3\@nil{%
+ \CF@add@tocs\CF@tmp@str{{#1}}%
+ \CF@expadd@tocs\CF@tmp@str{\expandafter{#2}}%
+ \expandafter\CF@expadd@tocs\expandafter\CF@tmp@str\expandafter{\expandafter\expandafter\expandafter{\expandafter\CF@sanitize@lastitem#3,\@empty\@nil}}%
+ \CF@tmp@str
+}
+
+% #1, #4 : nom des nodes #2, #5 : ancres des nodes #3, #6 : stryles des nodes
+% #7 : angle fl\`eche #8 : longueur fl\`eche #9 : style tikz de la fl\`eche
+\CF@def\CF@arrow@v(#1.#2[#3]--#4.#5[#6])#7#8#9{%
+ \let\CF@arrow@current@style\CF@arrow@style
+ \if\string @\expandafter\@car\detokenize{#1.}\@nil% "." au cas o\`u #1 est vide
+ \if\string @\expandafter\@car\detokenize{#4.}\@nil
+ \CF@expadd@tocs\CF@direct@arrow@list{\expandafter\CF@direct@arrow\expandafter{\CF@current@arrowtype}{#1}{#2}{#4}{#5}{#9}}%
+ \let\CF@next@action\CF@schemestart@iii
+ \else
+ \unless\ifx\CF@arrow@current@style\@empty\CF@add@tocs\CF@arrow@current@style,\fi
+ \ifx\@empty#9\@empty\else\CF@add@tocs\CF@arrow@current@style{#9,}\fi
+ \CF@display@compound{}{#3}%
+ \def\CF@next@nodename{#4}%
+ \expandafter\def\expandafter\CF@current@nodename\expandafter{\@gobble#1}%
+ \let\CF@arrow@start@name\CF@current@nodename
+ \let\CF@arrow@end@name\CF@next@nodename
+ \CF@arrow@vi{#7}{#8}{#2}{#5}%
+ \def\CF@next@nodestyle{#6}%
+ \fi
+ \else
+ \unless\ifx\CF@arrow@current@style\@empty\CF@add@tocs\CF@arrow@current@style,\fi
+ \ifx\@empty#9\@empty\else\CF@add@tocs\CF@arrow@current@style{#9,}\fi
+ \if\string @\expandafter\@car\detokenize{#2.}\@nil
+ \errmessage{Package \CF@package@name\space Error: syntax "(<name>--@<name>)" is not allowed}%
+ \else
+ \CF@display@compound{#1}{#3}%
+ \edef\CF@arrow@start@name{\ifx\@empty#1\@empty\CF@current@nodename\else#1\fi\ifx\@empty#2\@empty\else.#2\fi}%
+ \CF@arrow@vi{#7}{#8}{#2}{#5}%
+ \def\CF@next@nodename{#4}%
+ \def\CF@next@nodestyle{#6}%
+ \fi
+ \fi
+ \CF@arrow@gobspaces% mange les espaces puis ex\'ecute \CF@next@action
+}
+
+\CF@def\CF@arrow@gobspaces{\futurelet\CF@toks@a\CF@arrow@gobspaces@i}
+
+\CF@def\CF@arrow@gobspaces@i{%
+ \ifx\@sptoken\CF@toks@a
+ \expandafter\CF@arrow@gobspaces@ii
+ \else
+ \expandafter\CF@next@action
+ \fi
+}
+
+{\def\:{\CF@arrow@gobspaces@ii}\expandafter}\expandafter
+\def\: {\futurelet\CF@toks@a\CF@arrow@gobspaces@i}
+
+\CF@def\CF@arrow@vi#1#2#3#4{% #1=angle #2=longueur #3=ancre d\'epart #4=ancre arriv\'ee
+ \def\CF@next@action{\let\CF@compound\@empty\CF@schemestart@iii}%
+ \def\CF@arrow@current@angle{#1}\ifx\@empty\CF@arrow@current@angle\let\CF@arrow@current@angle\CF@arrow@angle\fi
+ \def\CF@current@arrow@length{#2}\ifx\@empty\CF@current@arrow@length\let\CF@current@arrow@length\CF@arrow@length\fi
+ \node[at=(\CF@current@nodename.\ifx\@empty#3\@empty\CF@arrow@current@angle\else#3\fi),shift=(\CF@arrow@current@angle:\CF@current@arrow@length*\CF@compound@sep),cyan,fill](end@arrow@i){};%
+ \edef\CF@arrow@end@name{end@arrow@i\ifx\@empty#4\@empty\else.4\fi}%
+ \ifCF@reac@debug
+ \node[at=(\CF@current@nodename.\ifx\@empty#3\@empty\CF@arrow@current@angle\else#3\fi),shift=(\CF@arrow@current@angle:\CF@arrow@offset),red,fill](start@arrow){};%
+ \node[at=(\CF@current@nodename.\ifx\@empty#3\@empty\CF@arrow@current@angle\else#3\fi),shift=(\CF@arrow@current@angle:\CF@current@arrow@length*\CF@compound@sep-\CF@arrow@offset),red,fill](end@arrow){};%
+ \else
+ \node[at=(\CF@current@nodename.\ifx\@empty#3\@empty\CF@arrow@current@angle\else#3\fi),shift=(\CF@arrow@current@angle:\CF@arrow@offset)](start@arrow){};%
+ \node[at=(\CF@current@nodename.\ifx\@empty#3\@empty\CF@arrow@current@angle\else#3\fi),shift=(\CF@arrow@current@angle:\CF@current@arrow@length*\CF@compound@sep-\CF@arrow@offset)](end@arrow){};%
+ \fi
+ \def\CF@arrow@start@node{start@arrow}\def\CF@arrow@end@node{end@arrow}%
+ \csname\expandafter\CF@grab@arrow@name\CF@current@arrowtype[\@nil\expandafter\expandafter\expandafter\endcsname
+ \expandafter\CF@grab@arrow@args\CF@current@arrowtype[]\@nil[][][][][][][][]\@nil
+ \def\CF@current@nodename{end@arrow@i}%
+ \edef\CF@next@nodeanchor{\ifx\@empty#4\@empty180+\CF@arrow@current@angle\else#4\fi}%
+}
+
+% trace un fl\`eche initi\'ee par (@nom--@nom)
+% #1=type de fl\`eche #2=nom depart #3=ancre d\'epart #4=nom arriv\'ee #5=ancre arriv\'ee #6=style fl\`eche
+\CF@def\CF@direct@arrow#1#2#3#4#5#6{%
+ \path[sloped,allow upside down](\@gobble#2\ifx\@empty#3\@empty\else.#3\fi)--(\@gobble#4\ifx\@empty#5\@empty\else.#5\fi)%
+ coordinate[pos=0,xshift=\CF@arrow@offset](start@direct@arrow)%
+ coordinate[pos=1,xshift=-\CF@arrow@offset](end@direct@arrow);%
+ \def\CF@arrow@start@node{start@direct@arrow}%
+ \def\CF@arrow@end@node{end@direct@arrow}%
+ \expandafter\def\expandafter\CF@arrow@start@name\expandafter{\@gobble#2}%
+ \expandafter\def\expandafter\CF@arrow@end@name\expandafter{\@gobble#4}%
+ \def\CF@arrow@current@style{#6}%
+ \csname\CF@grab@arrow@name#1[]\@nil\expandafter\endcsname\CF@grab@arrow@args#1[]\@nil[][][][][][][][]\@nil
+}
+
+\CF@def\CF@merge@grab@chardir#1[#2][#3]#4\@nil{%
+ \expandafter\futurelet\expandafter\CF@toks@a\expandafter\CF@gobble@tonil\@car#1>\@nil\@nil
+ \ifx>\CF@toks@a\def\CF@merge@angle{0}\def\CF@merge@extreme{xmax}\def\CF@merge@sign{+}\else
+ \ifx<\CF@toks@a\def\CF@merge@angle{180}\def\CF@merge@extreme{xmin}\def\CF@merge@sign{-}\else
+ \ifx^\CF@toks@a\def\CF@merge@angle{90}\def\CF@merge@extreme{ymax}\def\CF@merge@sign{+}\else
+ \ifx v\CF@toks@a\def\CF@merge@angle{-90}\def\CF@merge@extreme{ymin}\def\CF@merge@sign{-}%
+ \fi\fi\fi\fi
+ \def\CF@merge@labelup{#2}\def\CF@merge@labeldo{#3}%
+}
+
+\CF@def\merge#1({%
+ \CF@merge@grab@chardir#1[][]\@nil
+ \CF@merge@i(}
+
+\CF@def\CF@merge@i#1--(#2){\@testopt{\CF@merge@ii#1--(#2)}{}}
+
+\CF@def\CF@merge@ii#1--(#2)[#3]{%
+ \CF@display@compound{}{}%
+ \CF@parse@mergeopt#3,\@empty,\@empty,\@empty\@nil
+ \def\CF@merge@xmax{-16383.99999pt}\let\CF@merge@ymax\CF@merge@xmax
+ \def\CF@merge@xmin{16383.99999pt}\let\CF@merge@ymin\CF@merge@xmin
+ \CF@merge@parse@nodelist#1(\relax)% calcule les maxi des positions
+ \pgfmathparse{\csname CF@merge@\CF@merge@extreme\endcsname\CF@merge@sign\CF@merge@fromcoeff*\CF@compound@sep}%
+ \let\CF@merge@extreme@result\pgfmathresult
+ \CF@merge@iii#1(\relax)% trace les lignes entre les noeuds pr\'ec\'edents et la ligne de jonction
+ \expandafter\def\expandafter\CF@tmp@str\expandafter{\expandafter[\CF@merge@style,shorten <=0,shorten >=0]}%
+ \if x\expandafter\@car\CF@merge@extreme\@nil
+ \CF@add@tocs\CF@tmp@str{(\CF@merge@extreme@result pt,\CF@merge@ymax)--(\CF@merge@extreme@result pt,\CF@merge@ymin)}%
+ \else
+ \CF@add@tocs\CF@tmp@str{(\CF@merge@xmin,\CF@merge@extreme@result pt)--(\CF@merge@xmax,\CF@merge@extreme@result pt)}%
+ \fi
+ \expandafter\draw\CF@tmp@str node[pos=\CF@merge@splitcoeff](merge@point){}% trace la ligne de jonction
+ node[at=(merge@point),shift=(\CF@merge@angle:\CF@compound@sep*\CF@merge@tocoeff-\CF@arrow@offset)](end@merge){}%
+ node[at=(merge@point),shift=(\CF@merge@angle:\CF@compound@sep*\CF@merge@tocoeff)](end@merge@i){};%
+ \let\CF@arrow@current@angle\CF@merge@angle
+ \expandafter\draw\expandafter[\CF@merge@style,shorten <=0,-CF@full](merge@point)--(end@merge)%
+ \expandafter\CF@arrow@display@label@i\expandafter{\CF@merge@labelup}{.5}+\expandafter\CF@arrow@display@label@i\expandafter{\CF@merge@labeldo}{.5}-;%
+ \def\CF@current@nodename{end@merge@i}%
+ \let\CF@tmp@str\@empty
+ \CF@analyse@arrowarg{#2}%
+ \expandafter\CF@merge@iv\CF@tmp@str\@nil
+}
+
+\CF@def\CF@merge@iii(#1){%
+ \if\relax\expandafter\noexpand\@car#1\@nil
+ \else
+ \CF@if@stop{#1}%
+ {\edef\merge@current@nodename{\CF@before@stop#1\@nil}\edef\merge@current@anchor{\CF@after@stop#1\@nil}}%
+ {\def\merge@current@nodename{#1}\let\merge@current@anchor\CF@merge@angle}%
+ \if x\expandafter\@car\CF@merge@extreme\@nil
+ \pgfextracty\CF@dim{\pgfpointanchor\merge@current@nodename\merge@current@anchor}%
+ \expandafter\draw\expandafter[\CF@merge@style,shorten >=0]([shift=(\CF@merge@angle:\CF@arrow@offset)]\merge@current@nodename.\merge@current@anchor)--(\CF@merge@extreme@result pt,\CF@dim);%
+ \else
+ \pgfextractx\CF@dim{\pgfpointanchor\merge@current@nodename\merge@current@anchor}%
+ \expandafter\draw\expandafter[\CF@merge@style,shorten >=0]([shift=(\CF@merge@angle:\CF@arrow@offset)]\merge@current@nodename.\merge@current@anchor)--(\CF@dim,\CF@merge@extreme@result pt);%
+ \fi
+ \expandafter\CF@merge@iii
+ \fi
+}
+
+\CF@def\CF@merge@iv#1.#2[#3]\@nil{%
+ \def\CF@next@nodename{#1}%
+ \edef\CF@next@nodeanchor{\ifx\@empty#2\@empty180+\CF@merge@angle\else#2\fi}%
+ \def\CF@next@nodestyle{#3}%
+ \let\CF@compound\@empty
+ \CF@schemestart@iii
+}
+
+\CF@def\CF@parse@mergeopt#1,#2,#3,#4\@nil{%
+ \def\CF@merge@fromcoeff{#1}\ifx\@empty\CF@merge@fromcoeff\def\CF@merge@fromcoeff{0.5}\fi
+ \expandafter\def\expandafter\CF@merge@tocoeff\expandafter{#2}\ifx\@empty\CF@merge@tocoeff\def\CF@merge@tocoeff{0.5}\fi
+ \expandafter\def\expandafter\CF@merge@splitcoeff\expandafter{#3}\ifx\@empty\CF@merge@splitcoeff\def\CF@merge@splitcoeff{0.5}\fi
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\CF@merge@style\expandafter\expandafter\expandafter{\expandafter\CF@sanitize@lastitem#4,\@empty\@nil}%
+}
+
+\CF@def\CF@merge@parse@nodelist(#1){%
+ \if\relax\expandafter\noexpand\@car#1\@nil
+ \else
+ \CF@if@stop{#1}%
+ {\edef\merge@current@nodename{\CF@before@stop#1\@nil}\edef\merge@current@anchor{\CF@after@stop#1\@nil}}%
+ {\def\merge@current@nodename{#1}\let\merge@current@anchor\CF@merge@angle}%
+ \pgfextractx\CF@dim{\pgfpointanchor\merge@current@nodename\merge@current@anchor}%
+ \ifdim\CF@dim>\CF@merge@xmax\edef\CF@merge@xmax{\the\CF@dim}\fi
+ \ifdim\CF@dim<\CF@merge@xmin\edef\CF@merge@xmin{\the\CF@dim}\fi
+ \pgfextracty\CF@dim{\pgfpointanchor\merge@current@nodename\merge@current@anchor}%
+ \ifdim\CF@dim>\CF@merge@ymax\edef\CF@merge@ymax{\the\CF@dim}\fi
+ \ifdim\CF@dim<\CF@merge@ymin\edef\CF@merge@ymin{\the\CF@dim}\fi
+ \expandafter\CF@merge@parse@nodelist
+ \fi
+}
+
+\CF@def\CF@grab@arrow@name#1[#2\@nil{#1}
+\CF@def\CF@grab@arrow@args#1[#2\@nil{[#2}
+
+\CF@def\CF@make@parameter@text#1{%
+ \toks\z@{}%
+ \CF@cnt@groupnumber#1\relax
+ \CF@make@parameter@text@i1%
+}
+
+\CF@def\CF@make@parameter@text@i#1{%
+ \unless\ifnum#1>\CF@cnt@groupnumber
+ \toks\z@\expandafter{\the\toks\z@[###1]}%
+ \expandafter\CF@make@parameter@text@i\expandafter{\number\numexpr#1+1\expandafter}%
+ \fi
+}
+
+% #1 est le nombre d'arguments optionnels, #2 est le nom et #3 le code
+\CF@def\definearrow#1#2#3{%
+ \begingroup
+ \CF@make@parameter@text{#1}%
+ \expandafter\endgroup
+ \expandafter\def\csname\detokenize{#2}\expandafter\endcsname\the\toks\z@{#3\CF@gobble@tonil}%
+}
+
+\CF@def\CF@if@stop#1{\CF@if@stop@i#1.\@nil}
+\CF@def\CF@if@stop@i#1.#2\@nil{\ifx\@empty#2\@empty\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}
+\CF@def\CF@before@stop#1.#2\@nil{#1}
+\CF@def\CF@after@stop#1.#2\@nil{#2}
+
+\CF@def\CF@rotate@node*#1#2\@nil{\CF@if@stop{#1}{\CF@before@stop#1\@nil}{#1}}
+\CF@def\CF@anchor@node*#1#2\@nil#3{\CF@if@stop{#1}{\CF@after@stop#1\@nil}{\CF@arrow@current@angle-#390-#1}}
+
+% #1 = label #2 = position #3 = + ou - (au dessus ou au dessous) #4 : nom du noeud de d\'epart
+% #5 = label #6 = position #7 = + ou - (au dessus ou au dessous) #8 : nom du noeud de fin
+\CF@def\CF@arrow@display@label#1#2#3#4#5#6#7#8{%
+ \ifx\@empty#1#5\@empty\else
+ \path(#4)--(#8)\CF@arrow@display@label@i{#1}{#2}{#3}\CF@arrow@display@label@i{#5}{#6}{#7};%
+ \fi
+}
+
+\CF@def\CF@arrow@display@label@i#1#2#3{%
+ \ifx\@empty#1\@empty\else
+ \if*\expandafter\@car\detokenize{#1}\@nil
+ \ifCF@reac@debug
+ node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep,draw,fill,cyan](shifted@node){}%
+ node[draw,rotate=\CF@rotate@node#1\@nil,anchor=\CF@anchor@node#1\@nil#3,at=(shifted@node)]{\expandafter\@gobble\@gobble#1}%
+ \else
+ node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep](shifted@node){}%
+ node[rotate=\CF@rotate@node#1\@nil,anchor=\CF@anchor@node#1\@nil#3,at=(shifted@node)]{\expandafter\@gobble\@gobble#1}%
+ \fi
+ \else
+ \ifCF@reac@debug
+ node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep,draw,fill,cyan](shifted@node){}%
+ node[draw,pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep]{#1}%
+ \else
+ node[pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep]{#1}%
+ \fi
+ \fi
+ \fi
+}
+
+% pose des noeuds d\'ecal\'es de la dimension #1 \`a (\CF@arrow@start@node) et (\CF@arrow@end@node)
+\CF@def\CF@arrow@shift@nodes#1{%
+ \unless\ifdim\ifx\@empty#1\@empty\z@\else#1\fi=\z@
+ \edef\CF@tmp@str{%
+ \noexpand\path(\CF@arrow@start@node)--(\CF@arrow@end@node)%
+ node[pos=0,sloped,yshift=#1](\CF@arrow@start@node1){}node[pos=1,sloped,yshift=#1](\CF@arrow@end@node1){};}%
+ \CF@tmp@str
+ \edef\CF@arrow@start@node{\CF@arrow@start@node1}\edef\CF@arrow@end@node{\CF@arrow@end@node1}%
+ \fi
+}
+
+\definearrow3{->}{%
+ \CF@arrow@shift@nodes{#3}%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full](\CF@arrow@start@node)--(\CF@arrow@end@node);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
+}
+
+\definearrow3{<-}{%
+ \CF@arrow@shift@nodes{#3}%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,CF@full-](\CF@arrow@start@node)--(\CF@arrow@end@node);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
+}
+
+\definearrow5{-/>}{%
+ \CF@arrow@shift@nodes{#3}%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full](\CF@arrow@start@node)--(\CF@arrow@end@node)%
+ coordinate[midway,shift=(\CF@arrow@current@angle:-1pt)](midway@i)%
+ coordinate[midway,shift=(\CF@arrow@current@angle:1pt)](midway@ii)%
+ coordinate[at=(midway@i),shift=(\ifx\@empty#4\@empty225\else#4+180\fi+\CF@arrow@current@angle:\ifx\@empty#5\@empty5pt\else#5\fi)](line@start)%
+ coordinate[at=(midway@i),shift=(\ifx\@empty#4\@empty45\else#4\fi+\CF@arrow@current@angle:\ifx\@empty#5\@empty5pt\else#5\fi)](line@end)%
+ coordinate[at=(midway@ii),shift=(\ifx\@empty#4\@empty225\else#4+180\fi+\CF@arrow@current@angle:\ifx\@empty#5\@empty5pt\else#5\fi)](line@start@i)%
+ coordinate[at=(midway@ii),shift=(\ifx\@empty#4\@empty45\else#4\fi+\CF@arrow@current@angle:\ifx\@empty#5\@empty5pt\else#5\fi)](line@end@i);
+ \draw(line@start)--(line@end);%
+ \draw(line@start@i)--(line@end@i);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
+}
+
+\definearrow3{<->}{%
+ \CF@arrow@shift@nodes{#3}%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,CF@full-CF@full](\CF@arrow@start@node)--(\CF@arrow@end@node);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
+}
+
+\definearrow3{<=>}{%
+ \CF@arrow@shift@nodes{#3}%
+ \edef\CF@tmp@str{%
+ \noexpand\path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
+ node[pos=0,sloped,yshift=1pt](\CF@arrow@start@node @u0){}%
+ node[pos=0,sloped,yshift=-1pt](\CF@arrow@start@node @d0){}%
+ node[pos=1,sloped,yshift=1pt](\CF@arrow@start@node @u1){}%
+ node[pos=1,sloped,yshift=-1pt](\CF@arrow@start@node @d1){};%
+ }%
+ \CF@tmp@str
+ \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@half](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,CF@half-](\CF@arrow@start@node @d0)--(\CF@arrow@start@node @d1);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node%
+}
+
+\definearrow3{<->>}{%
+ \CF@arrow@shift@nodes{#3}%
+ \edef\CF@tmp@str{%
+ \noexpand\path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
+ node[pos=0,sloped,yshift=1pt](\CF@arrow@start@node @u0){}%
+ node[pos=0.2,sloped,yshift=-1pt](\CF@arrow@start@node @d0){}%
+ node[pos=1,sloped,yshift=1pt](\CF@arrow@start@node @u1){}%
+ node[pos=0.8,sloped,yshift=-1pt](\CF@arrow@start@node @d1){};%
+ }%
+ \CF@tmp@str
+ \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@half](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,CF@half-](\CF@arrow@start@node @d0)--(\CF@arrow@start@node @d1);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node%
+}
+
+\definearrow3{<<->}{%
+ \edef\CF@tmp@str{%
+ \noexpand\path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)%
+ node[pos=0.2,sloped,yshift=1pt](\CF@arrow@start@node @u0){}%
+ node[pos=0,sloped,yshift=-1pt](\CF@arrow@start@node @d0){}%
+ node[pos=0.8,sloped,yshift=1pt](\CF@arrow@start@node @u1){}%
+ node[pos=1,sloped,yshift=-1pt](\CF@arrow@start@node @d1){};%
+ }%
+ \CF@tmp@str
+ \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@half](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,CF@half-](\CF@arrow@start@node @d0)--(\CF@arrow@start@node @d1);%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
+}
+
+\definearrow30{%
+ \CF@arrow@shift@nodes{#3}%
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node}
+
+\definearrow5{-U>}{% #4=coeff du rayon de l'arc de cercle #5=1/2 angle
+ \CF@arrow@shift@nodes{#3}%
+ \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full](\CF@arrow@start@node)--(\CF@arrow@end@node)node[midway](Uarrow@arctangent){};%
+ \edef\CF@tmp@str{\ifx\@empty#1\@empty[draw=none]\fi}%
+ \expandafter\draw\CF@tmp@str (Uarrow@arctangent)%
+ arc[radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#4\@empty0.333\else#4\fi,start angle=\CF@arrow@current@angle-90,%
+ delta angle=-\ifx\@empty#5\@empty60\else#5\fi]node(Uarrow@start){};
+ \edef\CF@tmp@str{[\ifx\@empty#2\@empty draw=none,\fi-CF@full]}%
+ \expandafter\draw\CF@tmp@str (Uarrow@arctangent)%
+ arc[radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#4\@empty0.333\else#4\fi,start angle=\CF@arrow@current@angle-90,%
+ delta angle=\ifx\@empty#5\@empty60\else#5\fi]node(Uarrow@end){};
+ \edef\CF@tmp@str{\if\string-\expandafter\@car\detokenize{#4.}\@nil-\else+\fi}%
+ \CF@arrow@display@label{#1}{0}\CF@tmp@str{Uarrow@start}{#2}{1}\CF@tmp@str{Uarrow@end}%
+}
+
+\pgfarrowsdeclare{CF@half}{CF@half}%
+ {\CF@arrow@size\dimexpr2.5pt+2.5\pgflinewidth\relax
+ \pgfarrowsleftextend{-\CF@arrow@size}\pgfarrowsrightextend{.5\pgflinewidth}}%
+ {\CF@arrow@size\dimexpr2.5pt+2.5\pgflinewidth\relax
+ \pgfsetdash{}\z@\pgfsetroundjoin\pgfsetroundcap
+ \pgfpathmoveto{\pgfpoint\z@\z@}%
+ \pgfpathlineto{\pgfpoint{-\CF@arrow@size}{.5\CF@arrow@size}}%
+ \pgfpathlineto{\pgfpoint{-.5\CF@arrow@size}\z@}%
+ \pgfpathlineto{\pgfpoint\z@\z@}%
+ \pgfusepathqfillstroke}
+
+\pgfarrowsdeclare{CF@full}{CF@full}%
+ {\CF@arrow@size\dimexpr2.5pt+2.5\pgflinewidth\relax
+ \pgfarrowsleftextend{-\CF@arrow@size}\pgfarrowsrightextend{.5\pgflinewidth}}%
+ {\CF@arrow@size\dimexpr2.5pt+2.5\pgflinewidth\relax
+ \pgfsetdash{}\z@\pgfsetroundjoin\pgfsetroundcap
+ \pgfpathmoveto{\pgfpoint\z@\z@}%
+ \pgfpathlineto{\pgfpoint{-\CF@arrow@size}{.5\CF@arrow@size}}%
+ \pgfpathlineto{\pgfpoint{-.5\CF@arrow@size}\z@}%
+ \pgfpathlineto{\pgfpoint{-\CF@arrow@size}{-.5\CF@arrow@size}}%
+ \pgfpathlineto{\pgfpoint\z@\z@}%
+ \pgfusepathqfillstroke}
+
\CF@savedcatcode
\endinput
@@ -1492,4 +2111,12 @@ v0.4b 2011/04/24
liaisons.
- correction de l'affichage incorrect des doubles liaisons dans
les cycles apr\`es les commandes \hflipnext et \vflipnext
- - correction d'un bug lorsqu'un alias commence une mol\'ecule \ No newline at end of file
+ - correction d'un bug lorsqu'un alias commence une mol\'ecule
+----------------------------------------------------------------------
+v1.0 2011/06/15
+ - les sch\'emas r\'eactionnels sont d\'esormais disponibles.
+ - \Chemabove et \Chembelow modifient la boite englobante.
+ - \Lewis modifie la boite englobante
+ - les macros \chemleft, \chemright, \chemup et \chemdown
+ affichent des d\'elimiteurs extensibles \`a gauche, \`a droite,
+ au dessus et au dessous d'un mat\'eriel. \ No newline at end of file
diff --git a/Master/texmf-dist/tex/generic/chemfig/t-chemfig.tex b/Master/texmf-dist/tex/generic/chemfig/t-chemfig.tex
index 8f7d11e5ad7..f0299a0abde 100644
--- a/Master/texmf-dist/tex/generic/chemfig/t-chemfig.tex
+++ b/Master/texmf-dist/tex/generic/chemfig/t-chemfig.tex
@@ -1,9 +1,9 @@
% __________________________________________________________________
% | |
% | |
-% | chemfig v0.4b |
+% | chemfig v1.0 |
% | |
-% | April 24, 2011 |
+% | June 15, 2011 |
% | |
% |__________________________________________________________________|
%