summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/chemfig
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-10-08 20:40:39 +0000
committerKarl Berry <karl@freefriends.org>2015-10-08 20:40:39 +0000
commit2e95fbc2467541c9c44c6d25c9d3b5fe4d0f5538 (patch)
tree2464b01528b0f0db9984c1a3e82887e1d0eb6524 /Master/texmf-dist/tex/generic/chemfig
parentbf01a8d11890c41ee97bc5f393ec8fa7a27de33d (diff)
chemfig (8oct15)
git-svn-id: svn://tug.org/texlive/trunk@38589 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/chemfig')
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/chemfig.sty4
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/chemfig.tex1720
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/t-chemfig.tex4
3 files changed, 885 insertions, 843 deletions
diff --git a/Master/texmf-dist/tex/generic/chemfig/chemfig.sty b/Master/texmf-dist/tex/generic/chemfig/chemfig.sty
index dda7d7f4e13..3f4466eadcf 100644
--- a/Master/texmf-dist/tex/generic/chemfig/chemfig.sty
+++ b/Master/texmf-dist/tex/generic/chemfig/chemfig.sty
@@ -1,9 +1,9 @@
% __________________________________________________________________
% | |
% | |
-% | chemfig v1.1a |
+% | chemfig v1.2 |
% | |
-% | 23 february 2015 |
+% | 8 october 2015 |
% | |
% |__________________________________________________________________|
%
diff --git a/Master/texmf-dist/tex/generic/chemfig/chemfig.tex b/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
index a4769ad330b..6a157191786 100644
--- a/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
+++ b/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
@@ -1,9 +1,9 @@
% __________________________________________________________________
% | |
% | |
-% | chemfig v1.1a |
+% | chemfig v1.2 |
% | |
-% | 23 february 2015 |
+% | 8 october 2015 |
% | |
% |__________________________________________________________________|
%
@@ -65,7 +65,7 @@
\endgroup
\else
\endgroup
- \errmessage{Package chemfig Error: you are not using the eTeX engine, chemfig cannot work and is not loaded.}%
+ \errmessage{Package chemfig Error: you are not using an eTeX engine, chemfig cannot work.}%
\expandafter\endinput
\fi
@@ -76,10 +76,10 @@
\def#1%
}
-\CF@def\CF@ver {1.1a}
-\CF@def\CF@date {2015/02/23}
-\CF@def\CF@fr@date {23 f\'evrier 2015}
-\CF@def\CF@en@date {23 february 2015}
+\CF@def\CF@ver {1.2}
+\CF@def\CF@date {2015/10/08}
+\CF@def\CF@fr@date {8 octobre 2015}
+\CF@def\CF@en@date {8 october 2015}
\CF@def\CF@package@name{chemfig}
\expandafter\ifx\csname @latexerr\endcsname\relax% on n'utilise pas LaTeX ?
@@ -118,11 +118,15 @@
\def\@empty{}
\def\space{ }
\CF@def\printatom#1{\ifmmode\rm#1\else$\rm#1$\fi}% \printatom pour TeX et ConTeXt
+ \def\CF@begin@tikzpicture{\tikzpicture}%
+ \def\CF@end@tikzpicture{\endtikzpicture}%
\else% fin des d\'efinitions LaTeX
\CF@def\printatom#1{\ensuremath{\mathrm{#1}}}% \printatom pour LaTeX.
+ \def\CF@begin@tikzpicture{\begin{tikzpicture}}%
+ \def\CF@end@tikzpicture{\end{tikzpicture}}%
\fi
-\CF@def\CF@ifx#1#2{\ifx#1#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\usetikzlibrary{arrows.meta}
\newcount\CF@cnt@atomingroup
\newcount\CF@cnt@groupnumber
@@ -135,9 +139,6 @@
\newif\ifCF@name@dp@adjust
\newif\ifCF@macrofixedbondlength
\newif\ifCF@globalfixedbondlength
-\def\enablefixedbondlength{\global\CF@globalfixedbondlengthtrue}
-\def\disablefixedbondlength{\global\CF@globalfixedbondlengthfalse}
-\disablefixedbondlength
\newdimen\CF@dim
@@ -146,6 +147,10 @@
\newbox\CF@box@boxb
\newbox\CF@stuff@box
+\def\enablefixedbondlength{\global\CF@globalfixedbondlengthtrue}
+\def\disablefixedbondlength{\global\CF@globalfixedbondlengthfalse}
+\disablefixedbondlength
+
\newwrite\CF@unused
\CF@def\CF@sanitize@catcode{%
@@ -155,12 +160,100 @@
\@makeother\|\@makeother\#\@makeother\@%
}
+\CF@def\CF@if@integer#1{%
+ \begingroup
+ \afterassignment\CF@after@integer
+ \CF@cnt@cycle0#1\relax
+}
+
+\CF@def\CF@after@integer#1\relax{%
+ \endgroup
+ \CF@ifempty{#1}%
+}
+
+\CF@def\CF@ifx#1#2{\ifx#1#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+
+\CF@def\CF@ifempty#1{\ifx\@empty#1\@empty\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+
+\CF@def\CF@doifempty#1{\ifx\@empty#1\@empty\expandafter\@firstofone\else\expandafter\@gobble\fi}
+
+\CF@def\CF@doifnotempty#1{\ifx\@empty#1\@empty\expandafter\@gobble\else\expandafter\@firstofone\fi}
+
+\CF@def\CF@gobtonil#1\@nil{}
+
+\edef\CF@hash{\string#}
+
+\edef\CF@arobas{\string @}
+
+\CF@def\CF@three@ea{\expandafter\expandafter\expandafter}
+
+\CF@def\CF@exp@macroarg#1#2{\expandafter#1\expandafter{#2}}
+
+\CF@def\CF@twoexp@macroarg#1#2{\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{#2}}
+
+\CF@def\CF@exp@twomacroargs#1#2#3{\CF@exp@second{\CF@exp@macroarg#1{#2}}{#3}}
+
+\CF@def\CF@exp@threemacroargs#1#2#3#4{\CF@exp@second{\CF@exp@twomacroargs#1{#2}{#3}}{#4}}
+
+\CF@def\CF@swap@arg#1#2{#2{#1}}
+
+\CF@def\CF@exp@second#1#2{\CF@exp@macroarg\CF@swap@arg{#2}{#1}}% \CF@exp@second<{arg1>}{<arg2>} donne "<arg1>{*<arg2>}"
+
+\CF@def\CF@twoexp@second#1#2{\CF@twoexp@macroarg\CF@swap@arg{#2}{#1}}% \CF@twoexp@second{<arg1>}{<arg2>} donne "<arg1>{**<arg2>}"
+
+\CF@def\CF@swap@unarg#1#2{#2#1}
+
+\CF@def\CF@exp@after#1#2{\CF@exp@macroarg\CF@swap@unarg{#2}{#1}}% \CF@exp@after{<arg1>}{<arg2>} donne "<arg1>*<arg2>"
+
+\CF@def\CF@twoexp@after#1#2{\CF@twoexp@macroarg\CF@swap@unarg{#2}{#1}}% \CF@twoexp@after{<arg1>}{<arg2>} donne "<arg1>**<arg2>"
+
+\CF@def\CF@edef@second#1#2{%
+ \edef\CF@tmp@str{#2}%
+ \CF@exp@macroarg\CF@swap@unarg{\CF@tmp@str}{#1}%
+}
+
+\CF@def\CF@add@tocs#1#2{\CF@exp@second{\def#1}{#1#2}}
+
+\CF@def\CF@expadd@tocs#1#2{\CF@exp@second{\CF@add@tocs#1}{#2}}
+
+\CF@def\CF@edefadd@tocs#1#2{%
+ \edef\CF@tmp@str{#2}%
+ \CF@exp@second{\CF@add@tocs#1}{\CF@tmp@str}%
+}
+
+\CF@def\CF@if@firsttokmatch#1#2{% est ce que #1 et #2 commencent par les m\^emes tokens ?
+ \futurelet\CF@toks@a\CF@gobtonil#1\relax\@nil
+ \futurelet\CF@toks@b\CF@gobtonil#2\relax\@nil
+ \CF@ifx\CF@toks@a\CF@toks@b
+}
+
+\CF@def\CF@if@firsttokin#1{% teste si le token qui commence #1 appartient aux tokens mis dans #2
+ \futurelet\CF@toks@a\CF@gobtonil#1\relax\@nil
+ \CF@if@firsttokin@a
+}
+
+\CF@def\CF@if@firsttokin@a#1{%
+ \CF@ifempty{#1}
+ \@secondoftwo
+ {\futurelet\CF@toks@b\CF@gobtonil#1\relax\@nil
+ \CF@ifx\CF@toks@a\CF@toks@b
+ \@firstoftwo
+ {\CF@exp@macroarg\CF@if@firsttokin@a{\@gobble#1}}%
+ }%
+}
+
+\CF@def\CF@if@instr#1#2{%
+ \def\CF@if@instr@a##1#2##2\@nil{\ifx\@empty##2\@empty\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
+ \CF@if@instr@a#1\@@nil#2\@nil
+}
+
+\CF@def\CF@after@space#1 #2\@nil{#2}
+
\CF@def\CF@node@content{\expandafter\printatom\expandafter{\csname atom@\number\CF@cnt@atomnumber\endcsname\CF@node@strut}}
\CF@def\chemskipalign{%
- \ifx\CF@bond@outcontentsaved\@empty% sauf si un \chemskipalign a \'et\'e fait \`a l'atome pr\'ec\'edent
- \global\let\CF@bond@outcontentsaved\CF@bond@outcontent% sauvegarder l'atome d'o\`u vient la liaison
- \fi
+ \CF@doifempty\CF@bond@outcontentsaved% sauf si un \chemskipalign a \'et\'e fait \`a l'atome pr\'ec\'edent
+ {\global\let\CF@bond@outcontentsaved\CF@bond@outcontent}% sauvegarder l'atome d'o\`u vient la liaison
\let\CF@node@strut\@empty
}
@@ -170,8 +263,9 @@
\CF@def\setcrambond#1#2#3{%
\def\CF@cram@basewidth{#1}%
- \ifx\@empty#2\@empty\def\CF@cram@dashlength{1pt}\else\def\CF@cram@dashlength{#2}\fi
- \ifx\@empty#3\@empty\def\CF@cram@dashsep{2pt}\else\def\CF@cram@dashsep{#3}\fi}
+ \CF@ifempty{#2}{\def\CF@cram@dashlength{1pt}}{\def\CF@cram@dashlength{#2}}%
+ \CF@ifempty{#3}{\def\CF@cram@dashsep{2pt}}{\def\CF@cram@dashsep{#3}}%
+}
\setcrambond{}{}{}
\CF@def\setatomsep{\def\CF@atom@sep}% espacement des atomes li\'es
@@ -183,6 +277,9 @@
\CF@def\setdoublesep{\def\CF@double@sep}
\setdoublesep{2pt}
+\CF@def\setangleincrement{\def\CF@angle@increment}
+\setangleincrement{45}% valeur par d\'efaut
+
\CF@def\definesubmol{\CF@definesubmoltrue\CF@def@submol}
\CF@def\redefinesubmol{\CF@definesubmolfalse\CF@def@submol}
@@ -195,12 +292,12 @@
\CF@def\CF@test@nxttok{%
\if[\noexpand\CF@toks@a\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
- {\expandafter\CF@grab@optalias\expandafter{\CF@tmp@str}}%
- {\CF@expand@second{%
+ {\CF@exp@macroarg\CF@grab@optalias{\CF@tmp@str}}%
+ {\CF@exp@second{%
\endgroup
\begingroup
\CF@sanitize@catcode
- \CF@def@submol@i
+ \CF@def@submol@a
}\CF@tmp@str{}%
}%
}
@@ -211,13 +308,13 @@
\everyeof{\@nil}\endlinechar\m@ne
\CF@sanitize@catcode
\expandafter\assign@tonil\expandafter\CF@tmp@str\scantokens{#2}%
- \CF@expand@second{%
+ \CF@exp@second{%
\CF@sanitize@catcode
- \CF@def@submol@i{#1}%
+ \CF@def@submol@a{#1}%
}\CF@tmp@str
}
-\CF@def\CF@def@submol@i#1#2#3{% #1 nom, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche
+\CF@def\CF@def@submol@a#1#2#3{% #1 nom, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche
\endgroup
\ifcat\relax\expandafter\noexpand\@car#1\@nil% si #1 est une s\'equence de contr\^ole
\expandafter\ifdefined\@car#1\@nil
@@ -225,11 +322,10 @@
\immediate\write\CF@unused{Package \CF@package@name\space Warning: the macro \expandafter\string\@car#1\@nil\space is already defined, the previous definition is lost on input line \the\inputlineno.}%
\fi
\fi
- \ifx\@empty#2\@empty
- \CF@expand@second{\expandafter\def\@car#1\@nil}{\expandafter\@empty\romannumeral-`\.\noexpand#3}%
- \else
- \expandafter\def\@car#1\@nil{%
- \romannumeral-`\.% donnera le d\'eveloppement souhait\'e en 1 coup
+ \CF@ifempty{#2}%
+ {\CF@exp@second{\expandafter\def\@car#1\@nil}{\expandafter\@empty\romannumeral-`\.\noexpand#3}}
+ {\expandafter\def\@car#1\@nil{%
+ \romannumeral-`\.%
\ifdim\CF@current@angle pt>90pt
\ifdim\CF@current@angle pt<270pt
\expandafter\expandafter\expandafter\@firstoftwo
@@ -240,18 +336,17 @@
\expandafter\@secondoftwo
\fi
{\noexpand#2}{\noexpand#3}}%
- \fi
+ }%
\else
\ifcsname CF@@#1\endcsname
\ifCF@definesubmol
\immediate\write\CF@unused{Package \CF@package@name\space Warning:the submol "#1" is already defined, the previous definition is lost on input line \the\inputlineno.}%
\fi
\fi
- \ifx\@empty#2\@empty
- \CF@expand@second{\expandafter\def\csname CF@@#1\endcsname}{\expandafter\@empty\romannumeral-`\.\noexpand#3}%
- \else
- \expandafter\def\csname CF@@#1\endcsname{%
- \romannumeral-`\.% donnera le d\'eveloppement souhait\'e en 1 coup
+ \CF@ifempty{#2}%
+ {\CF@exp@second{\expandafter\def\csname CF@@#1\endcsname}{\expandafter\@empty\romannumeral-`\.\noexpand#3}}
+ {\expandafter\def\csname CF@@#1\endcsname{%
+ \romannumeral-`\.%
\ifdim\CF@current@angle pt>90pt
\ifdim\CF@current@angle pt<270pt
\expandafter\expandafter\expandafter\@firstoftwo
@@ -262,153 +357,59 @@
\expandafter\@secondoftwo
\fi
{\noexpand#2}{\noexpand#3}}%
- \fi
- \fi
-}
-
-\CF@def\CF@if@integer#1{%
- \begingroup
- \afterassignment\CF@after@integer
- \CF@cnt@cycle0#1\relax
-}
-
-\CF@def\CF@after@integer#1\relax{%
- \endgroup
- \CF@ifx{\@empty#1}\@empty
-}
-
-\CF@def\CF@swap@fi#1\fi{\fi#1}
-
-\CF@def\CF@gobble@tonil#1\@nil{}
-
-\CF@def\CF@expafterarg@ntimes#1#2#3{%
- \CF@expafterarg@ntimes@i{#1}{#3}%
- \expandafter\CF@swap@arg\expandafter{\CF@tmp@str}{#2}%
-}
-
-\CF@def\CF@expafterarg@ntimes@i#1#2{%
- \ifnum#1=\z@
- \def\CF@tmp@str{#2}%
- \else
- \CF@swap@fi
- \expandafter\CF@expafterarg@ntimes@i\expandafter{\number\numexpr#1-1\expandafter}\expandafter{#2}%
- \fi
-}
-
-\CF@def\CF@swap@arg#1#2{#2{#1}}
-
-\CF@def\CF@expand@second#1#2{\expandafter\CF@swap@arg\expandafter{#2}{#1}}
-
-\CF@def\CF@swap@char#1#2{#2#1}
-
-\CF@def\CF@expand@afterfirst#1#2{\expandafter\CF@swap@char\expandafter{#2}{#1}}
-
-\CF@def\CF@edef@second#1#2{%
- \edef\CF@tmp@str{#2}%
- \expandafter\CF@swap@char\expandafter{\CF@tmp@str}{#1}%
-}
-
-\CF@def\CF@add@tocs#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
-
-\CF@def\CF@expadd@tocs#1#2{\expandafter\CF@add@tocs\expandafter#1\expandafter{#2}}
-
-\CF@def\CF@edefadd@tocs#1#2{%
- \edef\CF@tmp@str{#2}%
- \expandafter\CF@add@tocs\expandafter#1\expandafter{\CF@tmp@str}%
-}
-
-\CF@def\CF@if@firsttokmatch#1#2{% est ce que #1 et #2 commencent par les m\^emes tokens ?
- \futurelet\CF@toks@a\CF@gobble@tonil#1\relax\@nil
- \futurelet\CF@toks@b\CF@gobble@tonil#2\relax\@nil
- \CF@ifx\CF@toks@a\CF@toks@b
-}
-
-\CF@def\CF@if@firsttokin#1{% teste si le token qui commence #1 appartient aux tokens mis dans #2
- \futurelet\CF@toks@a\CF@gobble@tonil#1\relax\@nil
- \CF@if@firsttokin@i
-}
-
-\CF@def\CF@if@firsttokin@i#1{%
- \ifx\@empty#1\@empty
- \expandafter\@secondoftwo
- \else
- \futurelet\CF@toks@b\CF@gobble@tonil#1\relax\@nil
- \ifx\CF@toks@a\CF@toks@b
- \expandafter\expandafter\expandafter\@firstoftwo
- \else
- \CF@swap@fi\CF@swap@fi
- \expandafter\CF@if@firsttokin@i\expandafter{\@gobble#1}%
- \fi
+ }%
\fi
}
-\CF@def\CF@if@instr#1#2{%
- \def\CF@if@instr@i##1#2##2\@nil{\ifx\@empty##2\@empty\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
- \CF@if@instr@i#1\@@nil#2\@nil
-}
-
-\CF@def\CF@after@space#1 #2\@nil{#2}
-
\CF@def\CF@seek@node#1#2#3{% cherche un noeud au d\'ebut de #1 l'assigne dans la sc #2 et met le reste dans #3
\let#2\@empty
\def#3{#1}%
\CF@if@firsttokmatch{#1}{ }%
- {\expandafter\CF@seek@node@i\expandafter{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au d\'ebut du groupe d'atome
- {\CF@seek@node@i{#1}#2#3}%
+ {\CF@exp@macroarg\CF@seek@node@a{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au d\'ebut du groupe d'atome
+ {\CF@seek@node@a{#1}#2#3}%
}
-\CF@def\CF@seek@node@i#1#2#3{%
- \ifx\@empty#1\@empty
- \let#3\@empty
- \else
- \futurelet\CF@toks@a\CF@gobble@tonil#1\relax\@nil
+\CF@def\CF@seek@node@a#1#2#3{%
+ \CF@ifempty{#1}%
+ {\let#3\@empty}
+ {\futurelet\CF@toks@a\CF@gobtonil#1\relax\@nil
\CF@ifx\CF@toks@a\@sptoken
{\CF@add@tocs#2{ }%
- \CF@swap@fi\expandafter\CF@seek@node@i\expandafter{\CF@after@space#1\@nil}#2#3%
+ \CF@exp@macroarg\CF@seek@node@a{\CF@after@space#1\@nil}#2#3%
}%
{\CF@ifx\CF@toks@a\bgroup
{\CF@expadd@tocs#2{\expandafter{\@car#1\@nil}}%
- \CF@swap@fi\expandafter\CF@seek@node@i\expandafter{\@gobble#1}#2#3%
+ \CF@exp@macroarg\CF@seek@node@a{\@gobble#1}#2#3%
}%
- {\CF@if@firsttokin@i{-=(*<>!~}%
+ {\CF@if@firsttokin@a{-=(*<>!~}%
{\def#3{#1}}%
{\CF@expadd@tocs#2{\@car#1\@nil}%
- \CF@swap@fi\expandafter\CF@seek@node@i\expandafter{\@gobble#1}#2#3%
+ \CF@exp@macroarg\CF@seek@node@a{\@gobble#1}#2#3%
}%
}%
}%
- \fi
+ }%
}
% on sait que #1 commence par -,=,~,<,>. On analyse cette liaison
% #2 reçoit le type de liaisons (1 pour -, 2 pour =, 3 pour ~)
\CF@def\CF@bond@findcode#1#2{%
- \futurelet\CF@toks@a\CF@gobble@tonil#1\@nil
+ \futurelet\CF@toks@a\CF@gobtonil#1\@nil
\edef#2{%
- \ifx-\CF@toks@a1%
- \else
- \ifx=\CF@toks@a2%
- \else
- \ifx~\CF@toks@a3%
- \else
- \ifx>\CF@toks@a4%
- \else
- \ifx<\CF@toks@a5%
- \else0% si 0 --> il y a une erreur non due \`a l'utilisateur
- \fi
- \fi
- \fi
- \fi
- \fi}%
+ \ifx-\CF@toks@a1\else
+ \ifx=\CF@toks@a2\else
+ \ifx~\CF@toks@a3\else
+ \ifx>\CF@toks@a4\else
+ \ifx<\CF@toks@a5\else0% si 0 --> il y a une erreur non due \`a l'utilisateur
+ \fi\fi\fi\fi\fi}%
\ifnum#2>\thr@@% si c'est une liaison de Cram
- \expandafter\futurelet\expandafter\CF@toks@a\expandafter\CF@gobble@tonil\@gobble#1\@nil% chope le caract\`ere suivant
- \ifx:\CF@toks@a
- \edef#2{\number\numexpr#2+2}% si c 'est un ":", signe du pointill\'e, ajoute 2
- \else
- \ifx|\CF@toks@a
+ \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\@gobble#1\@nil}% chope le caract\`ere suivant
+ \CF@ifx:\CF@toks@a
+ {\edef#2{\number\numexpr#2+2}}% si c 'est un ":", signe du pointill\'e, ajoute 2
+ {\ifx|\CF@toks@a
\edef#2{\number\numexpr#2+4}% si c 'est un "|", signe du triangle \'evid\'e, ajouter 4
\fi
- \fi
+ }%
\fi
}
@@ -417,42 +418,41 @@
}
\CF@def\CF@grab@bondoffset#1(#2)#3\@nil{%
- \ifx\@empty#2\@empty
- \else
- \CF@if@instr{#2},%
+ \CF@doifnotempty{#2}%
+ {\CF@if@instr{#2},%
{\CF@analyse@bondoffset#2\@nil}%
{\def\CF@start@offset{#2}}%
- \fi
+ }%
\def\CF@remain@afterbond{#3}%
}
\CF@def\CF@analyse@bond#1#2{%
\CF@bond@findcode{#1}#2%
- \expandafter\def\expandafter\CF@remain@afterbond\expandafter{\@gobble#1}%mange le premier signe de la liaison
+ \CF@exp@second{\def\CF@remain@afterbond}{\@gobble#1}%mange le premier signe de la liaison
\let\CF@doublebond@type\z@
\ifnum#2=\tw@% si c'est une double liaison, regarde s'il y a un + ou - derri\`ere
- \expandafter\futurelet\expandafter\CF@toks@a\expandafter\CF@gobble@tonil\@gobble#1\@nil
- \ifx^\CF@toks@a
- \let\CF@doublebond@type\@ne
- \expandafter\def\expandafter\CF@remain@afterbond\expandafter{\@gobbletwo#1}% mange le "^"
- \else
- \ifx_\CF@toks@a
+ \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\@gobble#1\@nil}%
+ \CF@ifx^\CF@toks@a
+ {\let\CF@doublebond@type\@ne
+ \CF@exp@second{\def\CF@remain@afterbond}{\@gobbletwo#1}% mange le "^"
+ }
+ {\ifx_\CF@toks@a
\let\CF@doublebond@type\tw@
- \expandafter\def\expandafter\CF@remain@afterbond\expandafter{\@gobbletwo#1}% mange le "_"
+ \CF@exp@second{\def\CF@remain@afterbond}{\@gobbletwo#1}% mange le "_"
\fi
- \fi
+ }%
\else
\ifnum#2>5 % si c'est une laision de Cram pointill\'ee ou triangle \'evid\'e
- \expandafter\def\expandafter\CF@remain@afterbond\expandafter{\@gobbletwo#1}% mange un caract\`ere de plus
+ \CF@exp@second{\def\CF@remain@afterbond}{\@gobbletwo#1}% mange un caract\`ere de plus
\fi
\fi
- \expandafter\expandafter\expandafter\CF@if@firsttokmatch\expandafter\expandafter\expandafter{\expandafter\CF@remain@afterbond\expandafter}\string##%
+ \CF@exp@twomacroargs\CF@if@firsttokmatch\CF@remain@afterbond\CF@hash%
{\expandafter\CF@grab@bondoffset\CF@remain@afterbond\@nil}%
- \relax
- \expandafter\expandafter\expandafter\CF@if@firsttokmatch\expandafter\expandafter\expandafter{\expandafter\CF@remain@afterbond\expandafter}\string @%
+ {}%
+ \CF@exp@twomacroargs\CF@if@firsttokmatch\CF@remain@afterbond\CF@arobas
{\expandafter\CF@grab@movearg\CF@remain@afterbond\@nil}%
- \relax
- \expandafter\CF@if@firsttokmatch\expandafter{\CF@remain@afterbond}[%
+ {}%
+ \CF@exp@macroarg\CF@if@firsttokmatch{\CF@remain@afterbond}[%
{\expandafter\CF@analyse@optarg\CF@remain@afterbond\@nil\CF@remain@afterbond}%
{\let\CF@current@stringangle\CF@default@stringangle
\let\CF@current@length\CF@default@length
@@ -462,46 +462,28 @@
\let\CF@movebond@name\@empty
}%
\ifCF@incycle
- \pgfmathparse{360/\CF@cycle@num+\CF@initcycle@angle}%
- \let\CF@cycle@increment@angle\pgfmathresult
- \edef\CF@current@stringangle{::+\pgfmathresult}%
+ \pgfmathsetmacro\CF@cycle@increment@angle{360/\CF@cycle@num+\CF@initcycle@angle}%
+ \edef\CF@current@stringangle{::+\CF@cycle@increment@angle}%
\def\CF@initcycle@angle{0}%
\let\CF@current@length\CF@default@length% et on ignore la longueur de liaison sp\'ecifi\'ee
\fi
- \expandafter\CF@set@bondangle\expandafter{\CF@current@stringangle}\CF@current@angle
+ \CF@exp@macroarg\CF@set@bondangle{\CF@current@stringangle}\CF@current@angle
}
\CF@def\CF@set@bondangle#1#2{% le code de la direction est contenu dans #1, en sortie, #2 contient l'angle
- \ifx\@empty#1\@empty%
- \let#2\CF@default@angle
- \else
- \if:\expandafter\noexpand\@car#1\@nil
- \if:\expandafter\expandafter\expandafter\noexpand\expandafter\@car\@gobble#1\@nil
- \pgfmathparse{\CF@previous@angle+\expandafter\@gobble\@gobble#1}%
- \let#2\pgfmathresult
- \else
- \expandafter\def\expandafter#2\expandafter{\@gobble#1}%
- \fi% puis normalise l'angle entre 0 et 360
- \ifdim\ifdim#2pt<\z@-\fi#2pt>360pt % si |#2|>360
- \pgfmathparse{#2-360*floor(#2/360)}%
- \ifdim\pgfmathresult pt<\z@\pgfmathparse{\pgfmathresult+360}\fi
- \let#2\pgfmathresult
+ \CF@ifempty{#1}%
+ {\let#2\CF@default@angle}
+ {\if:\expandafter\noexpand\@car#1\@nil
+ \if:\CF@three@ea\noexpand\expandafter\@car\@gobble#1\@nil
+ \pgfmathsetmacro#2{\CF@previous@angle+\expandafter\@gobble\@gobble#1}%
\else
- \ifdim#2pt<\z@
- \pgfmathparse{#2+360}%
- \let#2\pgfmathresult
- \fi
+ \CF@exp@second{\def#2}{\@gobble#1}%
\fi
\else
- \ifnum#1>7
- \pgfmathparse{#1-floor(#1/8)*8}%
- \ifdim\pgfmathresult pt<\z@\pgfmathparse{\pgfmathresult+8}\fi
- \edef#2{\ifcase\expandafter\CF@int@part\pgfmathresult\@nil0\or45\or90\or135\or180\or225\or270\or315\else-1\fi}% angle =-1 --> erreur
- \else
- \edef#2{\ifcase#1 0\or45\or90\or135\or180\or225\or270\or315\else-1\fi}%
- \fi
- \fi
- \fi
+ \pgfmathsetmacro#2{#1*\CF@angle@increment}%
+ \fi% puis normalise l'angle entre 0 et 360
+ \ifdim\ifdim#2pt<\z@-\fi#2pt>360pt \pgfmathsetmacro#2{#2-360*floor(#2/360)}\fi% si |#2|>360
+ }%
}
\CF@def\CF@int@part#1.#2\@nil{#1 }
@@ -512,14 +494,14 @@
% Argument limit\'es l\'egitimes ici car #2 (qui est ce qui suit "@{<nom>}" dans l'argument optionnel) ne DOIT
% pas commencer par une accolade.
-\expandafter\CF@def\expandafter\CF@grab@movearg\string @#1#2\@nil{%
+\expandafter\CF@def\expandafter\CF@grab@movearg\CF@arobas#1#2\@nil{%
\CF@if@instr{#1},%
{\CF@analyse@movearg#1\@nil\CF@movebond@name}%
{\def\CF@movebond@name{#1}\def\CF@movebond@coeff{0.5}}%
\def\CF@remain@optarg{#2}%
}
-\CF@def\CF@testempty@andassign#1#2#3{\ifx\@empty#2\@empty\let#1#3\else\def#1{#2}\fi}
+\CF@def\CF@testempty@andassign#1#2#3{\CF@ifempty{#2}{\let#1#3}{\def#1{#2}}}
\CF@def\CF@sanitize@lastitem#1,\@empty#2\@nil{#1}
@@ -532,51 +514,54 @@
}%
\CF@def\CF@analyse@optarg[#1]#2\@nil#3{%
- \ifx\@empty#1\@empty
- \else
- \CF@expand@afterfirst{\CF@if@firsttokmatch{#1}}{\string @}%
+ \CF@doifnotempty{#1}%
+ {\CF@exp@after{\CF@if@firsttokmatch{#1}}{\CF@arobas}%
{\CF@grab@movearg#1\@nil}%
{\let\CF@movebond@name\@empty
- \def\CF@remain@optarg{#1}}%
+ \def\CF@remain@optarg{#1}%
+ }%
\expandafter\CF@parse@optlist\CF@remain@optarg,\@empty,\@empty,\@empty,\@empty\@nil
\def#3{#2}%
- \fi
+ }%
}
\CF@def\CF@seek@submol{%
- \expandafter\def\expandafter\CF@remain@molecule\expandafter{\romannumeral-`\.\expandafter\noexpand\CF@remain@molecule}%
- \expandafter\CF@if@firsttokmatch\expandafter{\CF@remain@molecule}!%
- {\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter
- \CF@remain@molecule\expandafter\expandafter\expandafter{\expandafter\@gobble\CF@remain@molecule}% enl\`eve le ``!''
- \ifcat\relax\expandafter\expandafter\expandafter\noexpand\expandafter\@car\CF@remain@molecule\@nil
- \CF@expafterarg@ntimes5{\def\CF@insert@submol}{\expandafter\@car\CF@remain@molecule\@nil}%
+ \CF@exp@second{\def\CF@remain@molecule}{\romannumeral-`\.\expandafter\noexpand\CF@remain@molecule}%
+ \CF@exp@macroarg\CF@if@firsttokmatch{\CF@remain@molecule}!%
+ {\CF@twoexp@second{\def\CF@remain@molecule}{\expandafter\@gobble\CF@remain@molecule}% enl\`eve le "!"
+ \ifcat\relax\CF@three@ea\noexpand\expandafter\@car\CF@remain@molecule\@nil*%
+ \CF@twoexp@second{\CF@twoexp@second{\def\CF@insert@submol}}{\expandafter\@car\CF@remain@molecule\@nil}%
\else
- \CF@expafterarg@ntimes3{\def\CF@insert@submol}{\csname CF@@\expandafter\@car\CF@remain@molecule\@nil\endcsname}%
+ \CF@exp@second{\CF@twoexp@second{\def\CF@insert@submol}}{\csname CF@@\expandafter\@car\CF@remain@molecule\@nil\endcsname}%
\fi
- \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\CF@remain@molecule\expandafter\expandafter\expandafter
- {\csname CF@insert@submol\expandafter\expandafter\expandafter\endcsname\csname @gobble\expandafter\endcsname\CF@remain@molecule}%
+ \CF@twoexp@second{\def\CF@remain@molecule}{\csname CF@insert@submol\CF@three@ea\endcsname\csname @gobble\expandafter\endcsname\CF@remain@molecule}%
\CF@seek@submol
}%
- \relax
+ {}%
}
\CF@def\CF@insert@emptygroup#1{% ins\`ere {} au d\'ebut de la sc #1
- \expandafter\def\expandafter#1\expandafter{\expandafter{\expandafter}#1}%
+ \CF@exp@second{\def#1}{\expandafter{\expandafter}#1}%
}
-\CF@def\chemfig{\@ifstar{\CF@macrofixedbondlengthtrue\chemfig@i}{\CF@macrofixedbondlengthfalse\chemfig@i}}
+\CF@def\chemfig{\@ifstar{\CF@macrofixedbondlengthtrue\CF@chemfig@a}{\CF@macrofixedbondlengthfalse\CF@chemfig@a}}
-\CF@def\chemfig@i{\ifCF@globalfixedbondlength\CF@macrofixedbondlengthtrue\fi\@testopt\CF@chemfig@ii{}}
+\CF@def\CF@chemfig@a{\ifCF@globalfixedbondlength\CF@macrofixedbondlengthtrue\fi\@testopt\CF@chemfig@b{}}
-\CF@def\CF@chemfig@ii[#1]{\@testopt{\CF@chemfig@iii[#1]}{}}
+\CF@def\CF@chemfig@b[#1]{\@testopt{\CF@chemfig@c[#1]}{}}
-\CF@def\CF@chemfig@iii[#1][#2]{%
+\CF@def\CF@chemfig@c[#1][#2]{%
\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
+ \CF@exp@threemacroargs\CF@chemfig@d\CF@begin@tikzpicture\CF@tmp@str\CF@end@tikzpicture
+}
+
+\CF@def\CF@chemfig@d#1#2#3#4{%
+ #1#2%
\begingroup
+ \catcode`\@=11
\let\CF@hook@list\@empty
- \ifx\CF@atom@sep\@empty\def\CF@atom@sep{3em}\fi
- \ifx\CF@cram@basewidth\@empty\def\CF@cram@basewidth{1.5ex}\fi
+ \CF@doifempty\CF@atom@sep{\def\CF@atom@sep{3em}}%
+ \CF@doifempty\CF@cram@basewidth{\def\CF@cram@basewidth{1.5ex}}%
\CF@incyclefalse
\CF@cnt@groupnumber\z@
\let\CF@last@action\z@% 0=d\'ebut du dessin 1=trac\'e d'un noeud 2=trac\'e d'une liaison
@@ -595,43 +580,38 @@
\let\CF@previous@tikz\empty
\everyeof{\@nil}\endlinechar\m@ne
\CF@sanitize@catcode
- \CF@chemfig@iv
-}
-
-\CF@def\CF@chemfig@iv#1{%
- \expandafter\assign@tonil\expandafter\CF@remain@molecule\scantokens{#1}%
- \expandafter\CF@chemfig@v\expandafter{\CF@remain@molecule}%
- \endtikzpicture
+ \expandafter\assign@tonil\expandafter\CF@remain@molecule\scantokens{#4}%
+ \CF@exp@macroarg\CF@chemfig@e{\CF@remain@molecule}%
+ #3%
\let\CF@split@state\z@
}
-\CF@def\CF@chemfig@v#1{% #1 est le code de la mol\'ecule
+\CF@def\CF@chemfig@e#1{% #1 est le code de la mol\'ecule
\ifnum\CF@last@action=\thr@@
\ifCF@incycle
\def\CF@default@angle{0}%
\else
\ifnum\CF@cnt@cycle=\z@% si c'est le d\'ebut d'un cycle
- \pgfmathparse{\CF@previous@angle+180+\CF@cycle@anglecorrection}% on met la liaison \`a +180° + correction
+ \pgfmathsetmacro\CF@default@angle{\CF@previous@angle+180+\CF@cycle@anglecorrection}% on met la liaison \`a +180° + correction
\else
- \pgfmathparse{\CF@previous@angle-90+180/\CF@cycle@num}% sinon \`a la bissectrice du sommet du cycle
+ \pgfmathsetmacro\CF@default@angle{\CF@previous@angle-90+180/\CF@cycle@num}% sinon \`a la bissectrice du sommet du cycle
\fi
- \let\CF@default@angle\pgfmathresult
\fi
\let\CF@default@stringangle\@empty
\fi
\let\CF@current@angle\CF@default@angle
\def\CF@remain@molecule{#1}%
\CF@seek@submol% alias en premier ?
- \if[\expandafter\expandafter\expandafter\noexpand\expandafter\@car\CF@remain@molecule\@nil
+ \if[\CF@three@ea\noexpand\expandafter\@car\CF@remain@molecule\@nil
\expandafter\CF@analyse@optarg\CF@remain@molecule\@nil\CF@remain@molecule
- \expandafter\CF@set@bondangle\expandafter{\CF@current@stringangle}\CF@current@angle
+ \CF@exp@macroarg\CF@set@bondangle{\CF@current@stringangle}\CF@current@angle
\let\CF@default@angle\CF@current@angle
\let\CF@previous@angle\CF@current@angle
- \unless\ifx\@empty\CF@current@stringangle\let\CF@default@angle\CF@current@angle\fi
- \unless\ifx\@empty\CF@current@length\let\CF@default@length\CF@current@length\fi
- \unless\ifx\@empty\CF@current@fromatom\let\CF@default@fromatom\CF@current@fromatom\fi
- \unless\ifx\@empty\CF@current@toatom\let\CF@default@toatom\CF@current@toatom\fi
- \unless\ifx\@empty\CF@current@tikz\let\CF@default@tikz\CF@current@tikz\fi
+ \CF@doifnotempty\CF@current@stringangle{\let\CF@default@angle\CF@current@angle}%
+ \CF@doifnotempty\CF@current@length{\let\CF@default@length\CF@current@length}%
+ \CF@doifnotempty\CF@current@fromatom{\let\CF@default@fromatom\CF@current@fromatom}%
+ \CF@doifnotempty\CF@current@toatom{\let\CF@default@toatom\CF@current@toatom}%
+ \CF@doifnotempty\CF@current@tikz{\let\CF@default@tikz\CF@current@tikz}%
\CF@seek@submol
\fi
\edef\CF@default@stringangle{:\CF@default@angle}%
@@ -642,10 +622,8 @@
\ifCF@incycle% si on commence un cycle
\let\CF@current@angle\CF@previous@angle
\ifCF@cyclearc% on doit tracer l'arc de cercle dans le cycle ?
- \pgfmathparse{\CF@cycle@inraduiscoeff*\CF@current@length*\CF@atom@sep/(2*tan(180/\CF@cycle@num))}%
- \let\CF@cyclearc@radius\pgfmathresult
- \pgfmathparse{\CF@current@angle+\CF@initcycle@angle+180/\CF@cycle@num+90}
- \let\CF@cyclearc@initangle\pgfmathresult
+ \pgfmathsetmacro\CF@cyclearc@radius{\CF@cycle@inraduiscoeff*\CF@current@length*\CF@atom@sep/(2*tan(180/\CF@cycle@num))}%
+ \pgfmathsetmacro\CF@cyclearc@initangle{\CF@current@angle+\CF@initcycle@angle+180/\CF@cycle@num+90}
\pgfmathparse{\CF@current@length*\CF@atom@sep/(2*sin(180/\CF@cycle@num))}%
\node[at=(\CF@bond@outnode),shift=(\CF@cyclearc@initangle:\pgfmathresult pt)](arccenter){};% le centre de l'arc
\node[at=(arccenter),shift=(\CF@cyclearc@startangle:\CF@cyclearc@radius pt)](initarc){};% le d\'ebut de l'arc
@@ -657,47 +635,48 @@
\ifnum\CF@last@action=\z@
\let\CF@previous@angle\CF@default@angle
\node(CF@node){};
- \expandafter\CF@if@firsttokin\expandafter{\CF@remain@molecule}{-=(*~?<>}%
+ \CF@exp@macroarg\CF@if@firsttokin{\CF@remain@molecule}{-=(*~?<>}%
{\CF@insert@emptygroup\CF@remain@molecule}%
- \relax
+ {}%
\fi
- \CF@chemfig@vi
-}
-
-\CF@def\CF@chemfig@vi{%
- \let\CF@next@action\CF@chemfig@vi% \`a priori, on reboucle
- \ifx\CF@remain@molecule\@empty
- \let\CF@next@action\endgroup
- \else
- \CF@seek@submol
- \expandafter\CF@seek@node\expandafter{\CF@remain@molecule}\CF@current@atomgroup\CF@remain@molecule
- \ifx\@empty\CF@current@atomgroup% pas de noeud pour commencer ?
- \def\CF@bond@outnode{n\CF@last@groupnumber-%
- \ifx\CF@current@fromatom\@empty
+ \CF@chemfig@f
+}
+
+\CF@def\CF@chemfig@f{%
+ \let\CF@next@action\CF@chemfig@f% \`a priori, on reboucle
+ \CF@ifx\CF@remain@molecule\@empty
+ {\let\CF@next@action\endgroup}
+ {\CF@seek@submol
+ \CF@exp@macroarg\CF@seek@node{\CF@remain@molecule}\CF@current@atomgroup\CF@remain@molecule
+ \CF@ifx\@empty\CF@current@atomgroup% pas de noeud pour commencer ?
+ {\def\CF@bond@outnode{%
+ n\CF@last@groupnumber-%
+ \ifx\CF@current@fromatom\@empty
\ifdim\CF@current@angle pt<90pt \number\CF@cnt@atomingroup
\else\ifdim\CF@current@angle pt>270pt \number\CF@cnt@atomingroup\else1\fi
\fi
- \else\CF@current@fromatom
+ \else
+ \CF@current@fromatom
\fi}%
- \expandafter\futurelet\expandafter\CF@toks@a\expandafter\CF@gobble@tonil\CF@remain@molecule\relax\@nil
- \CF@if@firsttokin@i{-=<>~}% la suite est une liaison
+ \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\CF@remain@molecule\relax\@nil}%
+ \CF@if@firsttokin@a{-=<>~}% la suite est une liaison
{\ifnum\CF@last@action=\tw@% c'est la deuxi\`eme liaison cons\'ecutive ?
\CF@insert@emptygroup\CF@remain@molecule% ins\`ere un groupe vide
\edef\CF@bond@outnode{\CF@bond@outnode}%
\else
\ifCF@incycle\advance\CF@cnt@cycle\@ne\fi
- \expandafter\CF@analyse@bond\expandafter{\CF@remain@molecule}\CF@bond@type
+ \CF@exp@macroarg\CF@analyse@bond{\CF@remain@molecule}\CF@bond@type
\edef\CF@bond@outnode{\CF@bond@outnode}%
\let\CF@remain@molecule\CF@remain@afterbond
\ifCF@incycle
\ifnum\CF@cnt@cycle=\CF@cycle@num\relax
- \expandafter\expandafter\expandafter\@firstoftwo
+ \CF@three@ea\@firstoftwo
\else
\ifnum\CF@cnt@cycle=\@ne
\let\CF@cycle@firsttikz\CF@current@tikz
- \unless\ifx\CF@start@offset\@empty\let\CF@cycle@joinlast\z@\fi
+ \CF@doifnotempty\CF@start@offset{\let\CF@cycle@joinlast\z@}%
\fi
- \expandafter\expandafter\expandafter\@secondoftwo
+ \CF@three@ea\@secondoftwo
\fi
\else
\expandafter\@secondoftwo
@@ -720,63 +699,62 @@
{\ifnum\CF@last@action=\tw@% il y avait une liaison juste avant ?
\CF@insert@emptygroup\CF@remain@molecule
\else
- \expandafter\CF@grab@submol\expandafter{\CF@remain@molecule}%
+ \CF@exp@macroarg\CF@grab@submol{\CF@remain@molecule}%
\begingroup
\ifCF@incycle\let\CF@last@action\thr@@\fi% on \'etait dans un cycle
\CF@incyclefalse
- \aftergroup\CF@chemfig@vi
- \def\CF@next@action{\expandafter\CF@chemfig@v\expandafter{\CF@sub@mol}}%
+ \aftergroup\CF@chemfig@f
+ \def\CF@next@action{\CF@exp@macroarg\CF@chemfig@e{\CF@sub@mol}}%
\fi
}%
- {\ifx\CF@remain@molecule\@empty
- \let\CF@next@action\endgroup
- \else% ce qui reste apr\`es le noeud courant n'est pas vide, ne commence pas par "-=~", ni par une parenth\`ese
+ {\CF@ifx\CF@remain@molecule\@empty
+ {\let\CF@next@action\endgroup}
+ {% ce qui reste apr\`es le noeud courant n'est pas vide, ne commence pas par "-=~", ni par une parenth\`ese
\CF@ifx*\CF@toks@a% un cycle ?
- {\ifnum\CF@last@action=\tw@
- \CF@insert@emptygroup\CF@remain@molecule% ins\`ere un groupe vide
- \else
- \ifCF@incycle\let\CF@last@action\thr@@\fi% on \'etait dans un cycle
- \ifnum\CF@last@action=\thr@@\let\CF@lastcycle@num\CF@cycle@num\fi
- \CF@expafterarg@ntimes2\CF@if@firsttokmatch{\expandafter\@gobble\CF@remain@molecule}*% un 2\`e "*" ?
- {\CF@expafterarg@ntimes2{\def\CF@remain@molecule}{\expandafter\@gobble\CF@remain@molecule}% enl\`eve la 1er \'etoile
- \CF@expafterarg@ntimes2\CF@if@firsttokmatch{\expandafter\@gobble\CF@remain@molecule}[% un crochet ensuite ?
- {\expandafter\CF@cycle@parsepreamblewithoptarg\CF@remain@molecule\@nil% \begingroup inclus
+ {\ifnum\CF@last@action=\tw@
+ \CF@insert@emptygroup\CF@remain@molecule% ins\`ere un groupe vide
+ \else
+ \ifCF@incycle\let\CF@last@action\thr@@\fi% on \'etait dans un cycle
+ \ifnum\CF@last@action=\thr@@\let\CF@lastcycle@num\CF@cycle@num\fi
+ \CF@twoexp@macroarg\CF@if@firsttokmatch{\expandafter\@gobble\CF@remain@molecule}*%
+ {\CF@twoexp@second{\def\CF@remain@molecule}{\expandafter\@gobble\CF@remain@molecule}% enl\`eve la 1er \'etoile
+ \CF@twoexp@macroarg\CF@if@firsttokmatch{\expandafter\@gobble\CF@remain@molecule}[% un crochet ensuite ?
+ {\expandafter\CF@cycle@parsepreamblewithoptarg\CF@remain@molecule\@nil% \begingroup inclus
+ }%
+ {\def\CF@cyclearc@startangle{0}\def\CF@cyclearc@endangle{360}%
+ \let\CF@cyclearc@directtikz\@empty
+ \expandafter\CF@cycle@parsepreamble\CF@remain@molecule\@nil% \begingroup inclus
+ }%
+ \CF@cyclearctrue
}%
- {\def\CF@cyclearc@startangle{0}\def\CF@cyclearc@endangle{360}%
- \let\CF@cyclearc@directtikz\@empty
- \expandafter\CF@cycle@parsepreamble\CF@remain@molecule\@nil% \begingroup inclus
+ {\expandafter\CF@cycle@parsepreamble\CF@remain@molecule\@nil% \begingroup inclus
+ \CF@cyclearcfalse
}%
- \CF@cyclearctrue
- }%
- {\expandafter\CF@cycle@parsepreamble\CF@remain@molecule\@nil% \begingroup inclus
- \CF@cyclearcfalse
- }%
- \CF@cnt@cycle\z@
- \edef\CF@hook@cycle{\CF@bond@outnode}%
- \let\CF@hook@atomgroup\CF@previous@atomgroup
- \ifx\CF@hook@atomgroup\CF@empty@node
- \let\CF@cycle@joinlast\@ne% joindre le dernier
- \else
- \let\CF@cycle@joinlast\z@
- \fi
- \CF@incycletrue
- \ifnum\CF@last@action=\thr@@
- \pgfmathparse{360/\CF@lastcycle@num-180}% c'est un cycle dans un cycle
- \else
- \pgfmathparse{-180/\CF@cycle@num-90+\CF@cycle@anglecorrection}%
+ \CF@cnt@cycle\z@
+ \edef\CF@hook@cycle{\CF@bond@outnode}%
+ \let\CF@hook@atomgroup\CF@previous@atomgroup
+ \CF@ifx\CF@hook@atomgroup\CF@empty@node
+ {\let\CF@cycle@joinlast\@ne}% joindre le dernier
+ {\let\CF@cycle@joinlast\z@}
+ \CF@incycletrue
+ \ifnum\CF@last@action=\thr@@
+ \pgfmathsetmacro\CF@initcycle@angle{360/\CF@lastcycle@num-180}% c'est un cycle dans un cycle
+ \else
+ \pgfmathsetmacro\CF@initcycle@angle{-180/\CF@cycle@num-90+\CF@cycle@anglecorrection}%
+ \fi
+ \aftergroup\CF@chemfig@f
+ \def\CF@next@action{\CF@exp@macroarg\CF@chemfig@e{\CF@sub@mol}}%
\fi
- \let\CF@initcycle@angle\pgfmathresult
- \aftergroup\CF@chemfig@vi
- \def\CF@next@action{\expandafter\CF@chemfig@v\expandafter{\CF@sub@mol}}%
- \fi
+ }%
+ {\errmessage{Package \CF@package@name\space Error: something went wrong here: \detokenize\expandafter{\CF@remain@molecule}^^JIf you think it's a bug, please, send a Minimal Example to the author.}%
+ }%
}%
- {\errmessage{Package \CF@package@name\space Error: something went wrong here: \detokenize\expandafter{\CF@remain@molecule}^^JIf you think it's a bug, please, send a Minimal Example to the author.}}%
- \fi}%
+ }%
}%
- \else
- \CF@expand@second{\CF@expand@second{\CF@expand@second\CF@draw@atomgroup\CF@current@angle}\CF@current@toatom}\CF@current@atomgroup
- \fi
- \fi
+ }%
+ {\CF@exp@threemacroargs\CF@draw@atomgroup\CF@current@angle\CF@current@toatom\CF@current@atomgroup
+ }%
+ }%
\CF@next@action
}
@@ -785,7 +763,7 @@
\errmessage{Package \CF@package@name\space Error: A cycle must be at least a triangle.^^JThe number following "*" must be 3 or more}%
\fi
\def\CF@remain@molecule{#2}%
- \expandafter\CF@grab@submol\expandafter{\CF@remain@molecule}%
+ \CF@exp@macroarg\CF@grab@submol{\CF@remain@molecule}%
\begingroup
\def\CF@cycle@num{#1}%
}
@@ -796,22 +774,22 @@
}
\CF@def\CF@cycle@parseoptarg#1,#2,#3\@nil{%
- \ifx\@empty#1\@empty\def\CF@cyclearc@startangle{0}\else\def\CF@cyclearc@startangle{#1}\fi
- \ifx\@empty#2\@empty\def\CF@cyclearc@endangle{360}\else\def\CF@cyclearc@endangle{#2}\fi
- \expandafter\def\expandafter\CF@cyclearc@directtikz\expandafter{\CF@sanitize@lastitem#3,\@empty\@nil}%
+ \CF@ifempty{#1}{\def\CF@cyclearc@startangle{0}}{\def\CF@cyclearc@startangle{#1}}%
+ \CF@ifempty{#2}{\def\CF@cyclearc@endangle{360}}{\def\CF@cyclearc@endangle{#2}}%
+ \CF@exp@second{\def\CF@cyclearc@directtikz}{\CF@sanitize@lastitem#3,\@empty\@nil}%
}
\CF@def\CF@grab@submol#1{%
\begingroup
\catcode`(\@ne\catcode`)\tw@
- \expandafter\expandafter\expandafter
+ \CF@three@ea
\endgroup
- \expandafter\CF@grab@submol@i\scantokens{\relax#1}% le \relax sert \`a meubler pour ne pas que l'argument d\'elimit\'e n'enl\`eve les accolades
+ \expandafter\CF@grab@submol@a\scantokens{\relax#1}%
}
-\CF@def\CF@grab@submol@i#1\@nil{%
- \expandafter\assign@tonil\expandafter\CF@remain@molecule\scantokens\expandafter\expandafter\expandafter{\expandafter\@gobble\@gobble#1}%
- \expandafter\assign@tonil\expandafter\CF@sub@mol\scantokens\expandafter\expandafter\expandafter{\expandafter\@car\@gobble#1\@nil}%
+\CF@def\CF@grab@submol@a#1\@nil{%
+ \expandafter\assign@tonil\expandafter\CF@remain@molecule\scantokens\CF@three@ea{\expandafter\@gobble\@gobble#1}%
+ \expandafter\assign@tonil\expandafter\CF@sub@mol\scantokens\CF@three@ea{\expandafter\@car\@gobble#1\@nil}%
}
\CF@def\assign@tonil#1#2\@nil{\def#1{#2}}
@@ -836,14 +814,14 @@
% Cr\'e\'e 4 noeuds au dessus et au dessous des noeuds #1 et #2
% \`a une distance de #3 du noeud #1 et #4 du noeud #2
\CF@def\CF@create@normnodes#1#2#3#4{%
- \ifx\@empty#3\@empty\else
- \node[at=(#1),xshift=#3*\CF@norm@x,yshift=#3*\CF@norm@y](#11){};
- \node[at=(#1),xshift=-#3*\CF@norm@x,yshift=-#3*\CF@norm@y](#12){};
- \fi
- \ifx\@empty#4\@empty\else
- \node[at=(#2),xshift=#4*\CF@norm@x,yshift=#4*\CF@norm@y](#21){};
- \node[at=(#2),xshift=-#4*\CF@norm@x,yshift=-#4*\CF@norm@y](#22){};
- \fi
+ \CF@doifnotempty{#3}
+ {\node[shape=coordinate,at=(#1),xshift=#3*\CF@norm@x,yshift=#3*\CF@norm@y](#11){};
+ \node[shape=coordinate,at=(#1),xshift=-#3*\CF@norm@x,yshift=-#3*\CF@norm@y](#12){};
+ }%
+ \CF@doifnotempty{#4}
+ {\node[shape=coordinate,at=(#2),xshift=#4*\CF@norm@x,yshift=#4*\CF@norm@y](#21){};
+ \node[shape=coordinate,at=(#2),xshift=-#4*\CF@norm@x,yshift=-#4*\CF@norm@y](#22){};
+ }%
}
\CF@def\CF@compute@nodevect#1#2{%
@@ -851,31 +829,30 @@
\pgfextracty\CF@dim{\pgfpointanchor{#1}{center}}\edef\CF@dimay{\the\CF@dim}%
\pgfextractx\CF@dim{\pgfpointanchor{#2}{center}}\edef\CF@dimbx{\the\CF@dim}%
\pgfextracty\CF@dim{\pgfpointanchor{#2}{center}}\edef\CF@dimby{\the\CF@dim}%
- \pgfmathparse{veclen(\CF@dimbx-\CF@dimax,\CF@dimby-\CF@dimay)}\let\CF@len@vector\pgfmathresult
- \pgfmathparse{(\CF@dimay-\CF@dimby)/\CF@len@vector}\let\CF@norm@x\pgfmathresult
- \pgfmathparse{(\CF@dimbx-\CF@dimax)/\CF@len@vector}\let\CF@norm@y\pgfmathresult
+ \pgfmathsetmacro\CF@len@vector{veclen(\CF@dimbx-\CF@dimax,\CF@dimby-\CF@dimay)}%
+ \pgfmathsetmacro\CF@norm@x{(\CF@dimay-\CF@dimby)/\CF@len@vector}%
+ \pgfmathsetmacro\CF@norm@y{(\CF@dimbx-\CF@dimax)/\CF@len@vector}%
}
\CF@def\CF@set@offset#1#2{%
- \ifx#1\@empty
- \edef#1{\ifx#2\CF@empty@node0pt\else\ifx#2\@empty0pt\else\CF@bond@offset\fi\fi}%
- \fi
+ \CF@doifempty#1%
+ {\edef#1{\ifx#2\CF@empty@node0pt\else\ifx#2\@empty0pt\else\CF@bond@offset\fi\fi}}%
}
\CF@def\CF@draw@bond#1#2#3#4#5{% #1=type de liaison #2 et #3:nom de noeuds de d\'ebut et fin #4 et #5: contenu des atomes de d\'ebut et fin
\CF@set@offset\CF@start@offset#4%
\CF@set@offset\CF@end@offset#5%
\let\CF@current@bondstyle\CF@bond@style
- \unless\ifx\CF@current@tikz\@empty\CF@expadd@tocs\CF@current@bondstyle{\expandafter,\CF@current@tikz}\fi
+ \CF@doifnotempty\CF@current@tikz{\CF@expadd@tocs\CF@current@bondstyle{\expandafter,\CF@current@tikz}}%
\path(#2)--(#3)coordinate[pos=0](#2@)coordinate[pos=1](#3@);%
\CF@compute@nodevect{#2@}{#3@}%
- \pgfmathparse{\CF@start@offset/\CF@len@vector}\let\CF@start@coeff\pgfmathresult
- \pgfmathparse{1-\CF@end@offset/\CF@len@vector}\let\CF@end@coeff\pgfmathresult
+ \pgfmathsetmacro\CF@start@coeff{\CF@start@offset/\CF@len@vector}%
+ \pgfmathsetmacro\CF@end@coeff{1-\CF@end@offset/\CF@len@vector}%
\path(#2@)--(#3@)coordinate[pos=\CF@start@coeff](#2@@)coordinate[pos=\CF@end@coeff](#3@@);%
- \unless\ifx\CF@movebond@name\@empty% on doit poser un noeud sur la liaison
- \path(#2@@)--(#3@@)coordinate[overlay,pos=\CF@movebond@coeff](\CF@movebond@name);
+ \CF@doifnotempty\CF@movebond@name% on doit poser un noeud sur la liaison
+ {\path(#2@@)--(#3@@)coordinate[overlay,pos=\CF@movebond@coeff](\CF@movebond@name);
\let\CF@movebond@name\@empty
- \fi
+ }%
\ifcase#1\relax
\errmessage{Package \CF@package@name\space Error: unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
\or% 1 = liaison simple
@@ -888,17 +865,16 @@
\ifnum\CF@split@state>\z@
\let\CF@doublebond@type\tw@
\fi
- \pgfmathparse{\CF@double@sep*tan(180/\CF@cycle@num)}%
- \let\CF@doublebond@lengthcorrection\pgfmathresult
+ \pgfmathsetmacro\CF@doublebond@lengthcorrection{\CF@double@sep*tan(180/\CF@cycle@num)}%
\fi
\ifcase\CF@doublebond@type
\CF@create@normnodes{#2@@}{#3@@}{\CF@double@sep/2}{\CF@double@sep/2}%
- \CF@draw@bond@i(#2@@1)--(#3@@1);
- \CF@draw@bond@i(#2@@2)--(#3@@2);
+ \CF@draw@bond@a(#2@@1)--(#3@@1);
+ \CF@draw@bond@a(#2@@2)--(#3@@2);
\let\CF@joinbond\z@
\or
\CF@create@normnodes{#2@@}{#3@@}\CF@double@sep\CF@double@sep
- \CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe\CF@draw@bond@i(#2@@)--(#3@@);
+ \CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe\CF@draw@bond@a(#2@@)--(#3@@);
\begingroup% ajuste \'eventuellement les longueurs des liaisons doubles
\ifCF@incycle
\ifdim\CF@start@offset=\z@
@@ -908,11 +884,11 @@
\CF@edefadd@tocs\CF@current@bondstyle{,shorten >=\CF@doublebond@lengthcorrection pt}%
\fi
\fi
- \CF@draw@bond@i(#2@@1)--(#3@@1);
+ \CF@draw@bond@a(#2@@1)--(#3@@1);
\endgroup
\or
\CF@create@normnodes{#2@@}{#3@@}\CF@double@sep\CF@double@sep
- \CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe\CF@draw@bond@i(#2@@)--(#3@@);
+ \CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe\CF@draw@bond@a(#2@@)--(#3@@);
\begingroup% ajuste \'eventuellement les longueurs des liaisons doubles
\ifCF@incycle
\ifdim\CF@start@offset=\z@
@@ -922,21 +898,21 @@
\CF@edefadd@tocs\CF@current@bondstyle{,shorten \ifnum\CF@split@state=\z@>=-\else<=\fi\CF@doublebond@lengthcorrection pt}%
\fi
\fi
- \CF@draw@bond@i(#2@@2)--(#3@@2);
+ \CF@draw@bond@a(#2@@2)--(#3@@2);
\endgroup
\fi
\or% 3 = liaison triple
\CF@create@normnodes{#2@@}{#3@@}\CF@double@sep\CF@double@sep
- \CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe\CF@draw@bond@i(#2@@)--(#3@@);
- \CF@draw@bond@i(#2@@1)--(#3@@1);
- \CF@draw@bond@i(#2@@2)--(#3@@2);
+ \CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe\CF@draw@bond@a(#2@@)--(#3@@);
+ \CF@draw@bond@a(#2@@1)--(#3@@1);
+ \CF@draw@bond@a(#2@@2)--(#3@@2);
\or% 4 = liaison Cram pleine de #2 vers #3
\CF@create@normnodes{#2@@}{#3@@}{\CF@cram@basewidth/2}{}%
- \expandafter\filldraw\expandafter[\CF@current@bondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--(#2@@1);
+ \expandafter\filldraw\expandafter[\CF@current@bondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
\let\CF@joinbond\z@
\or% 5 = liaison Cram creuse de #3 vers #2
\CF@create@normnodes{#3@@}{#2@@}{\CF@cram@basewidth/2}{}%
- \expandafter\filldraw\expandafter[\CF@current@bondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--(#3@@1);
+ \expandafter\filldraw\expandafter[\CF@current@bondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
\let\CF@joinbond\z@
\or% 6 = liaison Cram pointill\'ee de #2 vers #3
\scope
@@ -954,11 +930,11 @@
\let\CF@joinbond\z@
\or% 8 = liaison Cram triangle \'evid\'e de #2 vers #3
\CF@create@normnodes{#2@@}{#3@@}{\CF@cram@basewidth/2}{}%
- \expandafter\draw\expandafter[\CF@current@bondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--(#2@@1);
+ \expandafter\draw\expandafter[\CF@current@bondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
\let\CF@joinbond\z@
\or% 9 = liaison Cram triangle \'evid\'e de #3 vers #1
\CF@create@normnodes{#3@@}{#2@@}{\CF@cram@basewidth/2}{}%
- \expandafter\draw\expandafter[\CF@current@bondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--(#3@@1);
+ \expandafter\draw\expandafter[\CF@current@bondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
\let\CF@joinbond\z@
\else
\errmessage{Package \CF@package@name\space Error: unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
@@ -971,79 +947,78 @@
}
-\CF@def\CF@draw@axisbond@nojoin#1#2{\CF@draw@bond@i(#1@@)--(#2@@);}
+\CF@def\CF@draw@axisbond@nojoin#1#2{\CF@draw@bond@a(#1@@)--(#2@@);}
-\CF@def\CF@draw@axisbond@join#1#2{% dessine une liaison simple dans l'axe avec raccord rétrograde
+\CF@def\CF@draw@axisbond@join#1#2{% dessine une liaison simple dans l'axe avec raccord r\'etrograde
\ifCF@incycle\ifnum\CF@cnt@cycle=\CF@cycle@num\relax\let\CF@next@tikz\CF@cycle@firsttikz\fi\fi
\ifnum\CF@joinbond=\z@
\ifCF@incycle
\ifnum\CF@cnt@cycle=\CF@cycle@num\relax
\ifnum\CF@cycle@joinlast=\@ne
- \CF@draw@bond@i(#1@@)--(#2@@)--%
+ \CF@draw@bond@a(#1@@)--(#2@@)--%
([shift=(\CF@previous@bondangle+2*\CF@cycle@increment@angle:.5\pgflinewidth)]#2@@);
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
\let\CF@joinbond\@ne
\else
- \ifx\CF@previous@tikz\CF@current@tikz
- \let\CF@joinbond\@ne
- \ifx\CF@previous@atomgroup\CF@empty@node
- \ifx\CF@previous@bondangle\empty% si d\'ebut mol\'ecule
- \CF@draw@bond@i(#1@@)--(#2@@);
- \else
- \ifdim\CF@start@offset=\z@
+ \CF@ifx\CF@previous@tikz\CF@current@tikz
+ {\let\CF@joinbond\@ne
+ \CF@ifx\CF@previous@atomgroup\CF@empty@node
+ {\CF@ifx\CF@previous@bondangle\empty% si d\'ebut mol\'ecule
+ {\CF@draw@bond@a(#1@@)--(#2@@);
+ }
+ {\ifdim\CF@start@offset=\z@
\ifCF@incycle
\ifnum\CF@cnt@cycle=\CF@cycle@num\relax
\ifnum\CF@cycle@joinlast=\@ne
- \ifx\CF@cycle@firsttikz\CF@current@tikz
- \CF@draw@bond@i([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@)--%
+ \CF@ifx\CF@cycle@firsttikz\CF@current@tikz
+ {\CF@draw@bond@a([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@)--%
([shift=(\CF@previous@bondangle+2*\CF@cycle@increment@angle:.5\pgflinewidth)]#2@@);
- \else
- \CF@draw@bond@i([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
- \fi
+ }
+ {\CF@draw@bond@a([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ }%
\else
- \CF@draw@bond@i([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \CF@draw@bond@a([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \CF@draw@bond@a([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \CF@draw@bond@a([shift=(\CF@previous@bondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
- \fi
- \else
- \CF@draw@bond@i(#1@@)--(#2@@);
- \fi
- \else
- \ifCF@incycle
+ }%
+ }
+ {\CF@draw@bond@a(#1@@)--(#2@@);}%
+ }
+ {\ifCF@incycle
\ifnum\CF@cnt@cycle=\CF@cycle@num\relax
\ifnum\CF@cycle@joinlast=\@ne
- \ifx\CF@next@tikz\CF@current@tikz
- \CF@draw@bond@i(#1@@)--(#2@@)--%
+ \CF@ifx\CF@next@tikz\CF@current@tikz
+ {\CF@draw@bond@a(#1@@)--(#2@@)--%
([shift=(\CF@previous@bondangle+2*\CF@cycle@increment@angle:.5\pgflinewidth)]#2@@);
- \else
- \CF@draw@bond@i(#1@@)--(#2@@);
- \fi
+ }%
+ {\CF@draw@bond@a(#1@@)--(#2@@);
+ }%
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
\else
- \CF@draw@bond@i(#1@@)--(#2@@);
+ \CF@draw@bond@a(#1@@)--(#2@@);
\fi
- \fi
+ }%
\fi
\ifdim\CF@end@offset=\z@\else\let\CF@joinbond\z@\fi
}
@@ -1052,13 +1027,13 @@
\CF@def\disablebondjoin{\global\let\CF@draw@axisbond\CF@draw@axisbond@nojoin}
\disablebondjoin% par d\'efaut, d\'esactiver la jointure entre liaisons
-\CF@def\CF@draw@bond@i{\expandafter\draw\expandafter[\CF@current@bondstyle]}
+\CF@def\CF@draw@bond@a{\expandafter\draw\expandafter[\CF@current@bondstyle]}
\CF@def\CF@hook@drawall{% dessine tous les crochets contenus dans la sc \CF@hook@draw
- \unless\ifx\CF@hook@drawlist\@empty
- \expandafter\CF@hook@drawfirst\CF@hook@drawlist\@nil% trace un lien de crochet \`a crochet
- \expandafter\CF@hook@drawall
- \fi
+ \CF@doifnotempty\CF@hook@drawlist
+ {\expandafter\CF@hook@drawfirst\CF@hook@drawlist\@nil% trace un lien de crochet \`a crochet
+ \CF@hook@drawall
+ }%
}
\CF@def\CF@hook@drawfirst[#1,#2,#3]#4#5#6#7#8\@nil{%
@@ -1083,12 +1058,12 @@
\CF@def\setbondstyle{\def\CF@bond@style}
\setbondstyle{}
-\expandafter\CF@def\expandafter\CF@gobble@movearg\string @#1#2\@nil#3{%
+\expandafter\CF@def\expandafter\CF@gobble@movearg\CF@arobas#1#2\@nil#3{%
\expandafter\def\csname atom@\number\CF@cnt@atomnumber\endcsname{#2}%
\CF@if@instr{#1},%
{\CF@analyse@movearg#1\@nil#3\let\CF@movebond@coeff\@empty}%
{\def#3{#1}}%
- \ifx\@empty#2\@empty\let\CF@node@strut\@empty\fi
+ \CF@doifempty{#2}{\let\CF@node@strut\@empty}%
}%
\CF@def\hflipnext{\let\CF@split@state\@ne}
@@ -1109,7 +1084,7 @@
\let\CF@current@atom\@empty
\global\let\CF@hook@drawlist\@empty
\CF@cnt@atomingroup\z@
- \CF@if@firsttokmatch{#3}?{\CF@draw@atomgroup@i{{}#3}}{\CF@draw@atomgroup@i{#3}}%
+ \CF@if@firsttokmatch{#3}?{\CF@draw@atomgroup@a{{}#3}}{\CF@draw@atomgroup@a{#3}}%
\def\CF@current@atomgroup{#3}%
\CF@remove@movearg\CF@current@atomgroup% enl\`eve les "@{<nom>}"
\CF@if@instr{#3}?%
@@ -1118,45 +1093,44 @@
\let\CF@current@atomgroup\CF@empty@node
\fi
}%
- \relax
- \ifx\@empty#2\@empty
- \else
- \ifnum#2<\@ne
+ {}%
+ \CF@doifnotempty{#2}
+ {\ifnum#2<\@ne
\immediate\write\CF@unused{Package \CF@package@name\space Warning: no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
\else
\ifnum#2>\CF@cnt@atomingroup
\errmessage{Package \CF@package@name\space Error: no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
\fi
\fi
- \fi
+ }%
\edef\CF@hook@atomnumber{%
- \ifx\@empty#2\@empty
- \ifdim#1pt>90pt
+ \CF@ifempty{#2}
+ {\ifdim#1pt>90pt
\ifdim#1pt<270pt \number\CF@cnt@atomingroup\else1\fi
\else1%
\fi
- \else#2%
- \fi}%
+ }
+ {#2}%
+ }%
\CF@cnt@atomnumber\CF@hook@atomnumber
- \ifx\CF@current@atomgroup\CF@empty@node
- \let\CF@node@strut\@empty
- \else
- \ifx\@empty\CF@bond@outcontentsaved
- \def\CF@node@strut{\vphantom\CF@bond@outcontent}%
- \else
- \def\CF@node@strut{\vphantom\CF@bond@outcontentsaved}%
- \fi
- \fi
+ \CF@ifx\CF@current@atomgroup\CF@empty@node
+ {\let\CF@node@strut\@empty}
+ {\CF@ifx\@empty\CF@bond@outcontentsaved
+ {\def\CF@node@strut{\vphantom\CF@bond@outcontent}}%
+ {\def\CF@node@strut{\vphantom\CF@bond@outcontentsaved}}%
+ }%
\edef\CF@opt@string{anchor=\ifnum\CF@last@action=\z@ base\else\ifCF@incycle center\else\ifCF@macrofixedbondlength 180+#1\else center\fi\fi\fi,at=(CF@node),\CF@node@style}% premier atome de la mol\'ecule affich\'e
\loop
\unless\ifnum\CF@cnt@atomnumber>\CF@cnt@atomingroup
- \expandafter\expandafter\expandafter\futurelet\expandafter\expandafter\expandafter\CF@toks@a\expandafter\expandafter\expandafter
- \CF@gobble@tonil\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil
- \expandafter\ifx\string @\CF@toks@a% l'atome courant commence par un "@"
- \expandafter\expandafter\expandafter\CF@gobble@movearg\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil\CF@moveatom@name
+ \CF@twoexp@after
+ {\futurelet\CF@toks@a}
+ {\expandafter\expandafter\expandafter\CF@gobtonil\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil}%
+ \expandafter\CF@ifx\CF@arobas\CF@toks@a% l'atome courant commence par un "@"
+ {\CF@three@ea\CF@gobble@movearg\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil\CF@moveatom@name
\expandafter\node\expandafter[\CF@opt@string,overlay](\CF@moveatom@name){\phantom{\CF@node@content}};%
\let\CF@moveatom@name\@empty
- \fi
+ }
+ {}%
\expandafter\node\expandafter[\CF@opt@string](n\number\CF@cnt@groupnumber-\number\CF@cnt@atomnumber){\CF@node@content};%
\let\CF@node@strut\@empty
\advance\CF@cnt@atomnumber\@ne
@@ -1172,13 +1146,15 @@
\ifnum\CF@cnt@atomnumber>\@ne
\advance\CF@cnt@atomnumber\m@ne
\edef\CF@opt@string{anchor=base \ifnum\CF@split@state=\@ne west\else east\fi,at=(n\number\CF@cnt@groupnumber-\number\numexpr\CF@cnt@atomnumber+1.base \ifnum\CF@split@state=\@ne east\else west\fi),\CF@node@style}%
- \expandafter\expandafter\expandafter\futurelet\expandafter\expandafter\expandafter\CF@toks@a\expandafter\expandafter\expandafter
- \CF@gobble@tonil\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil
- \expandafter\ifx\string @\CF@toks@a% l'atome courant commence par un "@"
- \expandafter\expandafter\expandafter\CF@gobble@movearg\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil\CF@moveatom@name
- \expandafter\node\expandafter[\CF@opt@string,overlay](\CF@moveatom@name){\phantom{\CF@node@content}};%
+ \CF@twoexp@after
+ {\futurelet\CF@toks@a}
+ {\expandafter\expandafter\expandafter\CF@gobtonil\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil}%
+ \expandafter\CF@ifx\CF@arobas\CF@toks@a% l'atome courant commence par un "@"
+ {\CF@three@ea\CF@gobble@movearg\csname atom@\number\CF@cnt@atomnumber\endcsname\@nil\CF@moveatom@name
+ \expandafter\nodehttps://openclassrooms.com/forum/categorie/autres-langages-vba-ruby\expandafter[\CF@opt@string,overlay](\CF@moveatom@name){\phantom{\CF@node@content}};%
\let\CF@moveatom@name\@empty
- \fi
+ }
+ {}%
\expandafter\node\expandafter[\CF@opt@string](n\number\CF@cnt@groupnumber-\number\CF@cnt@atomnumber){\CF@node@content};%
\repeat
\CF@hook@drawall
@@ -1186,100 +1162,97 @@
\let\CF@previous@atomgroup\CF@current@atomgroup
}
-\expandafter\CF@def\expandafter\CF@keep@movearg\string @#1#2\@nil{\expandafter\def\expandafter\CF@current@atom\expandafter{\string @{#1}}}
+\expandafter\CF@def\expandafter\CF@keep@movearg\CF@arobas#1#2\@nil{\CF@exp@second{\def\CF@current@atom}{\CF@arobas{#1}}}
-\CF@def\CF@draw@atomgroup@i#1{% transforme #1 en un groupe d'atomes
- \ifx\@empty#1\@empty
- \expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
- \else
- \advance\CF@cnt@atomingroup\@ne
- \futurelet\CF@toks@a\CF@gobble@tonil#1\@nil
- \expandafter\CF@ifx\string @\CF@toks@a
+\CF@def\CF@draw@atomgroup@a#1{% transforme #1 en un groupe d'atomes
+ \CF@ifempty{#1}
+ {\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom}
+ {\advance\CF@cnt@atomingroup\@ne
+ \futurelet\CF@toks@a\CF@gobtonil#1\@nil
+ \expandafter\CF@ifx\CF@arobas\CF@toks@a
{\CF@keep@movearg#1\@nil
- \CF@swap@fi
- \CF@remove@movearg@i#1\@nil\CF@after@movearg
- \expandafter\CF@draw@atomgroup@ii\expandafter{\CF@after@movearg}%
+ \CF@remove@movearg@a#1\@nil\CF@after@movearg
+ \CF@exp@macroarg\CF@draw@atomgroup@b{\CF@after@movearg}%
}%
- {\CF@swap@fi
- \let\CF@current@atom\@empty
- \CF@draw@atomgroup@ii{#1}%
+ {\let\CF@current@atom\@empty
+ \CF@draw@atomgroup@b{#1}%
}%
- \fi
+ }%
}
-\CF@def\CF@draw@atomgroup@ii#1{%
- \ifx\@empty#1\@empty
- \expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
- \else
- \futurelet\CF@toks@a\CF@gobble@tonil#1\@nil
- \CF@ifx\bgroup\CF@toks@a
- {\CF@expadd@tocs\CF@current@atom{\expandafter{\@car#1\@nil}}%
- \expandafter\CF@draw@atomgroup@iii\expandafter{\@gobble#1}%
- }%
- {\CF@ifx\@sptoken\CF@toks@a
- {\CF@add@tocs\CF@current@atom{ }%
- \expandafter\CF@draw@atomgroup@iii\expandafter{\CF@after@space#1\@nil}%
+\CF@def\CF@draw@atomgroup@b#1{%
+ \CF@ifempty{#1}
+ {\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom}
+ {\futurelet\CF@toks@a\CF@gobtonil#1\@nil
+ \CF@ifx\bgroup\CF@toks@a
+ {\CF@expadd@tocs\CF@current@atom{\expandafter{\@car#1\@nil}}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\@gobble#1}%
}%
- {\CF@expadd@tocs\CF@current@atom{\@car#1\@nil}%
- \expandafter\CF@draw@atomgroup@iii\expandafter{\@gobble#1}%
+ {\CF@ifx\@sptoken\CF@toks@a
+ {\CF@add@tocs\CF@current@atom{ }%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@after@space#1\@nil}%
+ }%
+ {\CF@expadd@tocs\CF@current@atom{\@car#1\@nil}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\@gobble#1}%
+ }%
}%
}%
- \fi
}
% enl\`eve tous les "@{nom}" de la sc #1
\CF@def\CF@remove@movearg#1{%
- \CF@expand@afterfirst{\expandafter\CF@if@instr\expandafter{#1}}{\string @}%
- {\expandafter\CF@remove@movearg@i#1\@nil#1%
- \CF@remove@movearg#1}%
- \relax
+ \CF@exp@after{\expandafter\CF@if@instr\expandafter{#1}}{\CF@arobas}%
+ {\expandafter\CF@remove@movearg@a#1\@nil#1%
+ \CF@remove@movearg#1%
+ }%
+ {}%
}
% enl\`eve le premier "@{<nom>}" de l'argument et l'assigne \`a #2
-\CF@def\CF@remove@movearg@i#1\@nil#2{%
- \expandafter\def\expandafter\CF@remove@movearg@ii\expandafter##\expandafter1\string @{%
- \expandafter\def\expandafter#2\expandafter{\@gobble##1}% mange le \relax
- \CF@remove@movearg@iii\relax
+\CF@def\CF@remove@movearg@a#1\@nil#2{%
+ \expandafter\def\expandafter\CF@remove@movearg@b\expandafter##\expandafter1\CF@arobas{%
+ \CF@exp@second{\def#2}{\@gobble##1}% mange le \relax
+ \CF@remove@movearg@c\relax
}%
- \def\CF@remove@movearg@iii##1\@nil{\CF@expadd@tocs#2{\@gobbletwo##1}}% mange le \relax et le <nom>
- \CF@remove@movearg@ii\relax#1\@nil
+ \def\CF@remove@movearg@c##1\@nil{\CF@expadd@tocs#2{\@gobbletwo##1}}% mange le \relax et le <nom>
+ \CF@remove@movearg@b\relax#1\@nil
}
-\CF@def\CF@draw@atomgroup@iii#1{% transforme #1 en un groupe d'atomes
- \ifx\@empty#1\@empty%
- \expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
+\CF@def\CF@draw@atomgroup@bi#1{% transforme #1 en un groupe d'atomes
+ \CF@ifempty{#1}
+ {\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
\let\CF@current@atom\@empty
- \else
- \futurelet\CF@toks@a\CF@gobble@tonil#1\@nil
- \expandafter\CF@ifx\string @\CF@toks@a
+ }
+ {\futurelet\CF@toks@a\CF@gobtonil#1\@nil
+ \expandafter\CF@ifx\CF@arobas\CF@toks@a
{\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
\let\CF@current@atom\@empty
- \CF@swap@fi\CF@draw@atomgroup@i{#1}%
+ \CF@draw@atomgroup@a{#1}%
}%
{\CF@ifx|\CF@toks@a
{\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
\let\CF@current@atom\@empty
- \CF@swap@fi\expandafter\CF@draw@atomgroup@i\expandafter{\@gobble#1}%
+ \CF@exp@macroarg\CF@draw@atomgroup@a{\@gobble#1}%
}%
{\CF@ifx\@sptoken\CF@toks@a
{\CF@add@tocs\CF@current@atom{ }%
- \CF@swap@fi\expandafter\CF@draw@atomgroup@iii\expandafter{\CF@after@space#1\@nil}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@after@space#1\@nil}%
}%
{\CF@ifx\bgroup\CF@toks@a
{\CF@expadd@tocs\CF@current@atom{\expandafter{\@car#1\@nil}}%
- \CF@swap@fi\expandafter\CF@draw@atomgroup@iii\expandafter{\@gobble#1}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\@gobble#1}%
}%
- {\expandafter\CF@ifcar@isupperletter\expandafter{\@car#1\@nil}%
+ {\CF@exp@macroarg\CF@ifcar@isupperletter{\@car#1\@nil}%
{\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
\let\CF@current@atom\@empty
- \CF@swap@fi\CF@draw@atomgroup@i{#1}%
+ \CF@draw@atomgroup@a{#1}%
}%
{\CF@ifx?\CF@toks@a
- {\expandafter\CF@if@firsttokmatch\expandafter{\@gobble#1}[% un crochet apr\`es le "?"
+ {\CF@exp@macroarg\CF@if@firsttokmatch{\@gobble#1}[% un crochet apr\`es le "?"
{\expandafter\CF@grab@optarg\@gobble#1\@nil\CF@after@hook}%
{\expandafter\CF@grab@optarg\expandafter[\expandafter]\@gobble#1\@nil\CF@after@hook}%
- \CF@expand@second{\CF@expand@second\CF@if@instr\CF@hook@list}{\expandafter(\CF@hook@currentname)}% crochet d\'ej\`a d\'efini ?
- {\expandafter\CF@hook@parselist\expandafter{\CF@hook@currentname}% va chercher les caract\'eristiques du crochet sauvegard\'e
+ \CF@exp@twomacroargs\CF@if@instr{\CF@hook@list}{\expandafter(\CF@hook@currentname)}% crochet d\'ej\`a d\'efini ?
+ {\CF@exp@macroarg\CF@hook@parselist{\CF@hook@currentname}% chercher les caract\'eristiques du crochet sauvegard\'e
\CF@edefadd@tocs\CF@hook@drawlist{%
[\CF@hook@currentname,\CF@hook@currentlink,\CF@hook@currenttikz]{\CF@hook@savedcoord}{n\number\CF@cnt@groupnumber-\number\CF@cnt@atomingroup}}%
\CF@expadd@tocs\CF@hook@drawlist{\expandafter{\CF@hook@savedcontent}}%
@@ -1290,17 +1263,17 @@
\CF@expadd@tocs\CF@hook@list{\CF@current@atom|}%
\global\let\CF@hook@list\CF@hook@list
}%
- \CF@swap@fi\expandafter\CF@draw@atomgroup@iii\expandafter{\CF@after@hook}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@after@hook}%
}%
{\CF@expadd@tocs\CF@current@atom{\@car#1\@nil}%
- \CF@swap@fi\expandafter\CF@draw@atomgroup@iii\expandafter{\@gobble#1}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\@gobble#1}%
}%
}%
}%
}%
}%
}%
- \fi
+ }%
}
\CF@def\CF@kook@defaultname{a}
@@ -1319,54 +1292,53 @@
}
\CF@def\CF@hook@parselist#1{% #1 est le nom du noeud \`a retrouver
- \def\CF@hook@parselist@i##1(#1)|##2|##3|##4\@nil{\def\CF@hook@savedcoord{##2}\def\CF@hook@savedcontent{##3}}%
- \expandafter\CF@hook@parselist@i\CF@hook@list\@nil
+ \def\CF@hook@parselist@a##1(#1)|##2|##3|##4\@nil{\def\CF@hook@savedcoord{##2}\def\CF@hook@savedcontent{##3}}%
+ \expandafter\CF@hook@parselist@a\CF@hook@list\@nil
}
\CF@def\CF@remove@hook#1{%
- \expandafter\CF@if@instr\expandafter{#1}?%
- {\expandafter\CF@remove@hook@i\expandafter\relax#1\@nil#1%
+ \CF@exp@macroarg\CF@if@instr{#1}?%
+ {\expandafter\CF@remove@hook@a\expandafter\relax#1\@nil#1%
\CF@remove@hook#1%
}
- \relax
+ {}%
}
-\CF@def\CF@remove@hook@i#1?#2\@nil#3{%
+\CF@def\CF@remove@hook@a#1?#2\@nil#3{%
\CF@if@firsttokmatch{#2}[%
- {\CF@remove@hook@ii#1?#2\@nil#3}
- {\expandafter\def\expandafter#3\expandafter{\@gobble#1#2}}%
+ {\CF@remove@hook@b#1?#2\@nil#3}
+ {\CF@exp@second{\def#3}{\@gobble#1#2}}%
}
-\CF@def\CF@remove@hook@ii#1?[#2]#3\@nil#4{\expandafter\def\expandafter#4\expandafter{\@gobble#1#3}}
+\CF@def\CF@remove@hook@b#1?[#2]#3\@nil#4{\CF@exp@second{\def#4}{\@gobble#1#3}}
\CF@def\setlewis{\@testopt\CF@setlewis{0.3ex}}
\CF@def\CF@setlewis[#1]#2#3#4{%
\def\CF@lewis@widthdouble{#1}%
- \ifx\@empty#2\@empty\def\CF@lewis@offset{0.4ex}\else\def\CF@lewis@offset{#2}\fi
- \ifx\@empty#3\@empty\def\CF@lewis@length{1.5ex}\else\def\CF@lewis@length{#3}\fi
- \ifx\@empty#4\@empty\def\CF@lewis@style{}\else\def\CF@lewis@style{#4}\fi
+ \CF@ifempty{#2}{\def\CF@lewis@offset{0.4ex}}{\def\CF@lewis@offset{#2}}%
+ \CF@ifempty{#3}{\def\CF@lewis@length{1.5ex}}{\def\CF@lewis@length{#3}}%
+ \CF@ifempty{#4}{\def\CF@lewis@style{}}{\def\CF@lewis@style{#4}}%
}
\setlewis{}{}{}
\CF@def\setlewisdist#1{%
- \def\CF@lewis@dist{#1}\ifx\@empty\CF@lewis@dist\def\CF@lewis@dist{0.2em}\fi
+ \CF@ifempty{#1}{\def\CF@lewis@dist{0.2em}}{\def\CF@lewis@dist{#1}}%
}
\setlewisdist{0.3em}
-\CF@def\Lewis{\@testopt{\CF@lewis@i{}}{1}}
+\CF@def\Lewis{\@testopt{\CF@lewis@a{}}{1}}
-\CF@def\lewis{\@testopt{\CF@lewis@i{,overlay}}{1}}
+\CF@def\lewis{\@testopt{\CF@lewis@a{,overlay}}{1}}
-\CF@def\CF@lewis@i#1[#2]{%
- \def\CF@lewis@diagcoeff{#2}%
- \ifx\@empty\CF@lewis@diagcoeff\def\CF@lewis@diagcoeff{1}\fi
- \CF@lewis@ii{#1}%
+\CF@def\CF@lewis@a#1[#2]{%
+ \CF@ifempty{#2}{\def\CF@lewis@diagcoeff{1}}{\def\CF@lewis@diagcoeff{#2}}%
+ \CF@lewis@b{#1}%
}
-\CF@def\CF@lewis@ii#1#2{\CF@lewis@iii#2\@nil{#1}}
+\CF@def\CF@lewis@b#1#2{\CF@lewis@c#2\@nil{#1}}
-\CF@def\CF@lewis@iii#1,#2\@nil#3{%
+\CF@def\CF@lewis@c#1,#2\@nil#3{%
\setbox\CF@lewis@box\hbox{\printatom{#2}}% mettre en dehors de tikzpicture (si \printatom ne passe pas en mode math)
\tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline]%
\@makeother;\@makeother:%
@@ -1377,26 +1349,24 @@
\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)}%
- \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)}%
- \let\CF@lewis@y\pgfmathresult
+ \pgfmathsetmacro\CF@lewis@x{\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)}%
+ \pgfmathsetmacro\CF@lewis@y{\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)}%
\edef\CF@lewis@xoffset{\ifcase\CF@lewis@currentpos\space1\or0.70711\or0\or-0.70711\or-1\or-0.70711\or0\or0.70711\fi}%
\edef\CF@lewis@yoffset{\ifcase\CF@lewis@currentpos\space0\or0.70711\or1\or0.70711\or0\or-0.70711\or-1\or-0.70711\fi}%
\ifodd\CF@lewis@currentpos\relax
- \pgfmathparse{\CF@lewis@offset*\CF@lewis@diagcoeff}\let\CF@lewis@current@offset\pgfmathresult
+ \pgfmathsetmacro\CF@lewis@current@offset{\CF@lewis@offset*\CF@lewis@diagcoeff}%%
\else
\let\CF@lewis@current@offset\CF@lewis@offset
\fi
\if.\expandafter\@car\CF@lewis@remainpos\relax\@nil
\edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \CF@expand@afterfirst{\draw[fill,black,}{\CF@lewis@style#3]}%
+ \CF@exp@after{\draw[fill,black,}{\CF@lewis@style#3]}%
(\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset,\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset)circle(0.15ex);%
\else
\if|\expandafter\@car\CF@lewis@remainpos\relax\@nil
\edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \pgfmathparse{\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset}\let\CF@lewis@x\pgfmathresult
- \pgfmathparse{\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset}\let\CF@lewis@y\pgfmathresult
+ \pgfmathsetmacro\CF@lewis@x{\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset}%
+ \pgfmathsetmacro\CF@lewis@y{\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset}%
\expandafter\draw\expandafter[\CF@lewis@style#3]%
(\CF@lewis@x pt+\CF@lewis@length*\CF@lewis@yoffset/2 pt,\CF@lewis@y-\CF@lewis@length*\CF@lewis@xoffset/2 pt)--
(\CF@lewis@x pt+\CF@lewis@length*\CF@lewis@yoffset/2 pt+\CF@lewis@xoffset*\CF@lewis@widthdouble,\CF@lewis@y-\CF@lewis@length*\CF@lewis@xoffset/2 pt+\CF@lewis@yoffset*\CF@lewis@widthdouble)--
@@ -1405,14 +1375,14 @@
\else
\if:\expandafter\@car\CF@lewis@remainpos\relax\@nil
\edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
- \pgfmathparse{\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset}\let\CF@lewis@x\pgfmathresult
- \pgfmathparse{\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset}\let\CF@lewis@y\pgfmathresult
- \CF@expand@afterfirst{\draw[fill,black,}{\CF@lewis@style#3]}%
+ \pgfmathsetmacro\CF@lewis@x{\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset}%
+ \pgfmathsetmacro\CF@lewis@y{\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset}%
+ \CF@exp@after{\draw[fill,black,}{\CF@lewis@style#3]}%
(\CF@lewis@x pt+\CF@lewis@dist*\CF@lewis@yoffset/2 pt,\CF@lewis@y-\CF@lewis@dist*\CF@lewis@xoffset/2 pt)circle(0.15ex)%
(\CF@lewis@x pt-\CF@lewis@dist*\CF@lewis@yoffset/2 pt,\CF@lewis@y+\CF@lewis@dist*\CF@lewis@xoffset/2 pt)circle(0.15ex);%
\else
- \pgfmathparse{\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset}\let\CF@lewis@x\pgfmathresult
- \pgfmathparse{\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset}\let\CF@lewis@y\pgfmathresult
+ \pgfmathsetmacro\CF@lewis@x{\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset}%
+ \pgfmathsetmacro\CF@lewis@y{\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset}%
\expandafter\draw\expandafter[\CF@lewis@style#3]%
(\CF@lewis@x pt+\CF@lewis@length*\CF@lewis@yoffset/2 pt,\CF@lewis@y-\CF@lewis@length*\CF@lewis@xoffset/2 pt)--%
(\CF@lewis@x pt-\CF@lewis@length*\CF@lewis@yoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@xoffset/2 pt);%
@@ -1424,16 +1394,16 @@
\endtikzpicture
}
-\CF@def\setstacksep#1{\edef\CF@stacksep{\ifx\@empty#1\@empty1.5pt\else\the\dimexpr#1\relax\fi}}
+\CF@def\setstacksep#1{\edef\CF@stacksep{\CF@ifempty{#1}{1.5pt}{\the\dimexpr#1\relax}}}
\setstacksep{1.5pt}
-\CF@def\Chembelow{\begingroup\let\CF@tmp@str\@gobble\CF@chembelow@i}
+\CF@def\Chembelow{\begingroup\let\CF@tmp@str\@gobble\CF@chembelow@a}
-\CF@def\chembelow{\begingroup\let\CF@tmp@str\@firstofone\CF@chembelow@i}
+\CF@def\chembelow{\begingroup\let\CF@tmp@str\@firstofone\CF@chembelow@a}
-\CF@def\CF@chembelow@i{\@testopt\CF@chembelow@ii\CF@stacksep}
+\CF@def\CF@chembelow@a{\@testopt\CF@chembelow@b\CF@stacksep}
-\CF@def\CF@chembelow@ii[#1]#2#3{%
+\CF@def\CF@chembelow@b[#1]#2#3{%
\setbox\CF@box@boxa\hbox{\printatom{#2}}%
\expandafter\vtop\CF@tmp@str{to\ht\CF@box@boxa}{%
\offinterlineskip
@@ -1445,13 +1415,13 @@
\endgroup
}
-\CF@def\Chemabove{\begingroup\let\CF@tmp@str\@gobble\CF@chemabove@i}
+\CF@def\Chemabove{\begingroup\let\CF@tmp@str\@gobble\CF@chemabove@a}
-\CF@def\chemabove{\begingroup\let\CF@tmp@str\@firstofone\CF@chemabove@i}
+\CF@def\chemabove{\begingroup\let\CF@tmp@str\@firstofone\CF@chemabove@a}
-\CF@def\CF@chemabove@i{\@testopt\CF@chemabove@ii\CF@stacksep}
+\CF@def\CF@chemabove@a{\@testopt\CF@chemabove@b\CF@stacksep}
-\CF@def\CF@chemabove@ii[#1]#2#3{%
+\CF@def\CF@chemabove@b[#1]#2#3{%
\setbox\CF@box@boxa\hbox{\printatom{#2}}%
\expandafter\vbox\CF@tmp@str{to\ht\CF@box@boxa}{%
\offinterlineskip
@@ -1463,67 +1433,16 @@
\endgroup
}
-%%%%%% les signes et les fl\`eches
-\CF@def\chemsign{\@testopt\CF@chemsign{0.5em}}
-
-\CF@def\CF@chemsign[#1]#2{\hbox{\kern#1\relax#2\kern#1}}
-
-\CF@def\setchemrel#1#2#3{%
- \ifx\@empty#1\@empty\def\CF@chemrel@vsep{2pt}\else\def\CF@chemrel@vsep{#1}\fi
- \ifx\@empty#2\@empty\def\CF@chemrel@hsep{0.7em}\else\def\CF@chemrel@hsep{#2}\fi
- \ifx\@empty#3\@empty\def\CF@chemrel@length{4em}\else\def\CF@chemrel@length{#3}\fi
-}
-
-\setchemrel{}{}{}
-
-\CF@def\chemrel{%
- \immediate\write\CF@unused{Package \CF@package@name\space Warning: the macro \string\chemrel\space is deprecated. Please, build schemes with \string\schemestart\space and inside, use \string\arrow.}%
- \@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=\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;%
- \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@start)--(chemrel@end);\fill(chemrel@end)--++(-4pt,1.75pt)--+(1.5pt,-1.75pt)--cycle;
- }%
- {\node at(0,0)(chemrel@start){\vphantom I};\node at(\CF@chemrel@length,0)(chemrel@end){\vphantom I};%
- \draw[#3](chemrel@start)--(chemrel@end);%
- }%
- \endtikzpicture
- \kern\CF@chemrel@hsep
- }%
- \ifx\@empty#1\@empty
- \ifx\@empty#2\@empty\CF@chemrel@stuff
- \else\chembelow[\CF@chemrel@vsep]\CF@chemrel@stuff{\hbox{#2}}%
- \fi
- \else
- \ifx\@empty#2\@empty\chemabove[\CF@chemrel@vsep]\CF@chemrel@stuff{\hbox{#1}}%
- \else\chemabove[\CF@chemrel@vsep]{\chembelow[\CF@chemrel@vsep]\CF@chemrel@stuff{\hbox{#2}}}{\hbox{#1}}%
- \fi
- \fi
-}
-
-\CF@def\CF@remove@equichars#1<>#2\@nil{#1#2}
-
\CF@def\chemmove{\@testopt\CF@chemmove{}}
\CF@def\CF@chemmove[#1]#2{%
- \ifx\@empty#2\@empty
- \expandafter\@gobble
- \else
- \expandafter\@firstofone
- \fi
- {\expandafter\tikzpicture\romannumeral\CF@ifx{\@empty#1}\@empty
- {\z@[remember picture,overlay]}{\z@[remember picture,overlay,#1]}#2
+ \CF@doifnotempty{#2}%
+ {\expandafter\tikzpicture\romannumeral\CF@ifempty{#1}%
+ {\z@[overlay,remember picture,-CF]}
+ {\z@[overlay,remember picture,-CF,#1]}%
+ #2
\endtikzpicture
- }%
+ }%
}
\CF@def\chemnameinit#1{%
@@ -1534,22 +1453,18 @@
\CF@def\CF@parse@molname#1\\#2\@nil{%
\hbox to\CF@wd@stuffbox{\hss#1\hss}%
- \ifx\@empty#2\@empty
- \else
- \CF@swap@fi
- \CF@parse@molname#2\@nil
- \fi
+ \CF@doifnotempty{#2}{\CF@parse@molname#2\@nil}%
}
\CF@def\chemname{%
\@ifstar
- {\CF@name@dp@adjustfalse\CF@chemnam@i}
- {\CF@name@dp@adjusttrue\CF@chemnam@i}%
+ {\CF@name@dp@adjustfalse\CF@chemname@a}
+ {\CF@name@dp@adjusttrue \CF@chemname@a}%
}
-\CF@def\CF@chemnam@i{\@testopt\CF@chemname@ii{1.5ex}}
+\CF@def\CF@chemname@a{\@testopt\CF@chemname@b{1.5ex}}
-\CF@def\CF@chemname@ii[#1]#2#3{%
+\CF@def\CF@chemname@b[#1]#2#3{%
\setbox\CF@stuff@box\hbox{#2}%
\edef\CF@wd@stuffbox{\the\wd\CF@stuff@box}\edef\CF@dp@stuffbox{\the\dp\CF@stuff@box}%
\leavevmode
@@ -1576,9 +1491,9 @@
\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\CF@subscheme{\@testopt\CF@subscheme@a{}}
+\CF@def\CF@subscheme@a[#1]{\@testopt{\CF@subscheme@b[#1]}{text}}
+\CF@def\CF@subscheme@b[#1][#2]#3{\schemestart[#1][#2]#3\schemestop}
\CF@def\schemedebug#1{\ifcsname CF@reac@debug#1\endcsname\csname CF@reac@debug#1\endcsname\else\CF@reac@debugfalse\fi}
\schemedebug{false}
@@ -1586,26 +1501,34 @@
\CF@def\setcompoundstyle{\def\CF@default@compound@style}
\setcompoundstyle{}
-\CF@def\CF@set@arrow@style#1,#2,#3\@nil#4#5#6{%
+\CF@def\CF@set@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@exp@second{\def#5}{#2}%
+ \CF@expadd@tocs#6{#3}
+ \CF@twoexp@second{\def#6}{\expandafter\CF@sanitize@lastitem#6,\@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
+ \def\CF@default@arrow@style{-CF,}% style minimal par d\'efaut
+ \CF@set@style#1,\@empty,\@empty\@nil\CF@default@arrow@angle\CF@default@arrow@length\CF@default@arrow@style
+ \CF@doifempty\CF@default@arrow@angle{\def\CF@default@arrow@angle{0}}%
+ \CF@doifempty\CF@default@arrow@length{\def\CF@default@arrow@length{1}}%
}
-\setarrowdefault{}
+\setarrowdefault{}% style de fl\`eche
-\CF@def\setarrowoffset#1{\def\CF@arrow@offset{#1}\ifx\CF@arrow@offset\@empty\def\CF@arrow@offset{1em}\fi}
+\CF@def\setarrowoffset#1{%
+ \CF@ifempty{#1}{\def\CF@arrow@offset{1em}}{\def\CF@arrow@offset{#1}}%
+}%
\setarrowoffset{}
-\CF@def\setcompoundsep#1{\def\CF@compound@sep{#1}\ifx\CF@compound@sep\@empty\def\CF@compound@sep{5em}\fi}
+\CF@def\setcompoundsep#1{%
+ \CF@ifempty{#1}{\def\CF@compound@sep{5em}}{\def\CF@compound@sep{#1}}%
+}
\setcompoundsep{}
-\CF@def\setarrowlabelsep#1{\def\CF@arrow@labelsep{#1}\ifx\CF@arrow@labelsep\@empty\def\CF@arrow@labelsep{3pt}\fi}
+\CF@def\setarrowlabelsep#1{%
+ \CF@ifempty{#1}{\def\CF@arrow@labelsep{3pt}}{\def\CF@arrow@labelsep{#1}}%
+}
\setarrowlabelsep{}
\CF@def\chemleft#1#2\chemright#3{%
@@ -1638,47 +1561,45 @@
\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{\futurelet\CF@toks@a\CF@and@a}
-\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@a{%
+ \CF@ifx\CF@toks@a\bgroup
+ \CF@and@b
+ {\CF@and@b{}}%
}
-\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
+\CF@def\CF@and@b#1{%
+ \let\CF@sign@vshift\@empty
+ \CF@set@style#1,\@empty,\@empty\@nil\CF@signspace@ante\CF@signspace@post\CF@sign@vshift
+ \CF@doifempty\CF@signspace@ante{\let\CF@signspace@ante\CF@signspace@ante@default}%
+ \CF@doifempty\CF@signspace@post{\let\CF@signspace@post\CF@signspace@post@default}%
+ \CF@doifempty\CF@sign@vshift{\let\CF@sign@vshift\CF@sign@vshift@default}%
\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
+ \let\CF@sign@vshift@default\@empty
+ \CF@set@style#1,\@empty,\@empty\@nil\CF@signspace@ante@default\CF@signspace@post@default\CF@sign@vshift@default
+ \CF@doifempty\CF@signspace@ante@default{\def\CF@signspace@ante@default{.5em}}%
+ \CF@doifempty\CF@signspace@post@default{\def\CF@signspace@post@default{.5em}}%
+ \CF@doifempty\CF@sign@vshift@default{\let\CF@sign@vshift@default\z@}%
}
\setandsign{}
\CF@def\schemestart{%
\xdef\CF@scheme@nest{\number\numexpr\CF@scheme@nest+\@ne}%
- \@testopt\CF@schemestart@i{}%
+ \@testopt\CF@schemestart@a{}%
}
-\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
+\CF@def\CF@schemestart@a[#1]{%
+ \let\CF@arrow@style\@empty
+ \CF@set@style#1,\@empty,\@empty\@nil\CF@arrow@angle\CF@arrow@length\CF@arrow@style
+ \CF@doifempty\CF@arrow@angle{\let\CF@arrow@angle\CF@default@arrow@angle}%
+ \CF@doifempty\CF@arrow@length{\let\CF@arrow@length\CF@default@arrow@length}%
+ \CF@ifx\@empty\CF@arrow@style
+ {\let\CF@arrow@style\CF@default@arrow@style}
+ {\CF@twoexp@second{\def\CF@arrow@style}{\expandafter\CF@default@arrow@style\expandafter,\CF@arrow@style}}% se rajoute apr\`es le style par d\'efaut
\ifCF@reac@debug
\tikzpicture[every node/.style={draw,anchor=base,inner sep=\z@,outer sep=\z@,minimum size=1.5pt},baseline,remember picture]%
\else
@@ -1689,10 +1610,10 @@
\let\arrow\CF@arrow
\let\schemestop\CF@schemestop
\let\subscheme\CF@subscheme
- \@testopt{\CF@schemestart@ii[#1]}{text}%
+ \@testopt{\CF@schemestart@b[#1]}{text}%
}
-\CF@def\CF@schemestart@ii[#1][#2]{%
+\CF@def\CF@schemestart@b[#1][#2]{%
\ifnum\CF@scheme@nest=\@ne% la commande n'est pas imbriqu\'ee ?
\CF@compound@cnt\z@
\fi
@@ -1706,69 +1627,65 @@
\node(\CF@current@nodename){};%
\fi
\def\CF@next@nodeanchor{#2}%
- \ifx\CF@next@nodeanchor\@empty\def\CF@next@nodeanchor{text}\fi
+ \CF@doifempty\CF@next@nodeanchor{\def\CF@next@nodeanchor{text}}%
\let\CF@compound\@empty
- \CF@schemestart@iii
+ \CF@schemestart@c
}
-\CF@def\CF@schemestart@iii{%
- \futurelet\CF@toks@a\CF@schemestart@v% va sentir le prochain token...
+\CF@def\CF@schemestart@c{%
+ \futurelet\CF@toks@a\CF@schemestart@e
}
-{\def\:{\CF@schemestart@iv}\expandafter}\expandafter\CF@def\: {\futurelet\CF@toks@a\CF@schemestart@v}
+\expandafter\CF@def\expandafter\CF@schemestart@d\space{\futurelet\CF@toks@a\CF@schemestart@e}
-\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@schemestart@e{% ... et l'examine :
+ \CF@if@firsttokin@a{\arrow\schemestop\merge}%
+ {}
+ {\CF@ifx\CF@toks@a\bgroup
+ {\CF@add@nextarg}
+ {\CF@ifx\CF@toks@a\@sptoken
+ {\CF@add@tocs\CF@compound{ }%
+ \CF@schemestart@d
+ }
+ {\afterassignment\CF@schemestart@c
+ \CF@add@tocs\CF@compound
+ }%
+ }%
+ }%
}
-\CF@def\CF@add@nextarg#1{\CF@add@tocs\CF@compound{{#1}}\CF@schemestart@iii}
+\CF@def\CF@add@nextarg#1{\CF@add@tocs\CF@compound{{#1}}\CF@schemestart@c}
\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@doifnotempty\CF@compound
+ {\global\advance\CF@compound@cnt\@ne
+ \CF@ifx\CF@default@compound@style\@empty
+ {\let\CF@current@nodestyle\@empty}
+ {\CF@exp@second{\def\CF@current@nodestyle}{\CF@default@compound@style,}}%
\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@ifempty{#2}%
+ {\CF@doifnotempty\CF@next@nodestyle
+ {\CF@expadd@tocs\CF@current@nodestyle{\expandafter,\CF@next@nodestyle}}%
+ }
+ {\CF@doifnotempty\CF@next@nodestyle
+ {\immediate\write\CF@unused{Package \CF@package@name\space Warning: two styles for the same node, first style "\CF@next@nodestyle" ignored^^J}%
+ }%
\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
+ }%
+ \CF@ifempty{#1}
+ {\edef\CF@tmp@str{\CF@ifempty\CF@next@nodename{c\number\CF@compound@cnt}{\CF@next@nodename}}%
+ }
+ {\CF@doifnotempty\CF@next@nodename
+ {\immediate\write\CF@unused{Package \CF@package@name\space Warning: two names for the same node, first name "\CF@next@nodename" ignored^^J}%
+ }%
\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{%
@@ -1786,65 +1703,65 @@
\CF@def\CF@arrow{%
\@ifnextchar(%
- \CF@arrow@i
- {\@ifnextchar\bgroup{\CF@arrow@ii(.[]--.[])}{\CF@arrow@ii(.[]--.[]){}}}%
+ \CF@arrow@a
+ {\@ifnextchar\bgroup{\CF@arrow@b(.[]--.[])}{\CF@arrow@b(.[]--.[]){}}}%
}
-\CF@def\CF@arrow@i(#1--#2){%
+\CF@def\CF@arrow@a(#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{}}%
+ \@ifnextchar\bgroup{\expandafter\CF@arrow@b\CF@tmp@str}{\expandafter\CF@arrow@b\CF@tmp@str{}}%
}
-\CF@def\CF@arrow@ii(#1.#2[#3]--#4.#5[#6])#7{%
+\CF@def\CF@arrow@b(#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@doifempty\CF@current@arrowtype{\def\CF@current@arrowtype{->}}%
+ \@testopt{\CF@arrow@c(#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@c(#1.#2[#3]--#4.#5[#6])[#7]{%
+ \def\CF@tmp@str{\CF@arrow@e(#1.#2[#3]--#4.#5[#6])}%
+ \CF@arrow@d#7,\@empty,\@empty\@nil
}
-\CF@def\CF@arrow@iv#1,#2,#3\@nil{%
+\CF@def\CF@arrow@d#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
+% #1, #4 : nom des nodes #2, #5 : ancres des nodes #3, #6 : styles 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{%
+\CF@def\CF@arrow@e(#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
+ \if\CF@arobas\expandafter\@car\detokenize{#1.}\@nil% "." au cas o\`u #1 est vide
+ \if\CF@arobas\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
+ \let\CF@next@action\CF@schemestart@c
\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@doifnotempty\CF@arrow@current@style{\CF@add@tocs\CF@arrow@current@style,}%
+ \CF@doifnotempty{#9}{\CF@add@tocs\CF@arrow@current@style{#9,}}%
\CF@display@compound{}{#3}%
\def\CF@next@nodename{#4}%
- \expandafter\def\expandafter\CF@current@nodename\expandafter{\@gobble#1}%
+ \CF@exp@second{\def\CF@current@nodename}{\@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}%
+ \CF@arrow@f{#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
+ \CF@doifnotempty\CF@arrow@current@style{\CF@add@tocs\CF@arrow@current@style,}%
+ \CF@doifnotempty{#9}{\CF@add@tocs\CF@arrow@current@style{#9,}}%
+ \if\CF@arobas\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}%
+ \edef\CF@arrow@start@name{\CF@ifempty{#1}\CF@current@nodename{#1}\CF@doifnotempty{#2}{.#2}}%
+ \CF@arrow@f{#7}{#8}{#2}{#5}%
\def\CF@next@nodename{#4}%
\def\CF@next@nodestyle{#6}%
\fi
@@ -1852,58 +1769,56 @@
\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{\futurelet\CF@toks@a\CF@arrow@gobspaces@a}
-\CF@def\CF@arrow@gobspaces@i{%
- \ifx\@sptoken\CF@toks@a
- \expandafter\CF@arrow@gobspaces@ii
- \else
- \expandafter\CF@next@action
- \fi
+\CF@def\CF@arrow@gobspaces@a{%
+ \CF@ifx\@sptoken\CF@toks@a
+ \CF@arrow@gobspaces@b
+ \CF@next@action
}
-{\def\:{\CF@arrow@gobspaces@ii}\expandafter}\expandafter\def\: {\futurelet\CF@toks@a\CF@arrow@gobspaces@i}
+\expandafter\def\expandafter\CF@arrow@gobspaces@b\space{\futurelet\CF@toks@a\CF@arrow@gobspaces@a}
-\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@\number\CF@scheme@nest){};%
- \edef\CF@arrow@end@name{end@arrow@i@\number\CF@scheme@nest\ifx\@empty#4\@empty\else.4\fi}%
+\CF@def\CF@arrow@f#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@c}%
+ \def\CF@arrow@current@angle{#1}\CF@doifempty\CF@arrow@current@angle{\let\CF@arrow@current@angle\CF@arrow@angle}%
+ \def\CF@current@arrow@length{#2}\CF@doifempty\CF@current@arrow@length{\let\CF@current@arrow@length\CF@arrow@length}%
+ \node[at=(\CF@current@nodename.\CF@ifempty{#3}\CF@arrow@current@angle{#3}),shift=(\CF@arrow@current@angle:\CF@current@arrow@length*\CF@compound@sep),cyan,fill](end@arrow@i@\number\CF@scheme@nest){};%
+ \edef\CF@arrow@end@name{end@arrow@i@\number\CF@scheme@nest\CF@doifnotempty{#4}{.#4}}%
\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){};%
+ \node[at=(\CF@current@nodename.\CF@ifempty{#3}\CF@arrow@current@angle{#3}),shift=(\CF@arrow@current@angle:\CF@arrow@offset),red,fill](start@arrow){};%
+ \node[at=(\CF@current@nodename.\CF@ifempty{#3}\CF@arrow@current@angle{#3}),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){};%
+ \node[at=(\CF@current@nodename.\CF@ifempty{#3}\CF@arrow@current@angle{#3}),shift=(\CF@arrow@current@angle:\CF@arrow@offset)](start@arrow){};%
+ \node[at=(\CF@current@nodename.\CF@ifempty{#3}\CF@arrow@current@angle{#3}),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
+ \csname\expandafter\CF@grab@arrow@name\CF@current@arrowtype[\@nil\CF@three@ea\endcsname
\expandafter\CF@grab@arrow@args\CF@current@arrowtype[]\@nil[][][][][][][][]\@nil
\def\CF@current@nodename{end@arrow@i@\number\CF@scheme@nest}%
- \edef\CF@next@nodeanchor{\ifx\@empty#4\@empty180+\CF@arrow@current@angle\else#4\fi}%
+ \edef\CF@next@nodeanchor{\CF@ifempty{#4}{180+\CF@arrow@current@angle}{#4}}%
}
% 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{%
- \expandafter\def\expandafter\CF@arrow@start@name\expandafter{\@gobble#2}%
- \expandafter\def\expandafter\CF@arrow@end@name\expandafter{\@gobble#4}%
+ \CF@exp@second{\def\CF@arrow@start@name}{\@gobble#2}%
+ \CF@exp@second{\def\CF@arrow@end@name}{\@gobble#4}%
\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}%
\pgfmathanglebetweenpoints
- {\pgfpointanchor{\@gobble#2}{\ifx\@empty#3\@empty center\else#3\fi}}
- {\pgfpointanchor{\@gobble#4}{\ifx\@empty#5\@empty center\else#5\fi}}%
+ {\pgfpointanchor{\@gobble#2}{\CF@ifempty{#3}{center}{#3}}}
+ {\pgfpointanchor{\@gobble#4}{\CF@ifempty{#5}{center}{#5}}}%
\let\CF@arrow@current@angle\pgfmathresult
- \ifx\@empty#6\@empty\else\CF@add@tocs\CF@arrow@current@style{#6,}\fi%
+ \CF@doifnotempty{#6}{\CF@add@tocs\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
+ \expandafter\futurelet\expandafter\CF@toks@a\expandafter\CF@gobtonil\@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
@@ -1914,21 +1829,20 @@
\CF@def\CF@merge#1({%
\CF@merge@grab@chardir#1[][]\@nil
- \CF@merge@i(%
+ \CF@merge@a(%
}
-\CF@def\CF@merge@i#1--(#2){\@testopt{\CF@merge@ii#1--(#2)}{}}
+\CF@def\CF@merge@a#1--(#2){\@testopt{\CF@merge@b#1--(#2)}{}}
-\CF@def\CF@merge@ii#1--(#2)[#3]{%
+\CF@def\CF@merge@b#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]}%
+ \pgfmathsetmacro\CF@merge@extreme@result{\csname CF@merge@\CF@merge@extreme\endcsname\CF@merge@sign\CF@merge@fromcoeff*\CF@compound@sep}%
+ \CF@merge@c#1(\relax)% trace les lignes entre les noeuds pr\'ec\'edents et la ligne de jonction
+ \CF@exp@second{\def\CF@tmp@str}{\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
@@ -1938,15 +1852,15 @@
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}-;%
+ \expandafter\draw\expandafter[\CF@merge@style,shorten <=0](merge@point)--(end@merge)%
+ \expandafter\CF@arrow@display@label@a\expandafter{\CF@merge@labelup}{.5}+\expandafter\CF@arrow@display@label@a\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
+ \expandafter\CF@merge@d\CF@tmp@str\@nil
}
-\CF@def\CF@merge@iii(#1){%
+\CF@def\CF@merge@c(#1){%
\if\relax\expandafter\noexpand\@car#1\@nil
\else
\CF@if@stop{#1}%
@@ -1954,28 +1868,29 @@
{\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);%
+ \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);%
+ \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
+ \expandafter\CF@merge@c
\fi
}
-\CF@def\CF@merge@iv#1.#2[#3]\@nil{%
+\CF@def\CF@merge@d#1.#2[#3]\@nil{%
\def\CF@next@nodename{#1}%
- \edef\CF@next@nodeanchor{\ifx\@empty#2\@empty180+\CF@merge@angle\else#2\fi}%
+ \edef\CF@next@nodeanchor{\CF@ifempty{#2}{180+\CF@merge@angle}{#2}}%
\def\CF@next@nodestyle{#3}%
\let\CF@compound\@empty
- \CF@schemestart@iii
+ \CF@schemestart@c
}
\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@ifempty{#1}{\def\CF@merge@fromcoeff{0.5}}{\def\CF@merge@fromcoeff{#1}}%
+ \CF@exp@second{\def\CF@merge@tocoeff}{#2}\CF@doifempty\CF@merge@tocoeff{\def\CF@merge@tocoeff{0.5}}%
+ \CF@exp@second{\def\CF@merge@splitcoeff}{#3}\CF@doifempty\CF@merge@splitcoeff{\def\CF@merge@splitcoeff{0.5}}%
+ \def\CF@merge@style{-CF}\CF@doifnotempty{#4}{\CF@expadd@tocs\CF@merge@style{\expandafter,#4}}%
+ \CF@twoexp@second{\def\CF@merge@style}{\expandafter\CF@sanitize@lastitem\CF@merge@style,\@empty\@nil}%
}
\CF@def\CF@merge@parse@nodelist(#1){%
@@ -2000,13 +1915,13 @@
\CF@def\CF@make@parameter@text#1{%
\toks\z@{}%
\CF@cnt@groupnumber#1\relax
- \CF@make@parameter@text@i1%
+ \CF@make@parameter@text@a1%
}
-\CF@def\CF@make@parameter@text@i#1{%
+\CF@def\CF@make@parameter@text@a#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}%
+ \expandafter\CF@make@parameter@text@a\expandafter{\number\numexpr#1+1\expandafter}%
\fi
}
@@ -2015,11 +1930,11 @@
\begingroup
\CF@make@parameter@text{#1}%
\expandafter\endgroup
- \expandafter\def\csname\detokenize{#2}\expandafter\endcsname\the\toks\z@{#3\CF@gobble@tonil}%
+ \expandafter\def\csname\detokenize{#2}\expandafter\endcsname\the\toks\z@{#3\CF@gobtonil}%
}
-\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@if@stop#1{\CF@if@stop@a#1.\@nil}
+\CF@def\CF@if@stop@a#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}
@@ -2029,14 +1944,13 @@
% #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@doifnotempty{#1#5}
+ {\path(#4)--(#8)\CF@arrow@display@label@a{#1}{#2}{#3}\CF@arrow@display@label@a{#5}{#6}{#7};}%
}
-\CF@def\CF@arrow@display@label@i#1#2#3{%
- \ifx\@empty#1\@empty\else
- \if*\expandafter\@car\detokenize{#1}\@nil
+\CF@def\CF@arrow@display@label@a#1#2#3{%
+ \CF@doifnotempty{#1}
+ {\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}%
@@ -2052,12 +1966,12 @@
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@
+ \unless\ifdim\CF@ifempty{#1}\z@{#1}=\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){};}%
@@ -2068,25 +1982,25 @@
\definearrow3{->}{%
\CF@arrow@shift@nodes{#3}%
- \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full](\CF@arrow@start@node)--(\CF@arrow@end@node);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\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);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@end@node)--(\CF@arrow@start@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)%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\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);
+ coordinate[at=(midway@i),shift=(\CF@ifempty{#4}{225}{#4+180}+\CF@arrow@current@angle:\CF@ifempty{#5}{5pt}{#5})](line@start)%
+ coordinate[at=(midway@i),shift=(\CF@ifempty{#4}{45}{#4}+\CF@arrow@current@angle:\CF@ifempty{#5}{5pt}{#5})](line@end)%
+ coordinate[at=(midway@ii),shift=(\CF@ifempty{#4}{225}{#4+180}+\CF@arrow@current@angle:\CF@ifempty{#5}{5pt}{#5})](line@start@i)%
+ coordinate[at=(midway@ii),shift=(\CF@ifempty{#4}{45}{#4}+\CF@arrow@current@angle:\CF@ifempty{#5}{5pt}{#5})](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
@@ -2094,95 +2008,206 @@
\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);%
+ \path(\CF@arrow@start@node)--(\CF@arrow@end@node)%
+ node[pos=0.5,sloped,xshift=-1pt](\CF@arrow@start@node1){}node[pos=0.5,sloped,xshift=1pt](\CF@arrow@end@node1){};%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node1)--(\CF@arrow@end@node);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@end@node1)--(\CF@arrow@start@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)%
+ \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);%
+ \begingroup
+ \pgfarrowharpoontrue
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @d1)--(\CF@arrow@start@node @d0);%
+ \endgroup
\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)%
+ \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);%
+ \begingroup
+ \pgfarrowharpoontrue
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @d1)--(\CF@arrow@start@node @d0);%
+ \endgroup
\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)%
+ \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);%
+ \begingroup
+ \pgfarrowharpoontrue
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1);%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node @d1)--(\CF@arrow@start@node @d0);%
+ \endgroup
\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}
+ \CF@arrow@display@label{#1}{0.5}+\CF@arrow@start@node{#2}{0.5}-\CF@arrow@end@node
+}
\definearrow5{-U>}{%
\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\else\unexpanded\expandafter{\CF@arrow@current@style}\fi]}%
+ \expandafter\draw\expandafter[\CF@arrow@current@style](\CF@arrow@start@node)--(\CF@arrow@end@node)node[midway](Uarrow@arctangent){};%
+ \CF@ifempty{#4}
+ {\def\CF@Uarrow@radius{0.333}}
+ {\def\CF@Uarrow@radius{#4}}%
+ \CF@ifempty{#5}%
+ {\def\CF@Uarrow@absangle{60}}
+ {\pgfmathsetmacro\CF@Uarrow@absangle{abs(#5)}}% ne prendre en compte que la valeur absolue de l'angle
+ \edef\CF@tmp@str{[\CF@ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF@arrow@current@style}}]}%
\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\else\unexpanded\expandafter{\CF@arrow@current@style},-CF@full\fi]}%
+ arc[radius=\CF@compound@sep*\CF@current@arrow@length*\CF@Uarrow@radius,start angle=\CF@arrow@current@angle-90,delta angle=-\CF@Uarrow@absangle]node(Uarrow@start){};
+ \edef\CF@tmp@str{[\CF@ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF@arrow@current@style}}]}%
\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){};
- \pgfmathparse{#51*#41*cos(\CF@arrow@current@angle)<0?"-":"+"}\let\CF@tmp@str\pgfmathresult
- \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}
+ arc[radius=\CF@compound@sep*\CF@current@arrow@length*\CF@Uarrow@radius,start angle=\CF@arrow@current@angle-90,delta angle=\CF@Uarrow@absangle]node(Uarrow@end){};
+ \pgfmathsetmacro\CF@tmp@str{\CF@Uarrow@radius*cos(\CF@arrow@current@angle)<0?"-":"+"}%
+ \ifdim\CF@Uarrow@radius pt>\z@
+ \CF@arrow@display@label{#1}{0}\CF@tmp@str{Uarrow@start}{#2}{1}\CF@tmp@str{Uarrow@end}%
+ \else
+ \CF@arrow@display@label{#2}{0}\CF@tmp@str{Uarrow@start}{#1}{1}\CF@tmp@str{Uarrow@end}%
+ \fi
+}
+
+\pgfdeclarearrow{%
+ name = CF,%
+ defaults = {%
+ length = 3pt 5 1,%
+ width' = 0pt .8,%
+ inset' = 0pt .5,%
+ line width = 0pt 1 1,%
+ round%
+ },%
+ setup code = {%
+ % Cap the line width at 1/4th distance from inset to tip
+ \pgf@x\pgfarrowlength
+ \advance\pgf@x by-\pgfarrowinset
+ \pgf@x.25\pgf@x
+ \ifdim\pgf@x<\pgfarrowlinewidth\pgfarrowlinewidth\pgf@x\fi
+ % Compute front miter length:
+ \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}%
+ \let\pgf@temp@quot\pgfmathresult%
+ \pgf@x\pgfmathresult pt%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@x4\pgf@x%
+ \advance\pgf@x by1pt%
+ \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
+ \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter
+ \pgf@xc.5\pgf@xc
+ \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter
+ % Compute back miter length:
+ \pgf@ya.5\pgfarrowwidth%
+ \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowlength}{\pgfmath@tonumber\pgf@ya}%
+ \pgf@yb\pgfmathresult pt%
+ \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowinset}{\pgfmath@tonumber\pgf@ya}%
+ \pgf@ya\pgfmathresult pt%
+ \advance\pgf@yb by-\pgf@ya%
+ \pgf@yb.5\pgf@yb% half angle in yb
+ \pgfmathtan@{\pgf@sys@tonumber\pgf@yb}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@yc\pgfmathresult\pgfarrowlinewidth%
+ \pgf@yc.5\pgf@yc%
+ \advance\pgf@ya by\pgf@yb%
+ \pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}%
+ \pgf@ya\pgfmathresulty\pgf@yc% ya is the back miter
+ \pgf@yb\pgfmathresultx\pgf@yc% yb is the top miter
+ \ifdim\pgfarrowinset=\z@
+ \pgf@ya.5\pgfarrowlinewidth% easy: back miter is half linewidth
+ \fi
+ % Compute inset miter length:
+ \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowinset}{\pgf@sys@tonumber\pgfarrowwidth}%
+ \let\pgf@temp@quot\pgfmathresult%
+ \pgf@x\pgfmathresult pt%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@x4\pgf@x%\pgf@ya
+ \advance\pgf@x by1pt%
+ \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
+ \pgf@yc\pgfmathresult\pgfarrowlinewidth% yc is inset miter
+ \pgf@yc.5\pgf@yc%
+ % Inner length (pgfutil@tempdima) is now arrowlength - front miter - back miter
+ \pgfutil@tempdima\pgfarrowlength%
+ \advance\pgfutil@tempdima by-\pgf@xc%
+ \advance\pgfutil@tempdima by-\pgf@ya%
+ \pgfutil@tempdimb.5\pgfarrowwidth%
+ \advance\pgfutil@tempdimb by-\pgf@yb%
+ % harpoon miter correction
+ \ifpgfarrowroundjoin
+ \pgfarrowssetbackend{\pgf@ya\advance\pgf@x by-.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssetbackend{0pt}
+ \fi
+ \ifpgfarrowharpoon
+ \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by-.25\pgfarrowlinewidth}%
+ \ifpgfarrowreversed
+ \ifdim\pgfinnerlinewidth>0pt
+ \pgfarrowssetlineend{\pgfarrowinset}%
+ \else
+ \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by-.25\pgfarrowlinewidth}%
+ \fi
+ \fi
+ \fi
+ \ifpgfarrowroundjoin
+ \pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi}%
+ \fi
+ % The hull:
+ \pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}%
+ \pgfarrowsupperhullpoint{0pt}{.5\pgfarrowwidth}%
+ \pgfarrowshullpoint{\pgfarrowinset}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else 0pt\fi}%
+ % Adjust inset
+ \pgfarrowssetvisualbackend{\pgfarrowinset}%
+ \advance\pgfarrowinset by\pgf@yc%
+ % The following are needed in the code:
+ \pgfarrowssavethe\pgfutil@tempdima
+ \pgfarrowssavethe\pgfutil@tempdimb
+ \pgfarrowssavethe\pgfarrowlinewidth
+ \pgfarrowssavethe\pgf@ya
+ \pgfarrowssavethe\pgfarrowinset
+ },%
+ drawing code = {%
+ \pgfsetdash{}{0pt}%
+ \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi
+ \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{\pgfarrowlinewidth}\fi
+ \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by\pgf@ya}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@ya}{\pgfutil@tempdimb}}%
+ \pgfpathlineto{\pgfqpoint{\pgfarrowinset}{0pt}}%
+ \ifpgfarrowharpoon \else
+ \pgfpathlineto{\pgfqpoint{\pgf@ya}{-\pgfutil@tempdimb}}%
+ \fi
+ \pgfpathclose
+ \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt \pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi
+ },%
+ parameters = {%
+ \the\pgfarrowlinewidth,%
+ \the\pgfarrowlength,%
+ \the\pgfarrowwidth,%
+ \the\pgfarrowinset,%
+ \ifpgfarrowharpoon h\fi%
+ \ifpgfarrowopen o\fi%
+ \ifpgfarrowroundjoin j\fi%
+ }%
+}
\chemfigrestorecatcode
@@ -2312,11 +2337,11 @@ v1.0f 2012/02/24
v1.0g 2012/11/16
- correction d'un bug dans \CF@direct@arrow pour faire prendre en
compte le style des fl\`eche par d\'efaut
- - correction d'un bug dans \CF@lewis@iii : la boite *doit* \^etre
+ - correction d'un bug dans \CF@lewis@c : la boite *doit* \^etre
compos\'ee en dehors de l'environnement tikzpicture pour
\'eviter nullfont si jamais \printatom ne passe pas en mode
math.
- - correction d'un bug dans \CF@chemfig@v : si une longueur par
+ - correction d'un bug dans \CF@chemfig@e : si une longueur par
d\'efaut est modifi\'ee par [,<l>] au d\'ebut d'une mol\'ecule
et si des cycles \'etaient emboit\'es, cette longueur n'\'etait
pas appliqu\'ee aux sous-cycles.
@@ -2338,7 +2363,7 @@ v1.1 2015/02/13
- correction d'un bug dans \CF@seek@submol : la macro
\CF@remain@molecule est d\'epouill\'e de son \'eventuel espace
en premi\`ere position.
- - correction d'un bug dans \CF@arrow@vi : le nom du prochain
+ - correction d'un bug dans \CF@arrow@f : le nom du prochain
noeud courant "end@arrow@i" \'etait erron\'e dans le cas o\`u une
fl\`eche contenait un sous sch\'ema. Ce nom doit d\'ependre de
\CF@scheme@nest.
@@ -2356,5 +2381,22 @@ v1.1 2015/02/13
v1.1a 2015/02/23
- correction d'un bug dans \CF@grab@bondoffset. Si \chemfig est
dans l'argument d'une macro, les # sont doubl\'es par l'action
- de \scantokens de la macro \CF@chemfig@iv et il faut un
- argument d\'elimit\'e avant "(" pour absorber tous les #. \ No newline at end of file
+ de \scantokens de la macro \CF@chemfig@d et il faut un
+ argument d\'elimit\'e avant "(" pour absorber tous les #.
+----------------------------------------------------------------------
+v1.2 2015/10/08
+ - correction d'un bug dans le trac\'e des liaisons de Cram.
+ - cr\'eation de \setangleincrement.
+ - chargement de "arrows.meta" et d\'efinition de la fl\`eche "CF"
+ bas\'ee sur "Stealth" et d\'efinie avec \pgfdeclarearrow.
+ Les anciennes fl\`eches "CF@full" et "CF@half" sont
+ abandonn\'ees puisque d\'efinies avec \pgfarrowsdeclare.
+ - fl\`eche "-U>" corrige\'e : le placement des labels est
+ maintenant correct dans tous les cas. Ainsi :
+ -U>[<a>][<b>][<d>][r][a]
+ place le label <a> pr\`es du d\'ebut de la fl\`eche, quels que
+ soient les signes du rayon r et de l'angle a.
+ - \chemrel, \setchemrel et \chemsign sont supprim\'ees.
+ - compatibilit\'e, avec les limitations d'usage, avec la
+ librairie "externalize" : le \begin{tikzpicture} voit
+ d\'esormais le \end correspondant dans la macro \CF@chemfig@d. \ 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 a427cffef5f..15a49e26a36 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 v1.1a |
+% | chemfig v1.2 |
% | |
-% | 23 february 2015 |
+% | 8 october 2015 |
% | |
% |__________________________________________________________________|
%