From 7ec5124fc8058384ae1dfbee47f1bd841a390cdc Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 7 Aug 2011 23:38:47 +0000 Subject: chemfig 1.0 (14jun11) git-svn-id: svn://tug.org/texlive/trunk@23450 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/generic/chemfig/chemfig.sty | 6 +- Master/texmf-dist/tex/generic/chemfig/chemfig.tex | 807 ++++++++++++++++++--- .../texmf-dist/tex/generic/chemfig/t-chemfig.tex | 4 +- 3 files changed, 722 insertions(+), 95 deletions(-) (limited to 'Master/texmf-dist/tex/generic/chemfig') 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 "(--@)" 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 | % | | % |__________________________________________________________________| % -- cgit v1.2.3