summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/chemfig/chemfig.tex')
-rw-r--r--Master/texmf-dist/tex/generic/chemfig/chemfig.tex1926
1 files changed, 1016 insertions, 910 deletions
diff --git a/Master/texmf-dist/tex/generic/chemfig/chemfig.tex b/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
index 6c4530c9317..71bdffd9225 100644
--- a/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
+++ b/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
@@ -1,396 +1,462 @@
-% __________________________________________________________________
-% | |
-% | chemfig v1.2e |
-% |__________________________________________________________________|
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "chemfig"
%
-% This is chemfig.tex, the code of the "chemfig" package.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\CFname {chemfig} %
+\def\CFver {1.3} %
+% %
+\def\CFdate {2018/03/08} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% Maintainer : Christian Tellechea
-% E-mail : unbonpetit@openmailbox.org
-% Comments, bug reports and suggestions are welcome.
-% Licence : Released under the LaTeX Project Public License v1.3c
-% or later, see http://www.latex-project.org/lppl.txt
-% Package URL: http://ctan.org/pkg/chemfig
-% Copyright : Christian Tellechea 2010-2015
-%
-% The "chemfig" package consists of the 8 following files:
-% - chemfig.tex (this file)
-% - chemfig.sty (the package file for LaTeX)
-% - t-chemfig.tex (the package file for conTeXt)
-% - README
-% - chemfig_doc_en.tex, chemfig_doc_en.pdf (english manual)
-% - chemfig_doc_fr.tex, chemfig_doc_fr.pdf (manual in french)
-%
-% --------------------------------------------------------------------
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-%
-% % http://www.latex-project.org/lppl.txt
-%
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-% --------------------------------------------------------------------
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Christian Tellechea
-% --------------------------------------------------------------------
-
-\def\usechemfigcatcode{%
- \begingroup
- \def\X##1{\catcode\number`##1=\number\catcode`##1\relax}
- \xdef\chemfigrestorecatcode{%
- \X\[\X\]\X\:\X\(\X\)\X\,\X\-\X\=\X\~\X\!\X\?\X\<\X\>\X\;\X\*\X\|\X\@\X\
- \let\noexpand\chemfigrestorecatcode\relax
- }%
- \endgroup
- \catcode`\[12 \catcode`\]12 \catcode`\:12 \catcode`\(12
- \catcode`\)12 \catcode`\,12 \catcode`\-12 \catcode`\=12
- \catcode`\~12 \catcode`\!12 \catcode`\?12 \catcode`\<12
- \catcode`\>12 \catcode`\;12 \catcode`\*12 \catcode`\|12
- \catcode`\@11 \catcode`\#6 \catcode`\ 10
-}
-
-\usechemfigcatcode
-
-\def\CF@def#1{%
- \ifdefined#1%
- \errmessage{Package \CF@package@name\space Error: the macro \string#1\space is already defined. Please, email the author.}%
- \fi
- \def#1%
-}
-
-\CF@def\CF@ver {1.2e}
-\CF@def\CF@date {2017/05/20}
-\CF@def\CF@fr@date {20 mai 2017}
-\CF@def\CF@en@date {20 may 2017}
-\CF@def\CF@package@name{chemfig}
-
-\CF@def\CF@error#1{\errmessage{Package \CF@package@name\space Error: #1.}}
-\CF@def\CF@warning#1{\immediate\write\CF@unused{Package \CF@package@name\space Warning: #1^^J}}
-
-% V\'erifie que eTeX est le moteur utilis\'e
+%____________________________________________________________________
+% Author : Christian Tellechea |
+% Status : Maintained |
+% Email : unbonpetit@netc.fr |
+% Package URL: https://www.ctan.org/pkg/chemfig |
+% Bug tracker: https://framagit.org/unbonpetit/chemfig/issues |
+% Repository : https://framagit.org/unbonpetit/chemfig/tree/master |
+% Copyright : Christian Tellechea 2010-2018 |
+% Licence : Released under the LaTeX Project Public License v1.3c |
+% or later, see http://www.latex-project.org/lppl.txt |
+% Files : 1) chemfig.tex |
+% 2) chemfig.sty |
+% 3) t-chemfig.tex |
+% 4) README |
+% 5) chemfig_doc_fr.tex |
+% 6) chemfig_doc_fr.pdf |
+% 7) chemfig_doc_en.tex |
+% 8) chemfig_doc_fr.pdf |
+%--------------------------------------------------------------------
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% P R É A L A B L E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-------------------------- Annonce package --------------------------
+\ifdefined\ProvidesPackage\else
+ \immediate\write -1 {%
+ Package: \CFname\space\CFdate\space\space v\CFver\space\space
+ Draw molecule with an easy syntax (CT)}%
+\fi
+%------------------------- Vérification etex -------------------------
\begingroup
- \edef\CF@ver{\meaning\eTeXversion}
- \edef\CF@date{\string\eTeXversion}
- \ifx\CF@ver\CF@date
- \endgroup
- \else
- \endgroup
- \errmessage{Package \CF@package@name\space Error: you are not using an eTeX engine, chemfig cannot work.}%
- \expandafter\endinput
+ \edef\CFtempa{\meaning\eTeXversion}
+ \edef\CFtempb{\string\eTeXversion}
+ \let\CFtemp\endgroup
+ \unless\ifx\CFtempa\CFtempb
+ \errmessage{Package \CFname\space Error: you are not using an eTeX engine, chemfig cannot work.}%
+ \def\CFtemp{\endgroup\endinput}%
\fi
+\CFtemp
-\expandafter\ifx\csname @latexerr\endcsname\relax% on n'utilise pas LaTeX ?
- \ifdefined\tikzpicture\else
- \def\CF@next@action{\input tikz.tex}%
- \expandafter\CF@next@action
- \fi
- \immediate\write\m@ne{Package: \CF@package@name\space\CF@date\space\space v\CF@ver\space\space Draw molecule with an easy syntax}%
- \long\def\@firstoftwo#1#2{#1}
- \long\def\@secondoftwo#1#2{#2}
- \long\def\@firstofone#1{#1}
- \long\def\@gobble#1{}
- \long\def\@gobbletwo#1#2{}
- \def\@car#1#2\@nil{#1}
- \def\@makeother#1{\catcode`#1=12\relax}
- \long\def\@ifnextchar#1#2#3{%
- \let\reserved@d=#1%
- \def\reserved@a{#2}%
- \def\reserved@b{#3}%
- \futurelet\@let@arg\@ifnch}
- \def\@ifnch{%
- \ifx\@let@arg\@sptoken
- \let\reserved@c\@xifnch
- \else
- \ifx\@let@arg\reserved@d
- \let\reserved@c\reserved@a
- \else
- \let\reserved@c\reserved@b
- \fi
- \fi
- \reserved@c}
- \def\:{\let\@sptoken= } \:
- \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@arg\@ifnch}
- \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
- \long\def\@testopt#1#2{\@ifnextchar[{#1}{#1[{#2}]}}
- \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}}%
+%------------------------ Chargement simplekv ------------------------
+\unless\ifdefined\skvname
+ \begingroup\def\CFtemp{\endgroup\input simplekv.tex\relax}%
+ \expandafter\CFtemp
\fi
+%-------------------------- Chargement tikz --------------------------
+\unless\ifdefined\tikzpicture
+ \begingroup\def\CFtemp{\endgroup\input tikz.tex\relax}%
+ \expandafter\CFtemp
+\fi
\usetikzlibrary{arrows.meta}
+%-------------------------- Régime catcodes --------------------------
+\begingroup
+ \def\X#1{\catcode\number`#1=\number\catcode`#1\relax}
+ \xdef\CFrestorecatcode{\X\[\X\]\X\:\X\(\X\)\X\,\X\-\X\=\X\~\X\!\X\?\X\<\X\>\X\;\X\*\X\|\X\@\X\ }%
+\endgroup
+\catcode`\[12 \catcode`\]12 \catcode`\:12 \catcode`\(12
+\catcode`\)12 \catcode`\,12 \catcode`\-12 \catcode`\=12
+\catcode`\~12 \catcode`\!12 \catcode`\?12 \catcode`\<12
+\catcode`\>12 \catcode`\;12 \catcode`\*12 \catcode`\|12
+\catcode`\@11 \catcode`\#6 \catcode`\ 10
+
+%--------------------------- Allocations -----------------------------
\newcount\CF@cnt@atomingroup
\newcount\CF@cnt@groupnumber
\newcount\CF@cnt@atomnumber
\newcount\CF@cnt@cycle
+\newcount\CF@compound@cnt
\newif\ifCF@incycle
\newif\ifCF@cyclearc
\newif\ifCF@definesubmol
\newif\ifCF@name@dp@adjust
\newif\ifCF@macrofixedbondlength
-\newif\ifCF@globalfixedbondlength
+\newif\ifCF@name@start
+\newif\ifCF@name@end
\newdimen\CF@dim
+\newdimen\CF@arrow@size
\newbox\CF@lewis@box
\newbox\CF@box@boxa
-\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{%
- \@makeother\[\@makeother\]\@makeother\:\@makeother\(\@makeother\)%
- \@makeother\,\@makeother\-\@makeother\=\@makeother\~\@makeother\!%
- \@makeother\?\@makeother\<\@makeother\>\@makeother\;\@makeother\*%
- \@makeother\|\@makeother\#\@makeother\@%
+%-------------------------- Petites macros ---------------------------
+\def\CF@quark{\CF@quark}
+\long\def\CF@execfirst#1#2{#1}
+\long\def\CF@execsecond#1#2{#2}
+\long\def\CF@id#1{#1}
+\long\def\CF@gobarg#1{}
+\long\def\CF@gobtwoargs#1#2{}
+\def\CF@firsttonil#1#2\@nil{#1}
+\def\CF@sanitize@lastitem#1,\empty#2\@nil{#1}
+\def\CF@gobtikzinstruction#1;{}
+\def\CF@makeother#1{\catcode`#1=12\relax}
+\def\CF@lettoken#1#2{\let#1= #2}\CF@lettoken\CF@sptoken{ }
+\def\CF@ifx#1#2{\ifx#1#2\expandafter\CF@execfirst\else\expandafter\CF@execsecond\fi}
+\def\CF@ifempty#1{\ifx\empty#1\empty\expandafter\CF@execfirst\else\expandafter\CF@execsecond\fi}
+\def\CF@doifempty#1{\ifx\empty#1\empty\expandafter\CF@id\else\expandafter\CF@gobarg\fi}
+\def\CF@doifnotempty#1{\ifx\empty#1\empty\expandafter\CF@gobarg\else\expandafter\CF@id\fi}
+\def\CF@gobtonil#1\@nil{}
+\edef\CF@hash{\string#}
+\edef\CF@arobas{\string @}
+\def\CF@three@ea{\expandafter\expandafter\expandafter}
+\def\CF@exp@macroarg#1#2{\expandafter#1\expandafter{#2}}
+\def\CF@eexp@macroarg#1#2{\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{#2}}
+\def\CF@exp@twomacroargs#1#2#3{\CF@exp@second{\CF@exp@macroarg#1{#2}}{#3}}
+\def\CF@exp@threemacroargs#1#2#3#4{\CF@exp@second{\CF@exp@twomacroargs#1{#2}{#3}}{#4}}
+\def\CF@swap@arg#1#2{#2{#1}}
+\def\CF@exp@second#1#2{\CF@exp@macroarg\CF@swap@arg{#2}{#1}}% \CF@exp@second<{arg1>}{<arg2>} donne "<arg1>{*<arg2>}"
+\def\CF@eexp@second#1#2{\CF@eexp@macroarg\CF@swap@arg{#2}{#1}}% \CF@eexp@second{<arg1>}{<arg2>} donne "<arg1>{**<arg2>}"
+\def\CF@swap@unarg#1#2{#2#1}
+\def\CF@exp@after#1#2{\CF@exp@macroarg\CF@swap@unarg{#2}{#1}}% \CF@exp@after{<arg1>}{<arg2>} donne "<arg1>*<arg2>"
+\def\CF@eexp@after#1#2{\CF@eexp@macroarg\CF@swap@unarg{#2}{#1}}% \CF@eexp@after{<arg1>}{<arg2>} donne "<arg1>**<arg2>"
+\def\CF@add@tocs#1#2{\CF@exp@second{\def#1}{#1#2}}
+\def\CF@eadd@tocs#1#2{\CF@exp@second{\CF@add@tocs#1}{#2}}\let\CF@expadd@tocs\CF@eadd@tocs
+\def\CF@preadd@tocs#1#2{\CF@exp@second{\CF@preadd@tocs@a#1{#2}}#1}
+\def\CF@preadd@tocs@a#1#2#3{\def#1{#2#3}}
+\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@integer#1{%
+\long\def\CF@ifnextchar#1#2#3{%
+ \let\CF@ifnextchar@tok=#1
+ \def\CF@ifnextchar@codetrue{#2}%
+ \def\CF@ifnextchar@codefalse{#3}%
+ \futurelet\CF@temptok\CF@ifnextchar@i}
+\def\CF@ifnextchar@i{%
+ \CF@ifx\CF@temptok\CF@sptoken
+ \CF@ifnextchar@ii
+ {\CF@ifx\CF@temptok\CF@ifnextchar@tok\CF@ifnextchar@codetrue\CF@ifnextchar@codefalse}%
+}
+\expandafter\def\expandafter\CF@ifnextchar@ii\space{\futurelet\CF@temptok\CF@ifnextchar@i}
+\def\CF@ifstar#1{\CF@ifnextchar*{\CF@execfirst{#1}}}
+\long\def\CF@testopt#1#2{\CF@ifnextchar[{#1}{#1[{#2}]}}
+\def\CF@error#1{\errmessage{Package \CFname\space Error: #1.}}
+\def\CF@warning#1{\immediate\write-1{Package \CFname\space Warning: #1^^J}}
+\def\CF@if@integer#1{%
\begingroup
\afterassignment\CF@after@integer
\CF@cnt@cycle0#1\relax
}
-
-\CF@def\CF@after@integer#1\relax{%
+\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 ?
+\def\CF@if@firsttokmatch#1#2{% est ce que #1 et #2 commencent par les mêmes 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
+\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{%
+\def\CF@if@firsttokin@a#1{%
\CF@ifempty{#1}
- \@secondoftwo
+ \CF@execsecond
{\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@execfirst
+ {\CF@exp@macroarg\CF@if@firsttokin@a{\CF@gobarg#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}%
+\def\CF@if@instr#1#2{%
+ \def\CF@if@instr@a##1#2##2\@nil{\ifx\empty##2\empty\expandafter\CF@execsecond\else\expandafter\CF@execfirst\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{%
- \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
+\def\CF@after@space#1 #2\@nil{#2}
+\def\CF@valuetomacro#1[#2]#3{% #1= macro #2=valeur défaut #3=clé
+ \CF@eexp@second{\def#1}{\useKV[chemfig]{#3}}%
+ \ifx#1\empty\def#1{#2}\fi
+}
+
+%---------------------------- Paramètres -----------------------------
+\def\setchemfig{\setKV[chemfig]}
+\def\resetchemfig{%
+ \setKVdefault[chemfig]{%
+ atom style ={},% code tikz mis à la fin de every node/.style
+ chemfig style ={},% code tikz mis à la fin de l'arugment optionnel de \tikzpicture
+ bond join =false,
+ fixed length =false,
+ cram rectangle =false,
+ cram width =1.5ex,
+ cram dash width =1pt,
+ cram dash sep =2pt,
+ atom sep =3em,
+ bond offset =2pt,
+ double bond sep =2pt,
+ angle increment =45,
+ node style ={},
+ bond style ={},
+ lewis | width =0.3ex,
+ lewis sep =0.4ex,
+ lewis length =1.5ex,
+ lewis style ={},
+ lewis dist =0.3em,
+ lewis radius =0.15ex,% [nouveau] rayon des disques
+ cycle radius coeff =0.75,% [nouveau] coeff du rayon du cercle dans les cycles
+ stack sep =1.5pt,
+ scheme debug =false,
+ compound style ={},
+ compound sep =5em,
+ arrow offset =4pt,
+ arrow angle =0,
+ arrow coeff =1,
+ arrow style ={},
+ arrow double sep =2pt,% [nouveau] espacement entre les doubles fleches
+ arrow double coeff =0.6,% [nouveau] coefficient de la petite fleche par rapport à la grande
+ arrow double harpoon=true,% [nouveau] fleche double forme harpon ou pas
+ arrow label sep =3pt,
+ arrow head =-CF,% [nouveau] style de bout de fleche
+ + sep left =0.5em,
+ + sep right =0.5em,
+ + vshift =0pt,
+ }%
}
-
-\CF@def\CF@empty@node{{}}
-
-\CF@def\CF@cycle@inraduiscoeff{0.75}% coeff multiplicateur du rayon des arcs dans les cycles
-
-\CF@def\CF@donoclip#1;{}
-\CF@def\setcrambond{%
- \@ifstar
- {\let\CF@clipcramornot\CF@donoclip\CF@setcrambond}
- {\def\CF@clipcramornot{\clip}\CF@setcrambond}%
+\resetchemfig
+
+\def\CF@warningdeprecated#1{\CF@warning{The macro \string#1 is deprecated. Please, use \string\setchemfig}}
+\def\setcrambond{%
+ \CF@warningdeprecated\setcrambond
+ \CF@ifstar
+ {\setchemfig{cram rectangle=true }\CF@setcrambond}
+ {\setchemfig{cram rectangle=false}\CF@setcrambond}%
+}
+\def\CF@setcrambond#1#2#3{\setchemfig{cram width=#1,cram dash width=#2,cram dash sep=#3}}
+\def\setatomsep#1{%
+ \CF@warningdeprecated\setatomsep
+ \setchemfig{atom sep=#1}%
+}
+\def\setbondoffset#1{%
+ \CF@warningdeprecated\setbondoffset
+ \setchemfig{bond offset=#1}%
+}
+\def\setdoublesep#1{%
+ \CF@warningdeprecated\setdoublesep
+ \setchemfig{double bond sep=#1}%
+}
+\def\setangleincrement#1{%
+ \CF@warningdeprecated\setangleincrement
+ \setchemfig{angle increment=#1}%
+}
+\def\enablefixedbondlength{%
+ \CF@warningdeprecated\enablefixedbondlength
+ \setchemfig{fixed length=true}%
+}
+\def\disablefixedbondlength{%
+ \CF@warningdeprecated\disablefixedbondlength
+ \setchemfig{fixed length=false}%
+}
+\def\setnodestyle#1{%
+ \CF@warningdeprecated\setnodestyle
+ \setchemfig{node style={#1}}%
+}
+\def\setbondstyle#1{%
+ \CF@warningdeprecated\setbondstyle
+ \setchemfig{bond style={#1}}%
+}
+\def\setlewis{%
+ \CF@warningdeprecated\setlewis
+ \CF@testopt\CF@setlewis{0.3ex}%
+}
+\def\CF@setlewis[#1]#2#3#4{\setchemfig{lewis | width=#1,lewis sep=#2,lewis length=#3,lewis style={#4}}}
+\def\setlewisdist#1{%
+ \CF@warningdeprecated\setlewisdist
+ \setchemfig{lewis dist=#1}%
+}
+\def\setstacksep#1{%
+ \CF@warningdeprecated\setstacksep
+ \setchemfig{stack sep=#1}%
+}
+\def\setcompoundstyle#1{%
+ \CF@warningdeprecated\setcompoundstyle
+ \setnodestyle\setchemfig{compound style={#1}}%
+}
+\def\CF@setdefault@a#1,#2,#3\@nil#4#5#6{%
+ \setchemfig{#4=#1}%
+ \CF@if@firsttokmatch\CF@quark{#2\relax}
+ {\setchemfig{#5={},#6={}}}%
+ {\setchemfig{#5={#2}}%
+ \CF@if@firsttokmatch\CF@quark{#3\relax}
+ {\setchemfig{#6={}}}%
+ {\CF@setdefault@b#3\@nil{#6}}%
+ }%
+}
+\def\CF@setdefault@b#1,\CF@quark#2\@nil#3{\setchemfig{#3={#1}}}
+\def\setarrowdefault#1{%
+ \CF@warningdeprecated\setarrowdefault
+ \CF@setdefault@a#1,\CF@quark,\CF@quark\@nil{arrow angle}{arrow coeff}{arrow style}%
+}
+\def\setandsign#1{%
+ \CF@warningdeprecated\setandsign
+ \CF@setdefault@a#1,\CF@quark,\CF@quark\@nil{+ sep left}{+ sep right}{+ vshift}%
+}
+\def\setarrowoffset#1{%
+ \CF@warningdeprecated\setarrowoffset
+ \setchemfig{arrow offset=#1}%
+}
+\def\setcompoundsep#1{%
+ \CF@warningdeprecated\setcompoundsep
+ \setchemfig{compound sep=#1}%
+}
+\def\setarrowlabelsep#1{%
+ \CF@warningdeprecated\setarrowlabelsep
+ \setchemfig{arrow label sep=#1}%
+}
+\def\enablebondjoin{%
+ \CF@warningdeprecated\enablebondjoin
+ \setchemfig{bond join=true}%
}
-\CF@def\CF@setcrambond#1#2#3{%
- \CF@ifempty{#1}{\def\CF@cram@basewidth{1.5ex}}{\def\CF@cram@basewidth{#1}}%
- \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}}%
+\def\disablebondjoin{%
+ \CF@warningdeprecated\disablebondjoin
+ \setchemfig{bond join=false}%
+}
+\def\schemedebug#1{%
+ \CF@warningdeprecated\schemedebug
+ \setchemfig{scheme debug=#1}%
}
-\setcrambond{}{}{}
-\CF@def\setatomsep{\def\CF@atom@sep}% espacement des atomes li\'es
-\setatomsep{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% D E S S I N M O L É C U L E S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\CF@sanitize@catcode{%
+ \CF@makeother\[\CF@makeother\]\CF@makeother\:\CF@makeother\(\CF@makeother\)%
+ \CF@makeother\,\CF@makeother\-\CF@makeother\=\CF@makeother\~\CF@makeother\!%
+ \CF@makeother\?\CF@makeother\<\CF@makeother\>\CF@makeother\;\CF@makeother\*%
+ \CF@makeother\|\CF@makeother\#\CF@makeother\@%
+}
-\CF@def\setbondoffset{\def\CF@bond@offset}% offset des liaisons
-\setbondoffset{2pt}
+\def\CF@node@content{\expandafter\printatom\expandafter{\csname atom@\number\CF@cnt@atomnumber\endcsname\CF@node@strut}}
-\CF@def\setdoublesep{\def\CF@double@sep}
-\setdoublesep{2pt}
+\def\chemskipalign{%
+ \CF@doifempty\CF@bond@outcontentsaved% sauf si un \chemskipalign a été fait à l'atome précédent
+ {\global\let\CF@bond@outcontentsaved\CF@bond@outcontent}% sauvegarder l'atome d'où vient la liaison
+ \let\CF@node@strut\empty
+}
-\CF@def\setangleincrement{\def\CF@angle@increment}
-\setangleincrement{45}% valeur par d\'efaut
+\def\CF@empty@node{{}}
-\CF@def\definesubmol{\CF@definesubmoltrue\CF@def@submol}
-\CF@def\redefinesubmol{\CF@definesubmolfalse\CF@def@submol}
+\def\definesubmol{\CF@definesubmoltrue\def@submol}
+\def\redefinesubmol{\CF@definesubmolfalse\def@submol}
-\CF@def\CF@def@submol#1{%
+\def\def@submol#1{%
\begingroup
\def\CF@tmp@str{#1}%
\catcode`[\@ne\catcode`]\tw@
\futurelet\CF@toks@a\CF@test@nxttok
}
-\CF@def\CF@test@nxttok{%
- \if[\noexpand\CF@toks@a\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+\def\CF@test@nxttok{%
+ \if[\noexpand\CF@toks@a\expandafter\CF@execfirst\else\expandafter\CF@execsecond\fi
{\CF@exp@macroarg\CF@grab@optalias{\CF@tmp@str}}%
{\CF@exp@second{%
\endgroup
\begingroup
\CF@sanitize@catcode
- \CF@def@submol@a
+ \def@submol@a
}\CF@tmp@str{}%
}%
}
-\CF@def\CF@grab@optalias#1#2{%
+\def\CF@grab@optalias#1#2{%
\endgroup
\begingroup
- \everyeof{\@nil}\endlinechar\m@ne
+ \everyeof{\@nil}\endlinechar-1
\CF@sanitize@catcode
\expandafter\assign@tonil\expandafter\CF@tmp@str\scantokens{#2}%
\CF@exp@second{%
\CF@sanitize@catcode
- \CF@def@submol@a{#1}%
+ \def@submol@a{#1}%
}\CF@tmp@str
}
-\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
+\def\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
+ \ifcat\relax\expandafter\noexpand\CF@firsttonil#1\@nil% si #1 est une séquence de contrôle
+ \expandafter\ifdefined\CF@firsttonil#1\@nil
\ifCF@definesubmol
- \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.}%
+ \immediate\write-1{Package \CFname\space Warning: the macro \expandafter\string\CF@firsttonil#1\@nil\space is already defined, the previous definition is lost on input line \the\inputlineno.}%
\fi
\fi
\CF@ifempty{#2}%
- {\CF@exp@second{\expandafter\def\@car#1\@nil}{\expandafter\@empty\romannumeral-`\.\noexpand#3}}
- {\expandafter\def\@car#1\@nil{%
+ {\CF@exp@second{\expandafter\def\CF@firsttonil#1\@nil}{\expandafter\empty\romannumeral-`\.\noexpand#3}}
+ {\expandafter\def\CF@firsttonil#1\@nil{%
\romannumeral-`\.%
\ifdim\CF@current@angle pt>90pt
\ifdim\CF@current@angle pt<270pt
- \expandafter\expandafter\expandafter\@firstoftwo
+ \expandafter\expandafter\expandafter\CF@execfirst
\else
- \expandafter\expandafter\expandafter\@secondoftwo
+ \expandafter\expandafter\expandafter\CF@execsecond
\fi
\else
- \expandafter\@secondoftwo
+ \expandafter\CF@execsecond
\fi
{\noexpand#2}{\noexpand#3}}%
}%
\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.}%
+ \immediate\write-1{Package \CFname\space Warning:the submol "#1" is already defined, the previous definition is lost on input line \the\inputlineno.}%
\fi
\fi
\CF@ifempty{#2}%
- {\CF@exp@second{\expandafter\def\csname CF@@#1\endcsname}{\expandafter\@empty\romannumeral-`\.\noexpand#3}}
+ {\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
+ \expandafter\expandafter\expandafter\CF@execfirst
\else
- \expandafter\expandafter\expandafter\@secondoftwo
+ \expandafter\expandafter\expandafter\CF@execsecond
\fi
\else
- \expandafter\@secondoftwo
+ \expandafter\CF@execsecond
\fi
{\noexpand#2}{\noexpand#3}}%
}%
\fi
}
-\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\CF@seek@node#1#2#3{% cherche un noeud au début de #1 l'assigne dans la sc #2 et met le reste dans #3
+ \let#2\empty
\def#3{#1}%
\CF@if@firsttokmatch{#1}{ }%
- {\CF@exp@macroarg\CF@seek@node@a{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au d\'ebut du groupe d'atome
+ {\CF@exp@macroarg\CF@seek@node@a{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au début du groupe d'atome
{\CF@seek@node@a{#1}#2#3}%
}
-\CF@def\CF@seek@node@a#1#2#3{%
+\def\CF@seek@node@a#1#2#3{%
\CF@ifempty{#1}%
- {\let#3\@empty}
+ {\let#3\empty}
{\futurelet\CF@toks@a\CF@gobtonil#1\relax\@nil
\CF@ifx\CF@toks@a\@sptoken
{\CF@add@tocs#2{ }%
\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@exp@macroarg\CF@seek@node@a{\@gobble#1}#2#3%
+ {\CF@eadd@tocs#2{\expandafter{\CF@firsttonil#1\@nil}}%
+ \CF@exp@macroarg\CF@seek@node@a{\CF@gobarg#1}#2#3%
}%
{\CF@if@firsttokin@a{-=(*<>!~}%
{\def#3{#1}}%
- {\CF@expadd@tocs#2{\@car#1\@nil}%
- \CF@exp@macroarg\CF@seek@node@a{\@gobble#1}#2#3%
+ {\CF@eadd@tocs#2{\CF@firsttonil#1\@nil}%
+ \CF@exp@macroarg\CF@seek@node@a{\CF@gobarg#1}#2#3%
}%
}%
}%
@@ -398,32 +464,29 @@
}
% 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{%
+% #2 reçoit le type de liaisons (1 pour -, 2 pour =, 3 pour ~)
+\def\CF@bond@findcode#1#2{%
\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
+ \ifx<\CF@toks@a5\else0% si 0 --> il y a une erreur non due à l'utilisateur
\fi\fi\fi\fi\fi}%
\ifnum#2>\thr@@% si c'est une liaison de Cram
- \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\@gobble#1\@nil}% chope le caract\`ere suivant
+ \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\CF@gobarg#1\@nil}% chope le caractère 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
- }%
+ {\edef#2{\number\numexpr#2+2}}% si c 'est un ":", signe du pointillé, ajoute 2
+ {\CF@ifx|\CF@toks@a{\edef#2{\number\numexpr#2+4}}{}}% si c 'est un "|", signe du triangle évidé, ajouter 4
\fi
}
-\CF@def\CF@analyse@bondoffset#1,#2\@nil{%
+\def\CF@analyse@bondoffset#1,#2\@nil{%
\def\CF@start@offset{#1}\def\CF@end@offset{#2}%
}
-\CF@def\CF@grab@bondoffset#1(#2)#3\@nil{%
+\def\CF@grab@bondoffset#1(#2)#3\@nil{%
\CF@doifnotempty{#2}%
{\CF@if@instr{#2},%
{\CF@analyse@bondoffset#2\@nil}%
@@ -432,24 +495,24 @@
\def\CF@remain@afterbond{#3}%
}
-\CF@def\CF@analyse@bond#1#2{%
+\def\CF@analyse@bond#1#2{%
\CF@bond@findcode{#1}#2%
- \CF@exp@second{\def\CF@remain@afterbond}{\@gobble#1}%mange le premier signe de la liaison
+ \CF@exp@second{\def\CF@remain@afterbond}{\CF@gobarg#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
- \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\@gobble#1\@nil}%
+ \ifnum#2=\tw@% si c'est une double liaison, regarde s'il y a un + ou - derrière
+ \CF@exp@after{\futurelet\CF@toks@a\CF@gobtonil}{\CF@gobarg#1\@nil}%
\CF@ifx^\CF@toks@a
{\let\CF@doublebond@type\@ne
- \CF@exp@second{\def\CF@remain@afterbond}{\@gobbletwo#1}% mange le "^"
+ \CF@exp@second{\def\CF@remain@afterbond}{\CF@gobtwoargs#1}% mange le "^"
}
{\ifx_\CF@toks@a
\let\CF@doublebond@type\tw@
- \CF@exp@second{\def\CF@remain@afterbond}{\@gobbletwo#1}% mange le "_"
+ \CF@exp@second{\def\CF@remain@afterbond}{\CF@gobtwoargs#1}% mange le "_"
\fi
}%
\else
- \ifnum#2>5 % si c'est une laision de Cram pointill\'ee ou triangle \'evid\'e
- \CF@exp@second{\def\CF@remain@afterbond}{\@gobbletwo#1}% mange un caract\`ere de plus
+ \ifnum#2>5 % si c'est une laision de Cram pointillée ou triangle évidé
+ \CF@exp@second{\def\CF@remain@afterbond}{\CF@gobtwoargs#1}% mange un caractère de plus
\fi
\fi
\CF@exp@twomacroargs\CF@if@firsttokmatch\CF@remain@afterbond\CF@hash%
@@ -460,30 +523,30 @@
{}%
\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
- \let\CF@current@fromatom\CF@default@fromatom
- \let\CF@current@toatom\CF@default@toatom
- \let\CF@current@tikz\CF@default@tikz
- \let\CF@movebond@name\@empty
+ {\let\CF@current@stringangle\default@stringangle
+ \let\CF@current@length\default@length
+ \let\CF@current@fromatom\default@fromatom
+ \let\CF@current@toatom\default@toatom
+ \let\CF@current@tikz\default@tikz
+ \let\CF@movebond@name\empty
}%
\ifCF@incycle
\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
+ \let\CF@current@length\default@length% et on ignore la longueur de liaison spécifiée
\fi
\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
+\def\CF@set@bondangle#1#2{% le code de la direction est contenu dans #1, en sortie, #2 contient l'angle
\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}%
+ {\let#2\default@angle}
+ {\if:\expandafter\noexpand\CF@firsttonil#1\@nil
+ \if:\CF@three@ea\noexpand\expandafter\CF@firsttonil\CF@gobarg#1\@nil
+ \pgfmathsetmacro#2{\CF@previous@angle+\expandafter\CF@gobarg\CF@gobarg#1}%
\else
- \pgfmathsetmacro#2{\@gobble#1}%
+ \pgfmathsetmacro#2{\CF@gobarg#1}%
\fi
\else
\pgfmathsetmacro#2{#1*\CF@angle@increment}%
@@ -493,99 +556,124 @@
}%
}
-\CF@def\CF@int@part#1.#2\@nil{#1 }
+\def\CF@int@part#1.#2\@nil{#1 }
-\CF@def\CF@analyse@movearg#1,#2\@nil#3{%
+\def\CF@analyse@movearg#1,#2\@nil#3{%
\def#3{#1}\def\CF@movebond@coeff{#2}%
}
-% Argument limit\'es l\'egitimes ici car #2 (qui est ce qui suit "@{<nom>}" dans l'argument optionnel) ne DOIT
+% Argument limités légitimes 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\CF@arobas#1#2\@nil{%
+\expandafter\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{\CF@ifempty{#2}{\let#1#3}{\def#1{#2}}}
-
-\CF@def\CF@sanitize@lastitem#1,\@empty#2\@nil{#1}
+\def\CF@testempty@andassign#1#2#3{\CF@ifempty{#2}{\let#1#3}{\def#1{#2}}}
-\CF@def\CF@parse@optlist#1,#2,#3,#4,#5\@nil{%
- \CF@testempty@andassign\CF@current@stringangle{#1}\CF@default@stringangle
- \CF@testempty@andassign\CF@current@length{#2}\CF@default@length
- \CF@testempty@andassign\CF@current@fromatom{#3}\CF@default@fromatom
- \CF@testempty@andassign\CF@current@toatom{#4}\CF@default@toatom
- \expandafter\CF@testempty@andassign\expandafter\CF@current@tikz\expandafter{\CF@sanitize@lastitem#5,\@empty\@nil}\CF@default@tikz
+\def\CF@parse@optlist#1,#2,#3,#4,#5\@nil{%
+ \CF@testempty@andassign\CF@current@stringangle{#1}\default@stringangle
+ \CF@testempty@andassign\CF@current@length{#2}\default@length
+ \CF@testempty@andassign\CF@current@fromatom{#3}\default@fromatom
+ \CF@testempty@andassign\CF@current@toatom{#4}\default@toatom
+ \expandafter\CF@testempty@andassign\expandafter\CF@current@tikz\expandafter{\CF@sanitize@lastitem#5,\empty\@nil}\default@tikz
}%
-\CF@def\CF@analyse@optarg[#1]#2\@nil#3{%
+\def\CF@analyse@optarg[#1]#2\@nil#3{%
\CF@doifnotempty{#1}%
{\CF@exp@after{\CF@if@firsttokmatch{#1}}{\CF@arobas}%
{\CF@grab@movearg#1\@nil}%
- {\let\CF@movebond@name\@empty
+ {\let\CF@movebond@name\empty
\def\CF@remain@optarg{#1}%
}%
- \expandafter\CF@parse@optlist\CF@remain@optarg,\@empty,\@empty,\@empty,\@empty\@nil
+ \expandafter\CF@parse@optlist\CF@remain@optarg,\empty,\empty,\empty,\empty\@nil
\def#3{#2}%
}%
}
-\CF@def\CF@seek@submol{%
+\def\CF@seek@submol{%
\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 "!"
- \ifx\empty\CF@remain@molecule\errmessage{Package \CF@package@name\space Error: no submol name found after "!"}\fi
- \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}%
+ {\CF@eexp@second{\def\CF@remain@molecule}{\expandafter\CF@gobarg\CF@remain@molecule}% enlève le "!"
+ \CF@ifx\empty\CF@remain@molecule{\errmessage{Package \CFname\space Error: no submol name found after "!"}}{}%
+ \ifcat\relax\CF@three@ea\noexpand\expandafter\CF@firsttonil\CF@remain@molecule*\@nil
+ \CF@eexp@second{\CF@eexp@second{\def\CF@insert@submol}}{\expandafter\CF@firsttonil\CF@remain@molecule\@nil}%
\else
- \CF@exp@second{\CF@twoexp@second{\def\CF@insert@submol}}{\csname CF@@\expandafter\@car\CF@remain@molecule\@nil\endcsname}%
+ \CF@exp@second{\CF@eexp@second{\def\CF@insert@submol}}{\csname CF@@\expandafter\CF@firsttonil\CF@remain@molecule\@nil\endcsname}%
\fi
- \CF@twoexp@second{\def\CF@remain@molecule}{\csname CF@insert@submol\CF@three@ea\endcsname\csname @gobble\expandafter\endcsname\CF@remain@molecule}%
+ \CF@eexp@second{\def\CF@remain@molecule}{\csname CF@insert@submol\CF@three@ea\endcsname\csname @gobble\expandafter\endcsname\CF@remain@molecule}%
\CF@seek@submol
}%
{}%
}
-\CF@def\CF@insert@emptygroup#1{% ins\`ere {} au d\'ebut de la sc #1
+\def\CF@insert@emptygroup#1{% insère {} au début de la sc #1
\CF@exp@second{\def#1}{\expandafter{\expandafter}#1}%
}
-\CF@def\chemfig{\@ifstar{\CF@macrofixedbondlengthtrue\CF@chemfig@a}{\CF@macrofixedbondlengthfalse\CF@chemfig@a}}
+\def\chemfig{%
+ \CF@ifstar
+ {\CF@warning{Do not use star \string\chemfig\space but set the key "fixed lengths"}%
+ \CF@macrofixedbondlengthtrue\CF@chemfig@a
+ }
+ {\ifboolKV[chemfig]{fixed length}
+ \CF@macrofixedbondlengthtrue
+ \CF@macrofixedbondlengthfalse
+ \CF@chemfig@a}%
+}
-\CF@def\CF@chemfig@a{\ifCF@globalfixedbondlength\CF@macrofixedbondlengthtrue\fi\@testopt\CF@chemfig@b{}}
+\def\CF@chemfig@a{\CF@testopt\CF@chemfig@b{}}
-\CF@def\CF@chemfig@b[#1]{\@testopt{\CF@chemfig@c[#1]}{}}
+\def\CF@chemfig@b[#1]{\CF@testopt{\CF@chemfig@c[#1]}{}}
-\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]}%
+\def\CF@chemfig@c[#1][#2]{%
+ \if\relax\detokenize{#1#2}\relax\else
+ \CF@warning{Do not use optional arguments but set the keys "tikz node style" and "tikz code"}%
+ \fi
+ \edef\CF@tmp@str{[remember picture,every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@,\ifx\empty#2\empty\useKV[chemfig]{atom style}\else#2\fi},baseline,\ifx\empty#1\empty\useKV[chemfig]{chemfig style}\else#1\fi]}%
\CF@exp@threemacroargs\CF@chemfig@d\CF@begin@tikzpicture\CF@tmp@str\CF@end@tikzpicture
}
-\CF@def\CF@chemfig@d#1#2#3#4{%
+\def\CF@chemfig@d#1#2#3#4{%
#1#2%
\begingroup
- \let\CF@hook@list\@empty
- \CF@doifempty\CF@atom@sep{\def\CF@atom@sep{3em}}%
- \CF@doifempty\CF@cram@basewidth{\def\CF@cram@basewidth{1.5ex}}%
+ \let\CF@hook@list\empty
+ \ifboolKV[chemfig]{bond join}
+ {\let\CF@draw@axisbond\CF@draw@axisbond@join}
+ {\let\CF@draw@axisbond\CF@draw@axisbond@nojoin}%
+ \ifboolKV[chemfig]{cram rectangle}
+ {\let\CF@clipcramornot\CF@gobtikzinstruction}
+ {\let\CF@clipcramornot\clip}%
+ \CF@valuetomacro\CF@cram@basewidth[1.5ex]{cram width}%
+ \CF@valuetomacro\CF@cram@dashlength[1pt]{cram dash width}%
+ \CF@valuetomacro\CF@cram@dashsep[2pt]{cram dash sep}%
+ \CF@valuetomacro\CF@atom@sep[3em]{atom sep}% espacement des atomes liés
+ \CF@valuetomacro\CF@bond@offset[2pt]{bond offset}%
+ \CF@valuetomacro\CF@double@sep[2pt]{double bond sep}%
+ \CF@valuetomacro\CF@angle@increment[45]{angle increment}%
+ \CF@valuetomacro\CF@node@style[]{node style}%
+ \CF@valuetomacro\CF@bond@style[]{bond style}%
+ \CF@valuetomacro\CF@stacksep[1.5pt]{stack sep}%
+ \CF@valuetomacro\CF@cycle@inraduiscoeff[0.75]{cycle radius coeff}% coeff multiplicateur du rayon des arcs dans les cycles
\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
- \let\CF@start@offset\@empty
- \let\CF@end@offset\@empty
- \let\CF@bond@outcontentsaved\@empty
+ \let\CF@last@action\z@% 0=début du dessin 1=tracé d'un noeud 2=tracé d'une liaison
+ \let\CF@start@offset\empty
+ \let\CF@end@offset\empty
+ \let\CF@bond@outcontentsaved\empty
\def\CF@cycle@anglecorrection{180/\CF@cycle@num}%
- \def\CF@default@angle{0}%
- \def\CF@default@stringangle{:0}% angle pris par d\'efaut si le champ est vide
- \def\CF@default@length{1}%
- \let\CF@default@fromatom\@empty% numero de l'atome d'o\`u partent les liaisons par d\'efaut
- \let\CF@default@toatom\@empty% num\'ero de l'atome o\`u arrivent les laisons par d\'efaut
- \let\CF@default@tikz\@empty
+ \def\default@angle{0}%
+ \def\default@stringangle{:0}% angle pris par défaut si le champ est vide
+ \def\default@length{1}%
+ \let\default@fromatom\empty% numero de l'atome d'où partent les liaisons par défaut
+ \let\default@toatom\empty% numéro de l'atome où arrivent les laisons par défaut
+ \let\default@tikz\empty
\let\CF@previous@bondangle\empty
\let\CF@joinbond\z@
\let\CF@previous@tikz\empty
- \everyeof{\@nil}\endlinechar\m@ne
+ \everyeof{\@nil}\endlinechar-1
\CF@sanitize@catcode
\expandafter\assign@tonil\expandafter\CF@remain@molecule\scantokens{#4}%
\CF@exp@macroarg\CF@chemfig@e{\CF@remain@molecule}%
@@ -593,39 +681,39 @@
\let\CF@split@state\z@
}
-\CF@def\CF@chemfig@e#1{% #1 est le code de la mol\'ecule
+\def\CF@chemfig@e#1{% #1 est le code de la molécule
\ifnum\CF@last@action=\thr@@
\ifCF@incycle
- \def\CF@default@angle{0}%
+ \def\default@angle{0}%
\else
- \ifnum\CF@cnt@cycle=\z@% si c'est le d\'ebut d'un cycle
- \pgfmathsetmacro\CF@default@angle{\CF@previous@angle+180+\CF@cycle@anglecorrection}% on met la liaison \`a +180° + correction
+ \ifnum\CF@cnt@cycle=\z@% si c'est le début d'un cycle
+ \pgfmathsetmacro\default@angle{\CF@previous@angle+180+\CF@cycle@anglecorrection}% on met la liaison à +180° + correction
\else
- \pgfmathsetmacro\CF@default@angle{\CF@previous@angle-90+180/\CF@cycle@num}% sinon \`a la bissectrice du sommet du cycle
+ \pgfmathsetmacro\default@angle{\CF@previous@angle-90+180/\CF@cycle@num}% sinon à la bissectrice du sommet du cycle
\fi
\fi
- \let\CF@default@stringangle\@empty
+ \let\default@stringangle\empty
\fi
- \let\CF@current@angle\CF@default@angle
+ \let\CF@current@angle\default@angle
\def\CF@remain@molecule{#1}%
\CF@seek@submol% alias en premier ?
- \if[\CF@three@ea\noexpand\expandafter\@car\CF@remain@molecule\@nil
+ \if[\CF@three@ea\noexpand\expandafter\CF@firsttonil\CF@remain@molecule\@nil
\expandafter\CF@analyse@optarg\CF@remain@molecule\@nil\CF@remain@molecule
\CF@exp@macroarg\CF@set@bondangle{\CF@current@stringangle}\CF@current@angle
- \let\CF@default@angle\CF@current@angle
+ \let\default@angle\CF@current@angle
\let\CF@previous@angle\CF@current@angle
- \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@doifnotempty\CF@current@stringangle{\let\default@angle\CF@current@angle}%
+ \CF@doifnotempty\CF@current@length{\let\default@length\CF@current@length}%
+ \CF@doifnotempty\CF@current@fromatom{\let\default@fromatom\CF@current@fromatom}%
+ \CF@doifnotempty\CF@current@toatom{\let\default@toatom\CF@current@toatom}%
+ \CF@doifnotempty\CF@current@tikz{\let\default@tikz\CF@current@tikz}%
\CF@seek@submol
\fi
- \edef\CF@default@stringangle{:\CF@default@angle}%
- \let\CF@current@length\CF@default@length
- \let\CF@current@fromatom\CF@default@fromatom
- \let\CF@current@toatom\CF@default@toatom
- \let\CF@current@tikz\CF@default@tikz
+ \edef\default@stringangle{:\default@angle}%
+ \let\CF@current@length\default@length
+ \let\CF@current@fromatom\default@fromatom
+ \let\CF@current@toatom\default@toatom
+ \let\CF@current@tikz\default@tikz
\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 ?
@@ -633,14 +721,14 @@
\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
+ \node[at=(arccenter),shift=(\CF@cyclearc@startangle:\CF@cyclearc@radius pt)](initarc){};% le début de l'arc
\expandafter\draw\expandafter[\CF@cyclearc@directtikz](initarc) arc (\CF@cyclearc@startangle:\CF@cyclearc@endangle:\CF@cyclearc@radius pt);
\fi
\else
- \let\CF@current@angle\CF@default@angle
+ \let\CF@current@angle\default@angle
\fi
\ifnum\CF@last@action=\z@
- \let\CF@previous@angle\CF@default@angle
+ \let\CF@previous@angle\default@angle
\node(CF@node){};
\CF@exp@macroarg\CF@if@firsttokin{\CF@remain@molecule}{-=(*~?<>}%
{\CF@insert@emptygroup\CF@remain@molecule}%
@@ -649,26 +737,26 @@
\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
+\def\CF@chemfig@f{%
+ \let\CF@next@action\CF@chemfig@f% à 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 ?
+ \CF@ifx\empty\CF@current@atomgroup% pas de noeud pour commencer ?
{\def\CF@bond@outnode{%
n\CF@last@groupnumber-%
- \ifx\CF@current@fromatom\@empty
+ \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
+ \else
\CF@current@fromatom
- \fi}%
+ \fi}%
\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
+ {\ifnum\CF@last@action=\tw@% c'est la deuxième liaison consécutive ?
+ \CF@insert@emptygroup\CF@remain@molecule% insère un groupe vide
\edef\CF@bond@outnode{\CF@bond@outnode}%
\else
\ifCF@incycle\advance\CF@cnt@cycle\@ne\fi
@@ -677,16 +765,16 @@
\let\CF@remain@molecule\CF@remain@afterbond
\ifCF@incycle
\ifnum\CF@cnt@cycle=\CF@cycle@num\relax
- \CF@three@ea\@firstoftwo
+ \CF@three@ea\CF@execfirst
\else
\ifnum\CF@cnt@cycle=\@ne
\let\CF@cycle@firsttikz\CF@current@tikz
\CF@doifnotempty\CF@start@offset{\let\CF@cycle@joinlast\z@}%
\fi
- \CF@three@ea\@secondoftwo
+ \CF@three@ea\CF@execsecond
\fi
\else
- \expandafter\@secondoftwo
+ \expandafter\CF@execsecond
\fi
{\let\CF@next@action\endgroup
\CF@draw@bond\CF@bond@type{\CF@bond@outnode}{\CF@hook@cycle}\CF@previous@atomgroup\CF@hook@atomgroup
@@ -697,39 +785,39 @@
}%
\fi
\ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF@remain@molecule}\relax
- % s'il ne reste plus rien apr\`es la liaison (sans tenir compte de l'espace devant)-> ins\`ere un groupe vide
+ % s'il ne reste plus rien après la liaison (sans tenir compte de l'espace devant)-> insère un groupe vide
\CF@insert@emptygroup\CF@remain@molecule
\fi
}%
- {\edef\CF@bond@outnode{\CF@bond@outnode}% \'evalue le l'atome de d\'epart de liaison
- \CF@ifx(\CF@toks@a% une parenth\`ese pour commencer ?
+ {\edef\CF@bond@outnode{\CF@bond@outnode}% évalue le l'atome de départ de liaison
+ \CF@ifx(\CF@toks@a% une parenthèse pour commencer ?
{\ifnum\CF@last@action=\tw@% il y avait une liaison juste avant ?
\CF@insert@emptygroup\CF@remain@molecule
\else
\CF@exp@macroarg\CF@grab@submol{\CF@remain@molecule}%
\begingroup
- \ifCF@incycle\let\CF@last@action\thr@@\fi% on \'etait dans un cycle
+ \ifCF@incycle\let\CF@last@action\thr@@\fi% on était dans un cycle
\CF@incyclefalse
\aftergroup\CF@chemfig@f
\def\CF@next@action{\CF@exp@macroarg\CF@chemfig@e{\CF@sub@mol}}%
\fi
}%
- {\CF@ifx\CF@remain@molecule\@empty
+ {\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
+ {% ce qui reste après le noeud courant n'est pas vide, ne commence pas par "-=~", ni par une parenthèse
\CF@ifx*\CF@toks@a% un cycle ?
{\ifnum\CF@last@action=\tw@
- \CF@insert@emptygroup\CF@remain@molecule% ins\`ere un groupe vide
+ \CF@insert@emptygroup\CF@remain@molecule% insère un groupe vide
\else
- \ifCF@incycle\let\CF@last@action\thr@@\fi% on \'etait dans un cycle
+ \ifCF@incycle\let\CF@last@action\thr@@\fi% on était 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 ?
+ \CF@eexp@macroarg\CF@if@firsttokmatch{\expandafter\CF@gobarg\CF@remain@molecule}*%
+ {\CF@eexp@second{\def\CF@remain@molecule}{\expandafter\CF@gobarg\CF@remain@molecule}% enlève la 1er étoile
+ \CF@eexp@macroarg\CF@if@firsttokmatch{\expandafter\CF@gobarg\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
+ \let\CF@cyclearc@directtikz\empty
\expandafter\CF@cycle@parsepreamble\CF@remain@molecule\@nil% \begingroup inclus
}%
\CF@cyclearctrue
@@ -753,7 +841,7 @@
\def\CF@next@action{\CF@exp@macroarg\CF@chemfig@e{\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 \CFname\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.}%
}%
}%
}%
@@ -765,9 +853,9 @@
\CF@next@action
}
-\CF@def\CF@cycle@parsepreamble*#1#2\@nil{%
+\def\CF@cycle@parsepreamble*#1#2\@nil{%
\ifnum#1<\thr@@
- \errmessage{Package \CF@package@name\space Error: A cycle must be at least a triangle.^^JThe number following "*" must be 3 or more}%
+ \errmessage{Package \CFname\space Error: A cycle must be at least a triangle.^^JThe number following "*" must be 3 or more}%
\fi
\def\CF@remain@molecule{#2}%
\CF@exp@macroarg\CF@grab@submol{\CF@remain@molecule}%
@@ -775,18 +863,18 @@
\def\CF@cycle@num{#1}%
}
-\CF@def\CF@cycle@parsepreamblewithoptarg*[#1]#2#3\@nil{%
- \CF@cycle@parseoptarg#1,\@empty,\@empty,\@empty\@nil
+\def\CF@cycle@parsepreamblewithoptarg*[#1]#2#3\@nil{%
+ \CF@cycle@parseoptarg#1,\empty,\empty,\empty\@nil
\CF@cycle@parsepreamble*#2#3\@nil
}
-\CF@def\CF@cycle@parseoptarg#1,#2,#3\@nil{%
+\def\CF@cycle@parseoptarg#1,#2,#3\@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@exp@second{\def\CF@cyclearc@directtikz}{\CF@sanitize@lastitem#3,\empty\@nil}%
}
-\CF@def\CF@grab@submol#1{%
+\def\CF@grab@submol#1{%
\begingroup
\catcode`(\@ne\catcode`)\tw@
\CF@three@ea
@@ -794,33 +882,33 @@
\expandafter\CF@grab@submol@a\scantokens{\relax#1}%
}
-\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}%
+\def\CF@grab@submol@a#1\@nil{%
+ \expandafter\assign@tonil\expandafter\CF@remain@molecule\scantokens\CF@three@ea{\expandafter\CF@gobarg\CF@gobarg#1}%
+ \expandafter\assign@tonil\expandafter\CF@sub@mol\scantokens\CF@three@ea{\expandafter\CF@firsttonil\CF@gobarg#1\@nil}%
}
-\CF@def\assign@tonil#1#2\@nil{\def#1{#2}}
+\def\assign@tonil#1#2\@nil{\def#1{#2}}
-\CF@def\CF@ifcar@isupperletter#1{%
+\def\CF@ifcar@isupperletter#1{%
\ifcat\relax\noexpand#1%
- \let\CF@next\@secondoftwo% faux si c'est une sc
+ \let\CF@next\CF@execsecond% faux si c'est une sc
\else
\ifnum`#1<`A
- \let\CF@next\@secondoftwo
+ \let\CF@next\CF@execsecond
\else
\ifnum`#1>`Z
- \let\CF@next\@secondoftwo
+ \let\CF@next\CF@execsecond
\else
- \let\CF@next\@firstoftwo
+ \let\CF@next\CF@execfirst
\fi
\fi
\fi
\CF@next
}
-% 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{%
+% Créé 4 noeuds au dessus et au dessous des noeuds #1 et #2
+% à une distance de #3 du noeud #1 et #4 du noeud #2
+\def\CF@create@normnodes#1#2#3#4{%
\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){};
@@ -831,7 +919,7 @@
}%
}
-\CF@def\CF@compute@nodevect#1#2{%
+\def\CF@compute@nodevect#1#2{%
\pgfextractx\CF@dim{\pgfpointanchor{#1}{center}}\edef\CF@dimax{\the\CF@dim}%
\pgfextracty\CF@dim{\pgfpointanchor{#1}{center}}\edef\CF@dimay{\the\CF@dim}%
\pgfextractx\CF@dim{\pgfpointanchor{#2}{center}}\edef\CF@dimbx{\the\CF@dim}%
@@ -841,16 +929,16 @@
\pgfmathsetmacro\CF@norm@y{(\CF@dimbx-\CF@dimax)/\CF@len@vector}%
}
-\CF@def\CF@set@offset#1#2{%
+\def\CF@set@offset#1#2{%
\CF@doifempty#1%
- {\edef#1{\ifx#2\CF@empty@node0pt\else\ifx#2\@empty0pt\else\CF@bond@offset\fi\fi}}%
+ {\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
+\def\CF@draw@bond#1#2#3#4#5{% #1=type de liaison #2 et #3:nom de noeuds de début et fin #4 et #5: contenu des atomes de début et fin
\CF@set@offset\CF@start@offset#4%
\CF@set@offset\CF@end@offset#5%
\let\CF@current@bondstyle\CF@bond@style
- \CF@doifnotempty\CF@current@tikz{\CF@expadd@tocs\CF@current@bondstyle{\expandafter,\CF@current@tikz}}%
+ \CF@doifnotempty\CF@current@tikz{\CF@eadd@tocs\CF@current@bondstyle{\expandafter,\CF@current@tikz}}%
\path(#2)--(#3)coordinate[pos=0](#2@)coordinate[pos=1](#3@);%
\CF@compute@nodevect{#2@}{#3@}%
\pgfmathsetmacro\CF@start@coeff{\CF@start@offset/\CF@len@vector}%
@@ -858,10 +946,10 @@
\path(#2@)--(#3@)coordinate[pos=\CF@start@coeff](#2@@)coordinate[pos=\CF@end@coeff](#3@@);%
\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
+ \let\CF@movebond@name\empty
}%
\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}%
+ \errmessage{Package \CFname\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
\CF@draw@axisbond{#2}{#3}% trace la liaison simple dans l'axe
\or% 2 = liaison double
@@ -882,7 +970,7 @@
\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@a(#2@@)--(#3@@);
- \begingroup% ajuste \'eventuellement les longueurs des l(0,0iaisons doubles
+ \begingroup% ajuste éventuellement les longueurs des l(0,0iaisons doubles
\ifCF@incycle
\ifdim\CF@start@offset=\z@
\CF@edefadd@tocs\CF@current@bondstyle{,shorten <=\CF@doublebond@lengthcorrection pt}%
@@ -896,7 +984,7 @@
\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@a(#2@@)--(#3@@);
- \begingroup% ajuste \'eventuellement les longueurs des liaisons doubles
+ \begingroup% ajuste éventuellement les longueurs des liaisons doubles
\ifCF@incycle
\ifdim\CF@start@offset=\z@
\CF@edefadd@tocs\CF@current@bondstyle{,shorten \ifnum\CF@split@state=\z@<=-\else>=\fi\CF@doublebond@lengthcorrection pt}%
@@ -921,41 +1009,41 @@
\CF@create@normnodes{#3@@}{#2@@}{\CF@cram@basewidth/2}{}%
\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
+ \or% 6 = liaison Cram pointillée de #2 vers #3
\scope
\CF@create@normnodes{#2@@}{#3@@}{\CF@cram@basewidth/2}{}%
\CF@clipcramornot(#2@@1)--(#2@@2)--(#3@@)--(#2@@1);
\expandafter\draw\expandafter[\CF@current@bondstyle,dash pattern=on \CF@cram@dashlength off \CF@cram@dashsep,line width=\CF@cram@basewidth](#2@@)--(#3@@);
\endscope
\let\CF@joinbond\z@
- \or% 7 = liaison Cram pointill\'ee de #3 vers #2
+ \or% 7 = liaison Cram pointillée de #3 vers #2
\scope
\CF@create@normnodes{#3@@}{#2@@}{\CF@cram@basewidth/2}{}%
\CF@clipcramornot(#3@@1)--(#3@@2)--(#2@@)--(#3@@1);
\expandafter\draw\expandafter[\CF@current@bondstyle,dash pattern=on \CF@cram@dashlength off \CF@cram@dashsep,line width=\CF@cram@basewidth](#3@@)--(#2@@);
\endscope
\let\CF@joinbond\z@
- \or% 8 = liaison Cram triangle \'evid\'e de #2 vers #3
+ \or% 8 = liaison cram rectangle évidé 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@@)--cycle;
\let\CF@joinbond\z@
- \or% 9 = liaison Cram triangle \'evid\'e de #3 vers #1
+ \or% 9 = liaison cram rectangle évidé 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@@)--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}%
+ \errmessage{Package \CFname\space Error: unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
\fi
- \let\CF@start@offset\@empty
- \let\CF@end@offset\@empty
- \let\CF@previous@tikz\CF@current@tikz
+ \let\CF@start@offset\empty
+ \let\CF@end@offset\empty
+ \let\CF@previous@tikz\CF@current@tikz
\let\CF@previous@bondangle\CF@previous@angle
\def\CF@previous@bond{#1}%
}
-\CF@def\CF@draw@axisbond@nojoin#1#2{\CF@draw@bond@a(#1@@)--(#2@@);}
+\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\'etrograde
+\def\CF@draw@axisbond@join#1#2{% dessine une liaison simple dans l'axe avec raccord rétrograde
\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
@@ -977,7 +1065,7 @@
\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@ifx\CF@previous@bondangle\empty% si début molécule
{\CF@draw@bond@a(#1@@)--(#2@@);
}
{\ifdim\CF@start@offset=\z@
@@ -1025,24 +1113,20 @@
\CF@draw@bond@a(#1@@)--(#2@@);
\fi
}%
- \fi
- \ifdim\CF@end@offset=\z@\else\let\CF@joinbond\z@\fi
+ \fi
+ \ifdim\CF@end@offset=\z@\else\let\CF@joinbond\z@\fi
}
-\CF@def\enablebondjoin {\global\let\CF@draw@axisbond\CF@draw@axisbond@join}
-\CF@def\disablebondjoin{\global\let\CF@draw@axisbond\CF@draw@axisbond@nojoin}
-\disablebondjoin% par d\'efaut, d\'esactiver la jointure entre liaisons
+\def\CF@draw@bond@a{\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
+\def\CF@hook@drawall{% dessine tous les crochets contenus dans la sc \CF@hook@draw
\CF@doifnotempty\CF@hook@drawlist
- {\expandafter\CF@hook@drawfirst\CF@hook@drawlist\@nil% trace un lien de crochet \`a crochet
+ {\expandafter\CF@hook@drawfirst\CF@hook@drawlist\@nil% trace un lien de crochet à crochet
\CF@hook@drawall
}%
}
-\CF@def\CF@hook@drawfirst[#1,#2,#3]#4#5#6#7#8\@nil{%
+\def\CF@hook@drawfirst[#1,#2,#3]#4#5#6#7#8\@nil{%
\def\CF@hook@drawlist{#8}%
\begingroup
\let\CF@joinbond\z@
@@ -1056,29 +1140,23 @@
\endgroup
}
-\CF@def\CF@extract@atom#1-#2\@nil{#2}% transforme le bound@outnode en n° de l'atome
-
-\CF@def\setnodestyle{\def\CF@node@style}
-\setnodestyle{}
-
-\CF@def\setbondstyle{\def\CF@bond@style}
-\setbondstyle{}
+\def\CF@extract@atom#1-#2\@nil{#2}% transforme le bound@outnode en n° de l'atome
-\expandafter\CF@def\expandafter\CF@gobble@movearg\CF@arobas#1#2\@nil#3{%
+\expandafter\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}%
+ {\CF@analyse@movearg#1\@nil#3\let\CF@movebond@coeff\empty}%
{\def#3{#1}}%
- \CF@doifempty{#2}{\let\CF@node@strut\@empty}%
+ \CF@doifempty{#2}{\let\CF@node@strut\empty}%
}%
-\CF@def\hflipnext{\let\CF@split@state\@ne}
+\def\hflipnext{\let\CF@split@state\@ne}
-\CF@def\vflipnext{\let\CF@split@state\tw@}
+\def\vflipnext{\let\CF@split@state\tw@}
\let\CF@split@state\z@
-\CF@def\CF@draw@atomgroup#1#2#3{% #1=angle d'arriv\'ee de la liaison #2=numero atome sur lequel arrive la liaison #3=groupe d'atomes
- \expandafter\let\expandafter\CF@bond@outcontent% assigne le contenu de l'atome d'o\`u part la liaison
+\def\CF@draw@atomgroup#1#2#3{% #1=angle d'arrivée de la liaison #2=numero atome sur lequel arrive la liaison #3=groupe d'atomes
+ \expandafter\let\expandafter\CF@bond@outcontent% assigne le contenu de l'atome d'où part la liaison
\csname
\ifdefined\CF@bond@outnode
atom@\expandafter\CF@extract@atom\CF@bond@outnode\@nil
@@ -1087,12 +1165,12 @@
\fi
\endcsname
\global\advance\CF@cnt@groupnumber\@ne
- \let\CF@current@atom\@empty
- \global\let\CF@hook@drawlist\@empty
+ \let\CF@current@atom\empty
+ \global\let\CF@hook@drawlist\empty
\CF@cnt@atomingroup\z@
\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@remove@movearg\CF@current@atomgroup% enlève les "@{<nom>}"
\CF@if@instr{#3}?%
{\CF@remove@hook\CF@current@atomgroup
\ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF@current@atomgroup}\relax
@@ -1102,10 +1180,10 @@
{}%
\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.}%
+ \immediate\write-1{Package \CFname\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.}%
+ \errmessage{Package \CFname\space Error: no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
\fi
\fi
}%
@@ -1120,45 +1198,45 @@
}%
\CF@cnt@atomnumber\CF@hook@atomnumber
\CF@ifx\CF@current@atomgroup\CF@empty@node
- {\let\CF@node@strut\@empty}
- {\CF@ifx\@empty\CF@bond@outcontentsaved
+ {\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
+ \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écule affiché
\loop
\unless\ifnum\CF@cnt@atomnumber>\CF@cnt@atomingroup
- \CF@twoexp@after
+ \CF@eexp@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
+ \let\CF@moveatom@name\empty
}
{}%
\expandafter\node\expandafter[\CF@opt@string](n\number\CF@cnt@groupnumber-\number\CF@cnt@atomnumber){\CF@node@content};%
- \let\CF@node@strut\@empty
+ \let\CF@node@strut\empty
\advance\CF@cnt@atomnumber\@ne
\edef\CF@opt@string{anchor=base \ifnum\CF@split@state=\@ne east\else west\fi,at=(n\number\CF@cnt@groupnumber-\number\numexpr\CF@cnt@atomnumber-1.base \ifnum\CF@split@state=\@ne west\else east\fi),\CF@node@style}%
\repeat
\CF@cnt@atomnumber\CF@hook@atomnumber
\ifnum\CF@last@action=\tw@% s'il faut tracer une liaison
- \gdef\CF@cycle@anglecorrection{0}% alors c'est qu'un cycle ne peut pas commencer la mol\'ecule : annulation de la correction d'angle
+ \gdef\CF@cycle@anglecorrection{0}% alors c'est qu'un cycle ne peut pas commencer la molécule : annulation de la correction d'angle
\CF@draw@bond\CF@bond@type{\CF@bond@outnode}{n\number\CF@cnt@groupnumber-\number\CF@cnt@atomnumber}\CF@previous@atomgroup\CF@current@atomgroup
\fi
- \let\CF@last@action\@ne% met la derni\`ere action \`a 1 : affichage d'un noeud
+ \let\CF@last@action\@ne% met la dernière action à 1 : affichage d'un noeud
\loop
\ifnum\CF@cnt@atomnumber>\@ne
- \advance\CF@cnt@atomnumber\m@ne
+ \advance\CF@cnt@atomnumber-1
\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}%
- \CF@twoexp@after
+ \CF@eexp@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
+ \let\CF@moveatom@name\empty
}
{}%
\expandafter\node\expandafter[\CF@opt@string](n\number\CF@cnt@groupnumber-\number\CF@cnt@atomnumber){\CF@node@content};%
@@ -1168,9 +1246,9 @@
\let\CF@previous@atomgroup\CF@current@atomgroup
}
-\expandafter\CF@def\expandafter\CF@keep@movearg\CF@arobas#1#2\@nil{\CF@exp@second{\def\CF@current@atom}{\CF@arobas{#1}}}
+\expandafter\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@a#1{% transforme #1 en un groupe d'atomes
+\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
@@ -1180,33 +1258,33 @@
\CF@remove@movearg@a#1\@nil\CF@after@movearg
\CF@exp@macroarg\CF@draw@atomgroup@b{\CF@after@movearg}%
}%
- {\let\CF@current@atom\@empty
+ {\let\CF@current@atom\empty
\CF@draw@atomgroup@b{#1}%
}%
}%
}
-\CF@def\CF@draw@atomgroup@b#1{%
+\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@eadd@tocs\CF@current@atom{\expandafter{\CF@firsttonil#1\@nil}}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@gobarg#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}%
+ {\CF@eadd@tocs\CF@current@atom{\CF@firsttonil#1\@nil}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@gobarg#1}%
}%
}%
}%
}
-% enl\`eve tous les "@{nom}" de la sc #1
-\CF@def\CF@remove@movearg#1{%
+% enlève tous les "@{nom}" de la sc #1
+\def\CF@remove@movearg#1{%
\CF@exp@after{\expandafter\CF@if@instr\expandafter{#1}}{\CF@arobas}%
{\expandafter\CF@remove@movearg@a#1\@nil#1%
\CF@remove@movearg#1%
@@ -1214,65 +1292,65 @@
{}%
}
-% enl\`eve le premier "@{<nom>}" de l'argument et l'assigne \`a #2
-\CF@def\CF@remove@movearg@a#1\@nil#2{%
+% enlève le premier "@{<nom>}" de l'argument et l'assigne à #2
+\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@exp@second{\def#2}{\CF@gobarg##1}% mange le \relax
\CF@remove@movearg@c\relax
}%
- \def\CF@remove@movearg@c##1\@nil{\CF@expadd@tocs#2{\@gobbletwo##1}}% mange le \relax et le <nom>
+ \def\CF@remove@movearg@c##1\@nil{\CF@eadd@tocs#2{\CF@gobtwoargs##1}}% mange le \relax et le <nom>
\CF@remove@movearg@b\relax#1\@nil
}
-\CF@def\CF@draw@atomgroup@bi#1{% transforme #1 en un groupe d'atomes
+\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
+ \let\CF@current@atom\empty
}
{\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
+ \let\CF@current@atom\empty
\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@exp@macroarg\CF@draw@atomgroup@a{\@gobble#1}%
+ \let\CF@current@atom\empty
+ \CF@exp@macroarg\CF@draw@atomgroup@a{\CF@gobarg#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@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@eadd@tocs\CF@current@atom{\expandafter{\CF@firsttonil#1\@nil}}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@gobarg#1}%
}%
- {\CF@exp@macroarg\CF@ifcar@isupperletter{\@car#1\@nil}%
+ {\CF@exp@macroarg\CF@ifcar@isupperletter{\CF@firsttonil#1\@nil}%
{\expandafter\let\csname atom@\number\CF@cnt@atomingroup\endcsname\CF@current@atom
- \let\CF@current@atom\@empty
+ \let\CF@current@atom\empty
\CF@draw@atomgroup@a{#1}%
}%
{\CF@ifx?\CF@toks@a
- {\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@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@exp@macroarg\CF@if@firsttokmatch{\CF@gobarg#1}[% un crochet après le "?"
+ {\expandafter\CF@grab@optarg\CF@gobarg#1\@nil\CF@after@hook}%
+ {\expandafter\CF@grab@optarg\expandafter[\expandafter]\CF@gobarg#1\@nil\CF@after@hook}%
+ \CF@exp@twomacroargs\CF@if@instr{\CF@hook@list}{\expandafter(\CF@hook@currentname)}% crochet déjà défini ?
+ {\CF@exp@macroarg\CF@hook@parselist{\CF@hook@currentname}% chercher les caractéristiques du crochet sauvegardé
\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}}%
- \CF@expadd@tocs\CF@hook@drawlist{\expandafter{\CF@current@atom}}% ajoute les 4 arguments \`a la liste des crochets \`a tracer
+ \CF@eadd@tocs\CF@hook@drawlist{\expandafter{\CF@hook@savedcontent}}%
+ \CF@eadd@tocs\CF@hook@drawlist{\expandafter{\CF@current@atom}}% ajoute les 4 arguments à la liste des crochets à tracer
\global\let\CF@hook@drawlist\CF@hook@drawlist
}%
{\CF@edefadd@tocs\CF@hook@list{(\CF@hook@currentname)|n\number\CF@cnt@groupnumber-\number\CF@cnt@atomingroup|}%
- \CF@expadd@tocs\CF@hook@list{\CF@current@atom|}%
+ \CF@eadd@tocs\CF@hook@list{\CF@current@atom|}%
\global\let\CF@hook@list\CF@hook@list
}%
\CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@after@hook}%
}%
- {\CF@expadd@tocs\CF@current@atom{\@car#1\@nil}%
- \CF@exp@macroarg\CF@draw@atomgroup@bi{\@gobble#1}%
+ {\CF@eadd@tocs\CF@current@atom{\CF@firsttonil#1\@nil}%
+ \CF@exp@macroarg\CF@draw@atomgroup@bi{\CF@gobarg#1}%
}%
}%
}%
@@ -1282,27 +1360,27 @@
}%
}
-\CF@def\CF@kook@defaultname{a}
-\CF@def\CF@hook@defaultlink{-}
-\CF@def\CF@hook@defaulttikz{}
+\def\CF@kook@defaultname{a}
+\def\CF@hook@defaultlink{-}
+\def\CF@hook@defaulttikz{}
-\CF@def\CF@hook@parseoptarg#1,#2,#3\@nil{%
+\def\CF@hook@parseoptarg#1,#2,#3\@nil{%
\CF@testempty@andassign\CF@hook@currentname{#1}\CF@kook@defaultname
\CF@testempty@andassign\CF@hook@currentlink{#2}\CF@hook@defaultlink
\CF@testempty@andassign\CF@hook@currenttikz{#3}\CF@hook@defaulttikz
}
-\CF@def\CF@grab@optarg[#1]#2\@nil#3{%
+\def\CF@grab@optarg[#1]#2\@nil#3{%
\CF@hook@parseoptarg#1,,\@nil
\def#3{#2}%
}
-\CF@def\CF@hook@parselist#1{% #1 est le nom du noeud \`a retrouver
+\def\CF@hook@parselist#1{% #1 est le nom du noeud à retrouver
\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{%
+\def\CF@remove@hook#1{%
\CF@exp@macroarg\CF@if@instr{#1}?%
{\expandafter\CF@remove@hook@a\expandafter\relax#1\@nil#1%
\CF@remove@hook#1%
@@ -1310,51 +1388,42 @@
{}%
}
-\CF@def\CF@remove@hook@a#1?#2\@nil#3{%
+\def\CF@remove@hook@a#1?#2\@nil#3{%
\CF@if@firsttokmatch{#2}[%
{\CF@remove@hook@b#1?#2\@nil#3}
- {\CF@exp@second{\def#3}{\@gobble#1#2}}%
-}
-
-\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}%
- \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}}%
+ {\CF@exp@second{\def#3}{\CF@gobarg#1#2}}%
}
-\setlewis{}{}{}
-\CF@def\setlewisdist#1{%
- \CF@ifempty{#1}{\def\CF@lewis@dist{0.2em}}{\def\CF@lewis@dist{#1}}%
-}
-\setlewisdist{0.3em}
+\def\CF@remove@hook@b#1?[#2]#3\@nil#4{\CF@exp@second{\def#4}{\CF@gobarg#1#3}}
-\CF@def\Lewis{\@testopt{\CF@lewis@a{}}{1}}
+\def\Lewis{\CF@testopt{\CF@lewis@a{}}{1}}
-\CF@def\lewis{\@testopt{\CF@lewis@a{,overlay}}{1}}
+\def\lewis{\CF@testopt{\CF@lewis@a{,overlay}}{1}}
-\CF@def\CF@lewis@a#1[#2]{%
+\def\CF@lewis@a#1[#2]{%
+ \CF@valuetomacro\CF@lewis@widthdouble[0.3ex]{lewis | width}%
+ \CF@valuetomacro\CF@lewis@offset[0.4ex]{lewis sep}%
+ \CF@valuetomacro\CF@lewis@length[1.5ex]{lewis length}%
+ \CF@valuetomacro\CF@lewis@style[]{lewis style}%
+ \CF@valuetomacro\CF@lewis@dist[0.3em]{lewis dist}%
+ \CF@valuetomacro\CF@lewis@radius[0.15ex]{lewis radius}%
\CF@ifempty{#2}{\def\CF@lewis@diagcoeff{1}}{\def\CF@lewis@diagcoeff{#2}}%
\CF@lewis@b{#1}%
}
-\CF@def\CF@lewis@b#1#2{\CF@lewis@c#2\@nil{#1}}
+\def\CF@lewis@b#1#2{\CF@lewis@c#2\@nil{#1}}
-\CF@def\CF@lewis@c#1,#2\@nil#3{%
+\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:%
+ \CF@makeother;\CF@makeother:%
\node(CF@lewis@anchor){};
\def\CF@lewis@remainpos{#1}%
- \let\CF@lewis@previouspos\@empty
+ \let\CF@lewis@previouspos\empty
\loop
- \unless\ifx\CF@lewis@remainpos\@empty
- \edef\CF@lewis@currentpos{\expandafter\@car\CF@lewis@remainpos\@nil}%
- \edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
+ \unless\ifx\CF@lewis@remainpos\empty
+ \edef\CF@lewis@currentpos{\expandafter\CF@firsttonil\CF@lewis@remainpos\@nil}%
+ \edef\CF@lewis@remainpos{\expandafter\CF@gobarg\CF@lewis@remainpos}%
\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}%
@@ -1364,13 +1433,13 @@
\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}%
+ \if.\expandafter\CF@firsttonil\CF@lewis@remainpos\relax\@nil
+ \edef\CF@lewis@remainpos{\expandafter\CF@gobarg\CF@lewis@remainpos}%
\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);%
+ (\CF@lewis@x pt+\CF@lewis@xoffset*\CF@lewis@current@offset,\CF@lewis@y pt+\CF@lewis@yoffset*\CF@lewis@current@offset)circle(\CF@lewis@radius);%
\else
- \if|\expandafter\@car\CF@lewis@remainpos\relax\@nil
- \edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
+ \if|\expandafter\CF@firsttonil\CF@lewis@remainpos\relax\@nil
+ \edef\CF@lewis@remainpos{\expandafter\CF@gobarg\CF@lewis@remainpos}%
\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]%
@@ -1379,13 +1448,13 @@
(\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)--
(\CF@lewis@x pt-\CF@lewis@length*\CF@lewis@yoffset/2 pt,\CF@lewis@y+\CF@lewis@length*\CF@lewis@xoffset/2 pt)--cycle;%
\else
- \if:\expandafter\@car\CF@lewis@remainpos\relax\@nil
- \edef\CF@lewis@remainpos{\expandafter\@gobble\CF@lewis@remainpos}%
+ \if:\expandafter\CF@firsttonil\CF@lewis@remainpos\relax\@nil
+ \edef\CF@lewis@remainpos{\expandafter\CF@gobarg\CF@lewis@remainpos}%
\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);%
+ (\CF@lewis@x pt+\CF@lewis@dist*\CF@lewis@yoffset/2 pt,\CF@lewis@y-\CF@lewis@dist*\CF@lewis@xoffset/2 pt)circle(\CF@lewis@radius)%
+ (\CF@lewis@x pt-\CF@lewis@dist*\CF@lewis@yoffset/2 pt,\CF@lewis@y+\CF@lewis@dist*\CF@lewis@xoffset/2 pt)circle(\CF@lewis@radius);%
\else
\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}%
@@ -1400,16 +1469,13 @@
\endtikzpicture
}
-\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@a}
+\def\Chembelow{\begingroup\let\CF@tmp@str\CF@gobarg\CF@chembelow@a}
-\CF@def\chembelow{\begingroup\let\CF@tmp@str\@firstofone\CF@chembelow@a}
+\def\chembelow{\begingroup\let\CF@tmp@str\CF@id\CF@chembelow@a}
-\CF@def\CF@chembelow@a{\@testopt\CF@chembelow@b\CF@stacksep}
+\def\CF@chembelow@a{\CF@testopt\CF@chembelow@b\CF@stacksep}
-\CF@def\CF@chembelow@b[#1]#2#3{%
+\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
@@ -1421,13 +1487,13 @@
\endgroup
}
-\CF@def\Chemabove{\begingroup\let\CF@tmp@str\@gobble\CF@chemabove@a}
+\def\Chemabove{\begingroup\let\CF@tmp@str\CF@gobarg\CF@chemabove@a}
-\CF@def\chemabove{\begingroup\let\CF@tmp@str\@firstofone\CF@chemabove@a}
+\def\chemabove{\begingroup\let\CF@tmp@str\CF@id\CF@chemabove@a}
-\CF@def\CF@chemabove@a{\@testopt\CF@chemabove@b\CF@stacksep}
+\def\CF@chemabove@a{\CF@testopt\CF@chemabove@b\CF@stacksep}
-\CF@def\CF@chemabove@b[#1]#2#3{%
+\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
@@ -1439,9 +1505,9 @@
\endgroup
}
-\CF@def\chemmove{\@testopt\CF@chemmove{}}
+\def\chemmove{\CF@testopt\CF@chemmove{}}
-\CF@def\CF@chemmove[#1]#2{%
+\def\CF@chemmove[#1]#2{%
\CF@doifnotempty{#2}%
{\expandafter\tikzpicture\romannumeral\CF@ifempty{#1}%
{\z@[overlay,remember picture,-CF]}
@@ -1451,26 +1517,26 @@
}%
}
-\CF@def\chemnameinit#1{%
+\def\chemnameinit#1{%
\setbox\CF@stuff@box\hbox{#1}%
\xdef\CF@dp@max{\the\dp\CF@stuff@box}%
}
\let\CF@dp@max\z@
-\CF@def\CF@parse@molname#1\\#2\@nil{%
+\def\CF@parse@molname#1\\#2\@nil{%
\hbox to\CF@wd@stuffbox{\hss#1\hss}%
\CF@doifnotempty{#2}{\CF@parse@molname#2\@nil}%
}
-\CF@def\chemname{%
- \@ifstar
+\def\chemname{%
+ \CF@ifstar
{\CF@name@dp@adjustfalse\CF@chemname@a}
{\CF@name@dp@adjusttrue \CF@chemname@a}%
}
-\CF@def\CF@chemname@a{\@testopt\CF@chemname@b{1.5ex}}
+\def\CF@chemname@a{\CF@testopt\CF@chemname@b{1.5ex}}
-\CF@def\CF@chemname@b[#1]#2#3{%
+\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
@@ -1483,61 +1549,16 @@
}%
}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% S C H E M A S R E A C T I O N N E L S %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% S C H É M A S R É A C T I O N N E L S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\let\CF@scheme@nest\z@
-\newcount\CF@compound@cnt
-
-\newdimen\CF@arrow@size
-
-\newif\ifCF@name@start
-\newif\ifCF@name@end
-\newif\ifCF@reac@debug
+\def\CF@subscheme{\CF@testopt\CF@subscheme@a{}}
+\def\CF@subscheme@a[#1]{\CF@testopt{\CF@subscheme@b[#1]}{text}}
+\def\CF@subscheme@b[#1][#2]#3{\schemestart[#1][#2]#3\schemestop}
-\let\CF@scheme@nest\z@% ne PAS modifier cette ligne !
-
-\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}
-
-\CF@def\setcompoundstyle{\def\CF@default@compound@style}
-\setcompoundstyle{}
-
-\CF@def\CF@set@style#1,#2,#3\@nil#4#5#6{%
- \def#4{#1}%
- \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{%
- \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{}% style de fl\`eche
-
-\CF@def\setarrowoffset#1{%
- \CF@ifempty{#1}{\def\CF@arrow@offset{1em}}{\def\CF@arrow@offset{#1}}%
-}%
-\setarrowoffset{}
-
-\CF@def\setcompoundsep#1{%
- \CF@ifempty{#1}{\def\CF@compound@sep{5em}}{\def\CF@compound@sep{#1}}%
-}
-\setcompoundsep{}
-
-\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{%
+\def\chemleft#1#2\chemright#3{%
\leavevmode
\begingroup
\setbox\z@\hbox{$\vcenter{\hbox{}}$}\edef\CF@delim@math@ht{\the\ht\z@}%
@@ -1548,11 +1569,11 @@
\endgroup
}
-\CF@def\chemright#1{%
- \immediate\write\CF@unused{Package \CF@package@name\space Warning: "\string\chemright\string#1"ignored! No \string\chemleft\space previously found.^^J}%
+\def\chemright#1{%
+ \immediate\write-1{Package \CFname\space Warning: "\string\chemright\string#1"ignored! No \string\chemleft\space previously found.^^J}%
}
-\CF@def\chemup#1#2\chemdown#3{%
+\def\chemup#1#2\chemdown#3{%
\begingroup
\setbox\z@\hbox{\printatom{#2}}\edef\CF@delim@dim{\the\dimexpr\wd\z@/\tw@}%
\tikzpicture[every node/.style={inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline]%
@@ -1563,88 +1584,98 @@
\endgroup
}
-\CF@def\chemdown#1{%
- \immediate\write\CF@unused{Package \CF@package@name\space Warning: "\string\chemdown\string#1" ignored! No \string\chemup\space previously found.^^J}%
+\def\chemdown#1{%
+ \immediate\write-1{Package \CFname\space Warning: "\string\chemdown\string#1" ignored! No \string\chemup\space previously found.^^J}%
+}
+
+\def\CF@set@style#1,#2,#3\@nil#4#5#6{%
+ \def#4{#1}\let#5\empty\let#6\empty
+ \CF@if@firsttokmatch\CF@quark{#2\relax}
+ {}%
+ {\def#5{#2}%
+ \CF@if@firsttokmatch\CF@quark{#3\relax}
+ {}%
+ {\CF@set@style@a#3\@nil#6}%
+ }%
}
+\def\CF@set@style@a#1,\CF@quark#2\@nil#3{\def#3{#1}}
-\CF@def\CF@and{\futurelet\CF@toks@a\CF@and@a}
+\def\CF@and{\futurelet\CF@toks@a\CF@and@a}
-\CF@def\CF@and@a{%
+\def\CF@and@a{%
\CF@ifx\CF@toks@a\bgroup
\CF@and@b
{\CF@and@b{}}%
}
-\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}%
+\def\CF@and@b#1{%
+ \CF@set@style#1,\CF@quark,\CF@quark\@nil\CF@signspace@ante\CF@signspace@post\CF@sign@vshift
+ \CF@doifempty\CF@signspace@ante{\CF@valuetomacro\CF@signspace@ante[0.5em]{+ sep left}}%
+ \CF@doifempty\CF@signspace@post{\CF@valuetomacro\CF@signspace@post[0.5em]{+ sep right}}%
+ \CF@doifempty\CF@sign@vshift{\CF@valuetomacro\CF@sign@vshift[0pt]{+ vshift}}%
\raise\CF@sign@vshift\hbox{\kern\CF@signspace@ante$+$\kern\CF@signspace@post}%
}
-\CF@def\setandsign#1{%
- \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{%
+\def\schemestart{%
\xdef\CF@scheme@nest{\number\numexpr\CF@scheme@nest+\@ne}%
- \@testopt\CF@schemestart@a{}%
-}
-
-\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
+ \CF@testopt\CF@schemestart@a{}%
+}
+
+\def\CF@schemestart@a[#1]{%
+ \CF@valuetomacro\default@compound@style[]{compound style}%
+ \CF@set@style#1,\CF@quark,\CF@quark\@nil\CF@arrow@angle\CF@arrow@length\CF@arrow@style
+ \CF@doifempty\CF@arrow@angle{\CF@valuetomacro\CF@arrow@angle[0]{arrow angle}}%
+ \CF@doifempty\CF@arrow@length{\CF@valuetomacro\CF@arrow@length[1]{arrow coeff}}%
+ \CF@valuetomacro\CF@default@arrow@style[]{arrow style}%
+ \CF@valuetomacro\CF@arrow@offset[1em]{arrow offset}%
+ \CF@valuetomacro\CF@compound@sep[5em]{compound sep}%
+ \CF@valuetomacro\CF@arrow@labelsep[3pt]{arrow label sep}%
+ \CF@eexp@second{\CF@preadd@tocs\CF@default@arrow@style}{\useKV[chemfig]{arrow head},}%
+ \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
- \tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline,remember picture]%
- \fi
+ {\CF@exp@second{\CF@preadd@tocs\CF@arrow@style}{\CF@default@arrow@style,}}% se rajoute après le style par défaut
+ \CF@valuetomacro\CF@arrow@double@sep[2pt]{arrow double sep}%
+ \pgfmathsetmacro\CF@arrow@double@sep{\CF@arrow@double@sep/2}%
+ \CF@valuetomacro\CF@arrow@double@pos@start[0.6]{arrow double coeff}%
+ \pgfmathsetmacro\CF@arrow@double@pos@start{(1-\CF@arrow@double@pos@start)/2}%
+ \pgfmathsetmacro\CF@arrow@double@pos@end{1-\CF@arrow@double@pos@start}%
+ \ifboolKV[chemfig]{scheme debug}
+ {\tikzpicture[every node/.style={draw,anchor=base,inner sep=\z@,outer sep=\z@,minimum size=1.5pt},baseline,remember picture]%
+ }
+ {\tikzpicture[every node/.style={anchor=base,inner sep=\z@,outer sep=\z@,minimum size=\z@},baseline,remember picture]%
+ }%
\let\merge\CF@merge
\expandafter\let\csname+\endcsname\CF@and
\let\arrow\CF@arrow
\let\schemestop\CF@schemestop
\let\subscheme\CF@subscheme
- \@testopt{\CF@schemestart@b[#1]}{text}%
+ \CF@testopt{\CF@schemestart@b[#1]}{text}%
}
-\CF@def\CF@schemestart@b[#1][#2]{%
- \ifnum\CF@scheme@nest=\@ne% la commande n'est pas imbriqu\'ee ?
+\def\CF@schemestart@b[#1][#2]{%
+ \ifnum\CF@scheme@nest=\@ne% la commande n'est pas imbriquée ?
\CF@compound@cnt\z@
\fi
\edef\CF@current@nodename{c\number\CF@compound@cnt}%
- \let\CF@next@nodename\@empty
- \let\CF@next@nodestyle\@empty
- \let\CF@direct@arrow@list\@empty
- \ifCF@reac@debug
- \node[fill,green](\CF@current@nodename){};%
- \else
- \node(\CF@current@nodename){};%
- \fi
+ \let\CF@next@nodename\empty
+ \let\CF@next@nodestyle\empty
+ \let\CF@direct@arrow@list\empty
+ \ifboolKV[chemfig]{scheme debug}
+ {\node[fill,green](\CF@current@nodename){};}
+ {\node(\CF@current@nodename){};}%
\def\CF@next@nodeanchor{#2}%
\CF@doifempty\CF@next@nodeanchor{\def\CF@next@nodeanchor{text}}%
- \let\CF@compound\@empty
+ \let\CF@compound\empty
\CF@schemestart@c
}
-\CF@def\CF@schemestart@c{%
+\def\CF@schemestart@c{%
\futurelet\CF@toks@a\CF@schemestart@e
}
-\expandafter\CF@def\expandafter\CF@schemestart@d\space{\futurelet\CF@toks@a\CF@schemestart@e}
+\expandafter\def\expandafter\CF@schemestart@d\space{\futurelet\CF@toks@a\CF@schemestart@e}
-\CF@def\CF@schemestart@e{% ... et l'examine :
+\def\CF@schemestart@e{% ... et l'examine :
\CF@if@firsttokin@a{\arrow\schemestop\merge}%
{}
{\CF@ifx\CF@toks@a\bgroup
@@ -1660,21 +1691,21 @@
}%
}
-\CF@def\CF@add@nextarg#1{\CF@add@tocs\CF@compound{{#1}}\CF@schemestart@c}
+\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
+\def\CF@display@compound#1#2{% #1 = nom et #2 = style
\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@ifx\default@compound@style\empty
+ {\let\CF@current@nodestyle\empty}
+ {\CF@exp@second{\def\CF@current@nodestyle}{\default@compound@style,}}%
\CF@add@tocs\CF@current@nodestyle{anchor=\CF@next@nodeanchor,at=(\CF@current@nodename)}%
\CF@ifempty{#2}%
{\CF@doifnotempty\CF@next@nodestyle
- {\CF@expadd@tocs\CF@current@nodestyle{\expandafter,\CF@next@nodestyle}}%
+ {\CF@eadd@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}%
+ {\immediate\write-1{Package \CFname\space Warning: two styles for the same node, first style "\CF@next@nodestyle" ignored^^J}%
}%
\CF@add@tocs\CF@current@nodestyle{,#2}%
}%
@@ -1682,78 +1713,79 @@
{\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}%
+ {\immediate\write-1{Package \CFname\space Warning: two names for the same node, first name "\CF@next@nodename" ignored^^J}%
}%
\edef\CF@tmp@str{#1}%
}%
\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
+ \ifboolKV[chemfig]{scheme debug}%
+ {\node[draw=none,anchor=270,at=(\CF@tmp@str.90),fill=green!60,overlay,opacity=0.5]{\scriptsize\bfseries\CF@tmp@str};%
+ }
+ {}%
\let\CF@current@nodename\CF@tmp@str
}%
}
-\CF@def\CF@schemestop{%
+\def\CF@schemestop{%
\CF@display@compound{}{}%
\CF@direct@arrow@list
\endtikzpicture
\xdef\CF@scheme@nest{\number\numexpr\CF@scheme@nest-\@ne}%
}
-\CF@def\CF@analyse@arrowarg#1{\CF@analyse@arrowarg@i#1[]\@nil}
+\def\CF@analyse@arrowarg#1{\CF@analyse@arrowarg@i#1[]\@nil}
-\CF@def\CF@analyse@arrowarg@i#1[#2]#3\@nil{%
+\def\CF@analyse@arrowarg@i#1[#2]#3\@nil{%
\CF@if@instr{#1}.{\CF@add@tocs\CF@tmp@str{#1[#2]}}{\CF@add@tocs\CF@tmp@str{#1.[#2]}}%
}
-\CF@def\CF@arrow{%
- \@ifnextchar(%
+\def\CF@arrow{%
+ \CF@ifnextchar(%
\CF@arrow@a
- {\@ifnextchar\bgroup{\CF@arrow@b(.[]--.[])}{\CF@arrow@b(.[]--.[]){}}}%
+ {\CF@ifnextchar\bgroup{\CF@arrow@b(.[]--.[])}{\CF@arrow@b(.[]--.[]){}}}%
}
-\CF@def\CF@arrow@a(#1--#2){%
+\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@b\CF@tmp@str}{\expandafter\CF@arrow@b\CF@tmp@str{}}%
+ \CF@ifnextchar\bgroup{\expandafter\CF@arrow@b\CF@tmp@str}{\expandafter\CF@arrow@b\CF@tmp@str{}}%
}
-\CF@def\CF@arrow@b(#1.#2[#3]--#4.#5[#6])#7{%
- \def\CF@current@arrowtype{#7}% nom de la fl\`eche
+\def\CF@arrow@b(#1.#2[#3]--#4.#5[#6])#7{%
+ \def\CF@current@arrowtype{#7}% nom de la flèche
\CF@doifempty\CF@current@arrowtype{\def\CF@current@arrowtype{->}}%
- \@testopt{\CF@arrow@c(#1.#2[#3]--#4.#5[#6])}{}%
+ \CF@testopt{\CF@arrow@c(#1.#2[#3]--#4.#5[#6])}{}%
}
-\CF@def\CF@arrow@c(#1.#2[#3]--#4.#5[#6])[#7]{%
+\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@arrow@d#7,\empty,\empty\@nil
}
-\CF@def\CF@arrow@d#1,#2,#3\@nil{%
+\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@eadd@tocs\CF@tmp@str{\expandafter{#2}}%
+ \expandafter\CF@eadd@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 : styles des nodes
-% #7 : angle fl\`eche #8 : longueur fl\`eche #9 : style tikz de la fl\`eche
-\CF@def\CF@arrow@e(#1.#2[#3]--#4.#5[#6])#7#8#9{%
+% #7 : angle flèche #8 : longueur flèche #9 : style tikz de la flèche
+\def\CF@arrow@e(#1.#2[#3]--#4.#5[#6])#7#8#9{%
\let\CF@arrow@current@style\CF@arrow@style
- \if\CF@arobas\expandafter\@car\detokenize{#1.}\@nil% si #1 commence par @
- \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}}%
+ \if\CF@arobas\expandafter\CF@firsttonil\detokenize{#1.}\@nil% si #1 commence par @
+ \if\CF@arobas\expandafter\CF@firsttonil\detokenize{#4.}\@nil
+ \CF@eadd@tocs\CF@direct@arrow@list{\expandafter\CF@direct@arrow\expandafter{\CF@current@arrowtype}{#1}{#2}{#4}{#5}{#9}}%
\let\CF@next@action\CF@schemestart@c
\else
\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}%
- \CF@exp@second{\def\CF@current@nodename}{\@gobble#1}%
+ \CF@exp@second{\def\CF@current@nodename}{\CF@gobarg#1}%
\let\CF@arrow@start@name\CF@current@nodename
\let\CF@arrow@end@name\CF@next@nodename
\CF@arrow@f{#7}{#8}{#2}{#5}%
@@ -1762,8 +1794,8 @@
\else
\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}%
+ \if\CF@arobas\expandafter\CF@firsttonil\detokenize{#2.}\@nil
+ \errmessage{Package \CFname\space Error: syntax "(<name>--@<name>)" is not allowed}%
\else
\CF@display@compound{#1}{#3}%
\edef\CF@arrow@start@name{\CF@ifempty{#1}\CF@current@nodename{#1}\CF@doifnotempty{#2}{.#2}}%
@@ -1772,12 +1804,12 @@
\def\CF@next@nodestyle{#6}%
\fi
\fi
- \CF@arrow@gobspaces% mange les espaces puis ex\'ecute \CF@next@action
+ \CF@arrow@gobspaces% mange les espaces puis exécute \CF@next@action
}
-\CF@def\CF@arrow@gobspaces{\futurelet\CF@toks@a\CF@arrow@gobspaces@a}
+\def\CF@arrow@gobspaces{\futurelet\CF@toks@a\CF@arrow@gobspaces@a}
-\CF@def\CF@arrow@gobspaces@a{%
+\def\CF@arrow@gobspaces@a{%
\CF@ifx\@sptoken\CF@toks@a
\CF@arrow@gobspaces@b
\CF@next@action
@@ -1785,19 +1817,19 @@
\expandafter\def\expandafter\CF@arrow@gobspaces@b\space{\futurelet\CF@toks@a\CF@arrow@gobspaces@a}
-\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@f#1#2#3#4{% #1=angle #2=longueur #3=ancre départ #4=ancre arrivée
+ \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.\CF@ifempty{#3}\CF@arrow@current@angle{#3}),shift=(\CF@arrow@current@angle:\CF@arrow@offset),red,fill](start@arrow){};%
+ \ifboolKV[chemfig]{scheme debug}
+ {\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.\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@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\CF@three@ea\endcsname
\expandafter\CF@grab@arrow@args\CF@current@arrowtype[]\@nil[][][][][][][][]\@nil
@@ -1805,26 +1837,26 @@
\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{%
- \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)%
+% trace un flèche initiée par (@nom--@nom)
+% #1=type de flèche #2=nom depart #3=ancre départ #4=nom arrivée #5=ancre arrivée #6=style flèche
+\def\CF@direct@arrow#1#2#3#4#5#6{%
+ \CF@exp@second{\def\CF@arrow@start@name}{\CF@gobarg#2}%
+ \CF@exp@second{\def\CF@arrow@end@name}{\CF@gobarg#4}%
+ \path[sloped,allow upside down](\CF@gobarg#2\ifx\empty#3\empty\else.#3\fi)--(\CF@gobarg#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}}% Ne pas utiliser \CF@ifempty ici !!!
- {\pgfpointanchor{\@gobble#4}{\ifx\@empty#5\@empty center\else#5\fi}}%
+ {\pgfpointanchor{\CF@gobarg#2}{\ifx\empty#3\empty center\else#3\fi}}% Ne pas utiliser \CF@ifempty ici !!!
+ {\pgfpointanchor{\CF@gobarg#4}{\ifx\empty#5\empty center\else#5\fi}}%
\let\CF@arrow@current@angle\pgfmathresult
\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@gobtonil\@car#1>\@nil\@nil
+\def\CF@merge@grab@chardir#1[#2][#3]#4\@nil{%
+ \expandafter\futurelet\expandafter\CF@toks@a\expandafter\CF@gobtonil\CF@firsttonil#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
@@ -1833,23 +1865,23 @@
\def\CF@merge@labelup{#2}\def\CF@merge@labeldo{#3}%
}
-\CF@def\CF@merge#1({%
+\def\CF@merge#1({%
\CF@merge@grab@chardir#1[][]\@nil
\CF@merge@a(%
}
-\CF@def\CF@merge@a#1--(#2){\@testopt{\CF@merge@b#1--(#2)}{}}
+\def\CF@merge@a#1--(#2){\CF@testopt{\CF@merge@b#1--(#2)}{}}
-\CF@def\CF@merge@b#1--(#2)[#3]{%
+\def\CF@merge@b#1--(#2)[#3]{%
\CF@display@compound{}{}%
- \CF@parse@mergeopt#3,\@empty,\@empty,\@empty\@nil
+ \CF@parse@mergeopt#3,\CF@quark,\CF@quark,\CF@quark\@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
\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@merge@c#1(\relax)% trace les lignes entre les noeuds précédents 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
+ \if x\expandafter\CF@firsttonil\CF@merge@extreme\@nil
\CF@add@tocs\CF@tmp@str{(\CF@merge@extreme@result pt,\CF@merge@ymax)--(\CF@merge@extreme@result pt,\CF@merge@ymin)}%
\else
\CF@add@tocs\CF@tmp@str{(\CF@merge@xmin,\CF@merge@extreme@result pt)--(\CF@merge@xmax,\CF@merge@extreme@result pt)}%
@@ -1861,18 +1893,18 @@
\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
+ \let\CF@tmp@str\empty
\CF@analyse@arrowarg{#2}%
\expandafter\CF@merge@d\CF@tmp@str\@nil
}
-\CF@def\CF@merge@c(#1){%
- \if\relax\expandafter\noexpand\@car#1\@nil
+\def\CF@merge@c(#1){%
+ \if\relax\expandafter\noexpand\CF@firsttonil#1\@nil
\else
\CF@if@stop{#1}%
{\edef\merge@current@nodename{\CF@before@stop#1\@nil}\edef\merge@current@anchor{\CF@after@stop#1\@nil}}%
{\def\merge@current@nodename{#1}\let\merge@current@anchor\CF@merge@angle}%
- \if x\expandafter\@car\CF@merge@extreme\@nil
+ \if x\expandafter\CF@firsttonil\CF@merge@extreme\@nil
\pgfextracty\CF@dim{\pgfpointanchor\merge@current@nodename\merge@current@anchor}%
\expandafter\draw\expandafter[\CF@merge@style,shorten >=0,-]([shift=(\CF@merge@angle:\CF@arrow@offset)]\merge@current@nodename.\merge@current@anchor)--(\CF@merge@extreme@result pt,\CF@dim);%
\else
@@ -1883,24 +1915,38 @@
\fi
}
-\CF@def\CF@merge@d#1.#2[#3]\@nil{%
+\def\CF@merge@d#1.#2[#3]\@nil{%
\def\CF@next@nodename{#1}%
\edef\CF@next@nodeanchor{\CF@ifempty{#2}{180+\CF@merge@angle}{#2}}%
\def\CF@next@nodestyle{#3}%
- \let\CF@compound\@empty
+ \let\CF@compound\empty
\CF@schemestart@c
}
-\CF@def\CF@parse@mergeopt#1,#2,#3,#4\@nil{%
+\def\CF@parse@mergeopt#1,#2,#3,#4\@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}%
+ \def\CF@merge@tocoeff{0.5}%
+ \def\CF@merge@splitcoeff{0.5}%
+ \CF@eexp@second{\def\CF@merge@style}{\useKV[chemfig]{arrow head}}%
+ \CF@if@firsttokmatch\CF@quark{#2\relax}
+ {}
+ {\CF@ifempty{#2}{\def\CF@merge@tocoeff{0.5}}{\def\CF@merge@tocoeff{#2}}%
+ \CF@if@firsttokmatch\CF@quark{#3\relax}
+ {}
+ {\CF@ifempty{#3}{\def\CF@merge@splitcoeff{0.5}}{\def\CF@merge@splitcoeff{#3}}%
+ \CF@if@firsttokmatch\CF@quark{#4\relax}
+ {}
+ {\CF@parse@mergeopt@i#4\@nil}%
+ }%
+ }%
}
-\CF@def\CF@merge@parse@nodelist(#1){%
- \if\relax\expandafter\noexpand\@car#1\@nil
+\def\CF@parse@mergeopt@i#1,\CF@quark#2\@nil{%
+ \CF@ifempty{#1}{}{\CF@add@tocs\CF@merge@style{,#1}}%
+}
+
+\def\CF@merge@parse@nodelist(#1){%
+ \if\relax\expandafter\noexpand\CF@firsttonil#1\@nil
\else
\CF@if@stop{#1}%
{\edef\merge@current@nodename{\CF@before@stop#1\@nil}\edef\merge@current@anchor{\CF@after@stop#1\@nil}}%
@@ -1915,16 +1961,16 @@
\fi
}
-\CF@def\CF@grab@arrow@name#1[#2\@nil{\detokenize{CF@arrow(#1)}}
-\CF@def\CF@grab@arrow@args#1[#2\@nil{[#2}
+\def\CF@grab@arrow@name#1[#2\@nil{\detokenize{CF@arrow(#1)}}
+\def\CF@grab@arrow@args#1[#2\@nil{[#2}
-\CF@def\CF@make@parameter@text#1{%
+\def\CF@make@parameter@text#1{%
\toks\z@{}%
\CF@cnt@groupnumber#1\relax
\CF@make@parameter@text@a1%
}
-\CF@def\CF@make@parameter@text@a#1{%
+\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@a\expandafter{\number\numexpr#1+1\expandafter}%
@@ -1932,51 +1978,51 @@
}
% #1 est le nombre d'arguments optionnels, #2 est le nom et #3 le code
-\CF@def\definearrow#1#2#3{%
+\def\definearrow#1#2#3{%
\begingroup
\CF@make@parameter@text{#1}%
\expandafter\endgroup
\expandafter\def\csname\detokenize{CF@arrow(#2)}\expandafter\endcsname\the\toks\z@{#3\CF@gobtonil}%
}
-\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}
+\def\CF@if@stop#1{\CF@if@stop@a#1.\@nil}
+\def\CF@if@stop@a#1.#2\@nil{\ifx\empty#2\empty\expandafter\CF@execsecond\else\expandafter\CF@execfirst\fi}
+\def\CF@before@stop#1.#2\@nil{#1}
+\def\CF@after@stop#1.#2\@nil{#2}
-\CF@def\CF@rotate@node*#1#2\@nil{\CF@if@stop{#1}{\CF@before@stop#1\@nil}{#1}}
-\CF@def\CF@anchor@node*#1#2\@nil#3{\CF@if@stop{#1}{\CF@after@stop#1\@nil}{\CF@arrow@current@angle-#390-#1}}
+\def\CF@rotate@node*#1#2\@nil{\CF@if@stop{#1}{\CF@before@stop#1\@nil}{#1}}
+\def\CF@anchor@node*#1#2\@nil#3{\CF@if@stop{#1}{\CF@after@stop#1\@nil}{\CF@arrow@current@angle-#390-#1}}
-% #1 = label #2 = position #3 = + ou - (au dessus ou au dessous) #4 : nom du noeud de d\'epart
+% #1 = label #2 = position #3 = + ou - (au dessus ou au dessous) #4 : nom du noeud de départ
% #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{%
+\def\CF@arrow@display@label#1#2#3#4#5#6#7#8{%
\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@a#1#2#3{%
+\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}%
- \else
- node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep](shifted@node){}%
- node[rotate=\CF@rotate@node#1\@nil,anchor=\CF@anchor@node#1\@nil#3,at=(shifted@node)]{\expandafter\@gobble\@gobble#1}%
- \fi
+ {\if*\expandafter\CF@firsttonil\detokenize{#1}\@nil
+ \ifboolKV[chemfig]{scheme 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\CF@gobarg\CF@gobarg#1}%
+ }
+ {node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep](shifted@node){}%
+ node[rotate=\CF@rotate@node#1\@nil,anchor=\CF@anchor@node#1\@nil#3,at=(shifted@node)]{\expandafter\CF@gobarg\CF@gobarg#1}%
+ }%
\else
- \ifCF@reac@debug
- node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep,draw,fill,cyan](shifted@node){}%
+ \ifboolKV[chemfig]{scheme debug}
+ {node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep,draw,fill,cyan](shifted@node){}%
node[draw,pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep]{#1}%
- \else
- node[pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep]{#1}%
- \fi
+ }
+ {node[pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep]{#1}%
+ }
\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{%
+% pose des noeuds décalés de la dimension #1 à (\CF@arrow@start@node) et (\CF@arrow@end@node)
+\def\CF@arrow@shift@nodes#1{%
\unless\ifdim\CF@ifempty{#1}\z@{#1}=\z@
\edef\CF@tmp@str{%
\noexpand\path(\CF@arrow@start@node)--(\CF@arrow@end@node)%
@@ -2024,12 +2070,12 @@
\definearrow3{<=>}{%
\CF@arrow@shift@nodes{#3}%
\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){};%
+ node[pos=0,sloped,yshift=\CF@arrow@double@sep](\CF@arrow@start@node @u0){}%
+ node[pos=0,sloped,yshift=-\CF@arrow@double@sep](\CF@arrow@start@node @d0){}%
+ node[pos=1,sloped,yshift=\CF@arrow@double@sep](\CF@arrow@start@node @u1){}%
+ node[pos=1,sloped,yshift=-\CF@arrow@double@sep](\CF@arrow@start@node @d1){};%
\begingroup
- \pgfarrowharpoontrue
+ \ifboolKV[chemfig]{arrow double harpoon}{\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
@@ -2040,11 +2086,11 @@
\CF@arrow@shift@nodes{#3}%
\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=\CF@arrow@double@pos@start,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){};%
+ node[pos=\CF@arrow@double@pos@end,sloped,yshift=-1pt](\CF@arrow@start@node @d1){};%
\begingroup
- \pgfarrowharpoontrue
+ \ifboolKV[chemfig]{arrow double harpoon}{\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
@@ -2053,12 +2099,12 @@
\definearrow3{<<->}{%
\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=\CF@arrow@double@pos@start,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=\CF@arrow@double@pos@end,sloped,yshift=1pt](\CF@arrow@start@node @u1){}%
node[pos=1,sloped,yshift=-1pt](\CF@arrow@start@node @d1){};%
\begingroup
- \pgfarrowharpoontrue
+ \ifboolKV[chemfig]{arrow double harpoon}{\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
@@ -2215,227 +2261,287 @@
}%
}
-\chemfigrestorecatcode
+\def\CF@grab@delim#1#2#3\@nil{\def\CF@left@delim{#1}\def\CF@right@delim{#2}}
+\def\polymerdelim[#1]#2#3{%
+ \setKVdefault[CFdelimiters]
+ {delimiters =(),
+ height =10pt,
+ depth ={},
+ open xshift =0pt,
+ close xshift =0pt,
+ indice =n,
+ }%
+ \setKV[CFdelimiters]{#1}%
+ \expandafter\expandafter\expandafter\CF@grab@delim\useKV[CFdelimiters]{delimiters}()\@nil
+ \edef\CF@delim@height{\the\dimexpr\useKV[CFdelimiters]{height}}%
+ \CF@eexp@macroarg\CF@ifempty{\useKV[CFdelimiters]{depth}}
+ {\let\CF@delim@depth\CF@delim@height}
+ {\edef\CF@delim@depth{\useKV[CFdelimiters]{depth}}}%
+ \edef\CF@delim@halfdim{\the\dimexpr(\CF@delim@height+\CF@delim@depth)/2}%
+ \edef\CF@delim@vshift {\the\dimexpr(\CF@delim@height-\CF@delim@depth)/2}%
+ \edef\CF@leftdelim@xshift {\the\dimexpr\useKV[CFdelimiters]{open xshift}}%
+ \edef\CF@rightdelim@xshift{\the\dimexpr\useKV[CFdelimiters]{close xshift}}%
+ \chemmove{%
+ \nulldelimiterspace0pt
+ \pgfextractx\CF@dim{\pgfpointanchor{#2}{center}}\edef\CF@leftdelim@x{\the\CF@dim}%
+ \pgfextracty\CF@dim{\pgfpointanchor{#2}{center}}\edef\CF@leftdelim@y{\the\CF@dim}%
+ \pgfextractx\CF@dim{\pgfpointanchor{#3}{center}}\edef\CF@rightdelim@x{\the\CF@dim}%
+ \node[at={(\CF@leftdelim@x+\CF@leftdelim@xshift,\CF@leftdelim@y+\CF@delim@vshift)}]
+ {$\left\CF@left@delim\vrule height\CF@delim@halfdim depth\CF@delim@halfdim width0pt\right.$};%
+ \node[at={(\CF@rightdelim@x+\CF@rightdelim@xshift,\CF@leftdelim@y+\CF@delim@vshift)}]
+ {$\left.\vrule height\CF@delim@halfdim depth\CF@delim@halfdim width0pt\right\CF@right@delim
+ \CF@eexp@macroarg\CF@doifnotempty{\useKV[CFdelimiters]{indice}}
+ {_{\rlap{$\scriptstyle\useKV[CFdelimiters]{indice}$}}}
+ $};
+ }%
+}
+\CFrestorecatcode
\endinput
-######################################################################
-# Historique #
-######################################################################
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% H I S T O R I Q U E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
v0.1 2010/06/23
- - Premi\`ere version publique sur le CTAN
+ - Première version publique sur le CTAN
----------------------------------------------------------------------
v0.2 2010/08/31
- Ajout de la documentation en anglais.
- Correction de bugs.
- - \printatom est d\'esormais une macro publique.
- - Les espaces sont permis dans les mol\'ecules. Ils seront
- ignor\'es par d\'efaut puisque les atomes sont compos\'es en
+ - \printatom est désormais une macro publique.
+ - Les espaces sont permis dans les molécules. Ils seront
+ ignorés par défaut puisque les atomes sont composés en
mode math par \printatom
- - Une paire de Lewis peut \^etre repr\'esent\'ee ":".
+ - Une paire de Lewis peut être représentée ":".
- Dans les cycles, une correction de la longueur du trait
- d\'eport\'e des liaisons doubles est fait de telle sorte que si
- l'on \'ecrit \chemfig{*5(=====)}, on obtient deux polygones
- r\'eguliers concentriques.
- - La s\'equence de contr\^ole \setnodestyle permet de sp\'ecifier
- le style des noeuds dessin\'es par tikz.
+ déporté des liaisons doubles est fait de telle sorte que si
+ l'on écrit \chemfig{*5(=====)}, on obtient deux polygones
+ réguliers concentriques.
+ - La séquence de contrôle \setnodestyle permet de spécifier
+ le style des n?uds dessinés par tikz.
----------------------------------------------------------------------
v0.3 2010/11/21
- - Am\'elioration de \definesubmol qui accepte les s\'equences de
- contr\^ole. On peut aussi choisir un alias dont la substitution
- est diff\'erente selon l'orientation de la liaison qui lui
+ - Amélioration de \definesubmol qui accepte les séquences de
+ contrôle. On peut aussi choisir un alias dont la substitution
+ est différente selon l'orientation de la liaison qui lui
arrive dessus.
- - Le caract\`ere "|" force la fin d'un atome. Si on \'ecrit
+ - Le caractère "|" force la fin d'un atome. Si on écrit
"D|ef" alors, chemfig verra deux atomes "D" et "ef".
- - Le caract\`ere "#" est reconnu lorsqu'il suit un caract\`ere de
- liaison. Il doit \^etre suivi d'un argument entre parenth\`eses
- qui contient l'offset de d\'ebut et de fin qui s'appliqueront
- \`a cette liaison.
- - La macro \chemfig admet un argument optionnel qui sera pass\'e
- \`a l'environnement tikzpicture dans lequel elle est dessin\'ee
- - Mise en place de la repr\'esentation des m\'ecanismes
- r\'eactionnels avec la synatxe "@{<nom>}" devant un atome o\`u
- "@{<nom>,<coeff>}" au tout d\'ebut de l'argument d'une liaison.
- Cette syntaxe permet de placer un noeud (au sens de tikz) qui
- deviendra l'extr\'emit\'e des fl\`eches des m\'ecanismes.
- Le trac\'e des fl\`eches est faite par la macro \chemmove dont
+ - Le caractère "#" est reconnu lorsqu'il suit un caractère de
+ liaison. Il doit être suivi d'un argument entre parenthèses
+ qui contient l'offset de début et de fin qui s'appliqueront
+ à cette liaison.
+ - La macro \chemfig admet un argument optionnel qui sera passé
+ à l'environnement tikzpicture dans lequel elle est dessinée
+ - Mise en place de la représentation des mécanismes
+ réactionnels avec la syntaxe "@{<nom>}" devant un atome où
+ "@{<nom>,<coeff>}" au tout début de l'argument d'une liaison.
+ Cette syntaxe permet de placer un n?ud (au sens de tikz) qui
+ deviendra l'extrémité des flèches des mécanismes.
+ Le tracé des flèches est faite par la macro \chemmove dont
l'argument optionnel devient celui de l'environnement
- tikspicture dans lequel sont faites les fl\`eches.
- - Pour le m\'ecanisme d'alignement vertical via le \vphantom, la
+ tikzpicture dans lequel sont faites les flèches.
+ - Pour le mécanisme d'alignement vertical via le \vphantom, la
commande \chemskipalign permet d'ignorer le groupe d'atomes
- dans lequel elle est \'ecrite.
+ dans lequel elle est écrite.
- La commande \chemname permet d'afficher un nom sous une
- mol\'ecule. la commande \chemnameinit initialise la plus grande
- profondeur rencontr\'ee.
- - La commande \lewis a \'et\'e modifi\'ee de telle sorte que les
- dessins des d\'ecorations soient proportionnels \`a la taille
+ molécule. la commande \chemnameinit initialise la plus grande
+ profondeur rencontrée.
+ - La commande \lewis a été modifiée de telle sorte que les
+ dessins des décorations soient proportionnels à la taille
de la police.
----------------------------------------------------------------------
v0.3a 2011/01/08
- Correction d'un bug dans l'argument optionnel de \definesubmol
lorsque celui-ci comporte des crochets.
- - Mise \`a jour du manuel en anglais.
+ - Mise à jour du manuel en anglais.
- Ajout de \vflipnext et \hflipnext pour retourner
- horizontalement ou verticalement la prochaine mol\'ecule.
+ horizontalement ou verticalement la prochaine molécule.
----------------------------------------------------------------------
v0.4 2011/03/07
- - chemfig est d\'esormais \'ecrit en plain-etex et donc
+ - chemfig est désormais écrit en plain-etex et donc
utilisable par d'autres formats que LaTeX.
- - Un peu plus de rigueur avec les catcodes des caract\`eres
- sp\'eciaux, notamment lorsque la commande \chemfig se trouve
+ - Un peu plus de rigueur avec les catcodes des caractères
+ spéciaux, notamment lorsque la commande \chemfig se trouve
dans l'argument de \chemmove, \chemabove, \chembelow, \chemrel.
- TODO : faut-il \scantoker l'argument de \chemfig pour \^etre
- d\'efinitivement d\'ebarass\'e de ces histoires de catcode ???
+ TODO : faut-il \scantoker l'argument de \chemfig pour être
+ définitivement débarrassé de ces histoires de catcode ???
- Correction d'un bug dans le calcul de l'angle des liaisons
----------------------------------------------------------------------
v0.4a 2011/04/10
- - Correction d'un bug concernant l'argument optionnel en d\'ebut
- de mol\'ecule.
+ - Correction d'un bug concernant l'argument optionnel en début
+ de molécule.
----------------------------------------------------------------------
v0.4b 2011/04/24
- - l'argument de \chemfig est tok\'enis\'e avec \scantokens ce qui
- rend caduc tout souci de code de cat\'egorie, \`a part #.
- - la commande \setbondstyle permet de d\'efinir le style des
+ - l'argument de \chemfig est tokénisé avec \scantokens ce qui
+ rend caduc tout souci de code de catégorie, à part #.
+ - la commande \setbondstyle permet de définir le style des
liaisons.
- correction de l'affichage incorrect des doubles liaisons dans
- les cycles apr\`es les commandes \hflipnext et \vflipnext
- - correction d'un bug lorsqu'un alias commence une mol\'ecule
+ les cycles après les commandes \hflipnext et \vflipnext
+ - correction d'un bug lorsqu'un alias commence une molécule
----------------------------------------------------------------------
v1.0 2011/06/15
- - les sch\'emas r\'eactionnels sont d\'esormais disponibles.
+ - les schémas réactionnels sont désormais disponibles.
- \Chemabove et \Chembelow modifient la boite englobante.
- \Lewis modifie la boite englobante
- les macros \chemleft, \chemright, \chemup et \chemdown
- affichent des d\'elimiteurs extensibles \`a gauche, \`a droite,
- au dessus et au dessous d'un mat\'eriel.
+ affichent des délimiteurs extensibles à gauche, à droite,
+ au dessus et au dessous d'un matériel.
----------------------------------------------------------------------
v1.0a 2011/09/18
- les macros \Lewis et \lewis admettent un argument optionnel
- - la macro \setlewisdist r\`egle la distance entre les 2
- \'electrons
+ - la macro \setlewisdist règle la distance entre les 2
+ électrons
----------------------------------------------------------------------
v1.0b 2011/11/29
- - la commande \merge est d\'esormais prot\'eg\'ee entre
- \schemestart et \schemestop contre des d\'efinitions par d'autres
+ - la commande \merge est désormais protégée entre
+ \schemestart et \schemestop contre des définitions par d'autres
packages.
- - \box\z@ est utilis\'e au lieu du maladroit \unhbox\z@
+ - \box\z@ est utilisé au lieu du maladroit \unhbox\z@
----------------------------------------------------------------------
v1.0c 2011/11/30
- - la macro \+ n'est plus explicitement \'ecrite
- - v\'erifie que eTeX est le moteur utilis\'e
+ - la macro \+ n'est plus explicitement écrite
+ - vérifie que eTeX est le moteur utilisé
----------------------------------------------------------------------
v1.0d 2011/12/19
- - les cercles des cycles \'etaient trac\'es au mauvais moment. La
- longueur de la liaison qui les pr\'ec\'edait influait sur le
+ - les cercles des cycles étaient tracés au mauvais moment. La
+ longueur de la liaison qui les précédait influait sur le
rayon du cercle : \chemfig{-[,0.5]**6(------)} donnait un bug
- \`a l'affichage.
+ à l'affichage.
----------------------------------------------------------------------
v1.0e 2012/01/13
- la gestion des espaces dans les groupes d'atomes est
- d\'esormais plus rigoureuse. Plusieurs bugs ont \'et\'e
- corrig\'e
+ désormais plus rigoureuse. Plusieurs bugs ont été
+ corrigé
----------------------------------------------------------------------
v1.0f 2012/02/24
- - correction d'un bug avec \definesubmol, les catcodes n'\'etaient
- pas correctement g\'er\'es.
+ - correction d'un bug avec \definesubmol, les catcodes n'étaient
+ pas correctement gérés.
----------------------------------------------------------------------
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@c : la boite *doit* \^etre
- compos\'ee en dehors de l'environnement tikzpicture pour
- \'eviter nullfont si jamais \printatom ne passe pas en mode
+ compte le style des flèche par défaut
+ - correction d'un bug dans \CF@lewis@c : la boite *doit* être
+ composée en dehors de l'environnement tikzpicture pour
+ éviter nullfont si jamais \printatom ne passe pas en mode
math.
- 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.
- - r\'e-\'ecriture des macros \chemabove et \chembemow pour
- prendre en compte le bug (d\'esormais corrig\'e) dans luatex.
- - nouvelle macro \setstacksep qui d\'efinit l'espacement par
- d\'efaut dans les macros \chemabove et \chembelow.
+ défaut est modifiée par [,<l>] au début d'une molécule
+ et si des cycles étaient emboités, cette longueur n'était
+ pas appliquée aux sous-cycles.
+ - ré-écriture des macros \chemabove et \chembemow pour
+ prendre en compte le bug (désormais corrigé) dans luatex.
+ - nouvelle macro \setstacksep qui définit l'espacement par
+ défaut dans les macros \chemabove et \chembelow.
----------------------------------------------------------------------
v1.0h 2013/11/28
- - \chemname admet maintenant une version \'etoil\'e qui ne tient
- pas compte des profondeurs pr\'ec\'edentes.
- - \CF@dp@max est g\'er\'e globalement.
- - correction d'un bug dans "-U>" : le style de la fl\`eche
- n'\'etait pris en compte pour l'arc.
+ - \chemname admet maintenant une version étoilé qui ne tient
+ pas compte des profondeurs précédentes.
+ - \CF@dp@max est géré globalement.
+ - correction d'un bug dans "-U>" : le style de la flèche
+ n'était pris en compte pour l'arc.
- correction d'un bug dans \CF@direct@arrow : l'angle de la
- fl\`eche n'\'etait pas calcul\'e
+ flèche n'était pas calculé
----------------------------------------------------------------------
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.
+ \CF@remain@molecule est dépouillé de son éventuel espace
+ en première position.
- 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
+ n?ud courant "end@arrow@i" était erroné dans le cas où une
+ flèche contenait un sous schéma. Ce nom doit dépendre de
\CF@scheme@nest.
- - la jonction entre deux liaisons cons\'ecutives dans l'axe peut
- \^etre activ\'e avec \enablebondjoin et d\'esactiv\'e avec
- \disablebondjoin (pr\'ef\'erable, \'etat par d\'efaut).
- - \chemfig suivi d'une "*" demande \`a ce que les liaisons aient
+ - la jonction entre deux liaisons consécutives dans l'axe peut
+ être activé avec \enablebondjoin et désactivé avec
+ \disablebondjoin (préférable, état par défaut).
+ - \chemfig suivi d'une "*" demande à ce que les liaisons aient
une longueur invariable : la distance inter-atome devient donc
- variable. Cette fonctionnalit\'e est d\'esavctiv\'e dans les
- cycles afin que les polygones soient r\'eguliers.
- \enablefixedbondlength permet cette fonctionnalit\'e pour
- toutes les macros \chemfig (m\^eme non \'etoil\'ee) tandis que
- \disablefixedbondlength le d\'esactive.
+ variable. Cette fonctionnalité est désactivé dans les
+ cycles afin que les polygones soient réguliers.
+ \enablefixedbondlength permet cette fonctionnalité pour
+ toutes les macros \chemfig (même non étoilée) tandis que
+ \disablefixedbondlength le désactive.
----------------------------------------------------------------------
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
+ dans l'argument d'une macro, les # sont doublés par l'action
de \scantokens de la macro \CF@chemfig@d et il faut un
- argument d\'elimit\'e avant "(" pour absorber tous les #.
+ argument délimité 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
+ - correction d'un bug dans le tracé des liaisons de Cram.
+ - création de \setangleincrement.
+ - chargement de "arrows.meta" et définition de la flèche "CF"
+ basée sur "Stealth" et définie avec \pgfdeclarearrow.
+ Les anciennes flèches "CF@full" et "CF@half" sont
+ abandonnées puisque définies avec \pgfarrowsdeclare.
+ - flèche "-U>" corrigé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
+ place le label <a> près du début de la flèche, 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
+ - \chemrel, \setchemrel et \chemsign sont supprimées.
+ - compatibilité, avec les limitations d'usage, avec la
librairie "externalize" : le \begin{tikzpicture} voit
- d\'esormais le \end{tikzpicture} correspondant dans la macro
+ désormais le \end{tikzpicture} correspondant dans la macro
\CF@chemfig@d.
----------------------------------------------------------------------
v1.2a 2015/10/21
- - erreur de copier-coller dans le code: une adresse url \'etait
- malencontreusement pr\'esente en plein milieu d'une ligne de
+ - erreur de copier-coller dans le code: une adresse url était
+ malencontreusement présente en plein milieu d'une ligne de
code
----------------------------------------------------------------------
v1.2b 2015/11/15
- bug dans \CF@seek@submol qui laissait "*" dans le flux de
- lecture de TeX. Un message d'erreur est \'egalement ajout\'e
+ lecture de TeX. Un message d'erreur est également ajouté
en cas de "!" en fin de traitement.
- - correction d'un bug dans \CF@set@bondangle o\`u l'angle [<:a>]
- n'\'etait pas \'evalu\'e par \pgfmathsetmacro.
+ - correction d'un bug dans \CF@set@bondangle où l'angle [<:a>]
+ n'était pas évalué par \pgfmathsetmacro.
----------------------------------------------------------------------
v1.2c 2015/11/20
- - Correction d'un bug dans \CF@set@bondangle : l'angle renvoy\'e
- pouvait \^etre n\'egatif
+ - Correction d'un bug dans \CF@set@bondangle : l'angle renvoyé
+ pouvait être négatif
- Correction d'un bug dans \CF@direct@arrow : la macro \CF@ifempty
- n'est pas correctement d\'evelopp\'ee dans l'argument de
+ n'est pas correctement développée dans l'argument de
\pgfpointanchor
----------------------------------------------------------------------
v1.2d 2015/12/01
- - correction d'un bug dans la fl\`eche "-U"
- - la version \'etoil\'ee de \setcrambond dessine les liaisons de
- Cram en pointill\'es sous forme de trait large et non pas sous
+ - correction d'un bug dans la flèche "-U"
+ - la version étoilée de \setcrambond dessine les liaisons de
+ Cram en pointillés sous forme de trait large et non pas sous
forme de triangle.
----------------------------------------------------------------------
v1.2e 2017/05/20
- - la macro contenant la d\'efinition d'une fl\`eche est
- d\'esormais "\CF@arrow(<nom>)", ainsi la macro \0 n'est plus
- d\'efinie par \definearrow
- - remerciements rajout\'es apr\`es une suppression indue, pour ne
- froisser aucune susceptibilit\'e \ No newline at end of file
+ - la macro contenant la définition d'une flèche est
+ désormais "\CF@arrow(<nom>)", ainsi la macro \0 n'est plus
+ définie par \definearrow
+ - remerciements rajoutés après une suppression indue, pour ne
+ froisser aucune susceptibilité
+----------------------------------------------------------------------
+v1.3 2018/03/08
+ - tous les paramètres sont désormais passés via \setchemfig qui
+ fait appel à "simplekv". Par conséquent, _toutes_ les macros qui
+ réglaient des paramètres deviennent obsolètes, à savoir :
+ \setcrambond, \setatomsep, \setbondoffset, \setdoublesep,
+ \setangleincrement, \enablefixedbondlength,
+ \disablefixedbondlength, \setnodestyle, \setbondstyle,
+ \setlewis, \setlewisdist, \setstacksep, \setcompoundstyle,
+ \setarrowdefault, \setandsign, \setarrowoffset,
+ \setcompoundsep, \setarrowlabelsep, \enablebondjoin,
+ \disablebondjoin et \schemedebug.
+ et ces macros seront *supprimées* dans une future version.
+ - la version étoilée "\chemfig*" et les deux arguments optionnels
+ de la macro "\chemfig[][]" sont également optionnels et seront
+ *supprimé*s dans une future version afin d'accéder à la syntaxe
+ \chemfig[clés=valeurs]{code}
+ - 6 nouveaux paramètres : "lewis radius", "arrow double sep",
+ "arrow double coeff", "arrow double harpoon", "cycle radius
+ coeff", "arrow head".
+ - correction d'un bug dans \CF@parse@mergeopt qui dans certains
+ cas, envoyait vers l'affichage des caractères
+ - petit toilettage du code
+ - macro \polymerdelim (non documentée) expérimentale et encore
+ en phase de tests
+ - suppression d'un registre d'écriture de fichier \ No newline at end of file