texlive[55229] Master/texmf-dist: chemfig (21may20)

commits+karl at tug.org commits+karl at tug.org
Thu May 21 23:46:14 CEST 2020


Revision: 55229
          http://tug.org/svn/texlive?view=revision&revision=55229
Author:   karl
Date:     2020-05-21 23:46:14 +0200 (Thu, 21 May 2020)
Log Message:
-----------
chemfig (21may20)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/chemfig/README
    trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-en.pdf
    trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-en.tex
    trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-fr.pdf
    trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-fr.tex
    trunk/Master/texmf-dist/tex/generic/chemfig/chemfig.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/generic/chemfig/chemfigold.tex

Modified: trunk/Master/texmf-dist/doc/generic/chemfig/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/chemfig/README	2020-05-21 21:45:57 UTC (rev 55228)
+++ trunk/Master/texmf-dist/doc/generic/chemfig/README	2020-05-21 21:46:14 UTC (rev 55229)
@@ -2,9 +2,9 @@
 
                 The
           Chemfig package
-               v1.53
+               v1.54
 
-            2020/04/27
+            2020/05/21
 ___________________________________
 
 Maintainer: Christian Tellechea

Modified: trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-en.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-en.tex	2020-05-21 21:45:57 UTC (rev 55228)
+++ trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-en.tex	2020-05-21 21:46:14 UTC (rev 55229)
@@ -217,6 +217,9 @@
 \setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt}
 \part{Introduction}
 \section{New in v1.5}
+\subsection{The primitive \texttt{\protect\textbackslash expanded}}
+As of version 1.54, \CF requires a \TeX{} engine that provides the \verb|\expanded| primitive. If this is not available, \CF will not be loaded. It is strongly recommended that you update your \LaTeX{} distribution in order to take advantage of the newer engine that provide for the use of this new primitive.
+
 \subsection{The macro \texttt{\protect\textbackslash charge}}
 Version 1.5 implements the macros \verb|\charge| and \verb|\Charge| (see page~\pageref{charge}) whose purpose is to place arbitrary elements around an atom that can be placed with great precision. These macros will replace the \verb|\lewis| and \verb|\Lewis| macros because they are much more powerful and configurable, even if more verbose. It is therefore important to note that the macros \verb|\lewis| and \verb|\Lewis| \textcolor{red}{\bfseries are no longer documented and will be removed from the \CF package}.
 

Modified: trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-fr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-fr.tex	2020-05-21 21:45:57 UTC (rev 55228)
+++ trunk/Master/texmf-dist/doc/generic/chemfig/chemfig-fr.tex	2020-05-21 21:46:14 UTC (rev 55229)
@@ -217,6 +217,9 @@
 \setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt,label=--}
 \part{Introduction}
 \section{Nouveau dans la v1.5}
+\subsection{Primitive \texttt{\protect\textbackslash expanded}}
+À partir de la version 1.54, \CF nécessite un moteur \TeX{} fournissant la primitive \texttt{\string\expanded}. Si ce n'est pas le cas, le package \CF ne sera pas chargé : il est donc vivement conseillé de mettre à jour sa distribution \LaTeX{} afin de profiter d'un moteur récent permettant l'utilisation de cette nouvelle primitive.
+
 \subsection{La macro \texttt{\protect\textbackslash charge}}
 La version 1.5 met en place les macros \verb|\charge| et \verb|\Charge| (voir page~\pageref{charge}) dont le but est de placer atour d'un atome des éléments arbitraires avec une grande précision. Ces macros remplaceront, à terme, les macros \verb|\lewis| et \verb|\Lewis| car elles sont bien plus puissantes et configurables, même si plus verbeuses quant à leur emploi. Il est donc important de noter que les macros \verb|\lewis| et \verb|\Lewis| \textcolor{red}{\bfseries ne sont plus documentées et seront supprimées de l'extension \CF}.
 

Deleted: trunk/Master/texmf-dist/doc/generic/chemfig/chemfigold.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/chemfig/chemfigold.tex	2020-05-21 21:45:57 UTC (rev 55228)
+++ trunk/Master/texmf-dist/doc/generic/chemfig/chemfigold.tex	2020-05-21 21:46:14 UTC (rev 55229)
@@ -1,2835 +0,0 @@
-% !TeX encoding = ISO-8859-1
-% Ce fichier contient le code de l'extension "chemfig"
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                    %
-\def\CFname                    {chemfig}                             %
-\def\CFver                       {1.4}                               %
-%                                                                    %
-\def\CFdate                   {2019/04/18}                           %
-%                                                                    %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%____________________________________________________________________
-% Author     : Christian Tellechea                                   |
-% Status     : Maintained                                            |
-% Email      : unbonpetit at 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-2019                         |
-% 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 \xC9 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\xE9rification etex -------------------------
-\begingroup
-	\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
-
-%------------------------ 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\xE9gime 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\ \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`\@12 \catcode`\#6  \catcode`\ 10 \catcode`\_11
-
-%--------------------------- Allocations -----------------------------
-\newcount\CF_cntatomgroup
-\newcount\CF_cntgroup
-\newcount\CF_cntatom
-\newcount\CF_cntcycle
-\newcount\CF_cntcompound
-
-\newif\ifCF_incycle
-\newif\ifCF_cyclearc
-\newif\ifCF_definesubmol
-\newif\ifCF_adjustnamedp
-\newif\ifCF_macrofixedbondlength
-\newif\ifCF_lewisoverlay
-
-\newdimen\CF_dim
-\newdimen\CF_arrowsize
-\newdimen\CF_zero \CF_zero=0pt
-
-\newbox\CF_boxlewis
-\newbox\CF_box
-\newbox\CF_boxstuff
-
-\newtoks\CF_substtoks
-
-%-------------------------- Petites macros ---------------------------
-\let\CF_begintikzpicture\tikzpicture
-\let\CF_endtikzpicture  \endtikzpicture
-\def\CF_quark{\CF_quark}
-\def\CF_execfirst#1#2{#1}
-\def\CF_execsecond#1#2{#2}
-\def\CF_id#1{#1}
-\def\CF_gobarg#1{}
-\def\CF_gobtwoargs#1#2{}
-\def\CF_firsttonil#1#2\_nil{#1}
-\def\CF_sanitizelastitem#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_ifnum#1{\ifnum#1\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\CFhash{\string#}
-\begingroup
-	\catcode`\_8
-	\expandafter\gdef\csname CF\string_underscore\endcsname{_}
-\endgroup
-\def\CF_threeea{\expandafter\expandafter\expandafter}
-\def\CF_exptwomacroargs#1#2#3{\CF_expsecond{\CF_expsecond#1{#2}}{#3}}
-\def\CF_expthreemacroargs#1#2#3#4{\CF_expsecond{\CF_exptwomacroargs#1{#2}{#3}}{#4}}
-\def\CF_swaparg#1#2{#2{#1}}
-\def\CF_expsecond#1#2{\expandafter\CF_swaparg\expandafter{#2}{#1}}% \CF_expsecond<{arg1>}{<arg2>} donne "<arg1>{*<arg2>}"
-\def\CF_eexpsecond#1#2{\expandafter\expandafter\expandafter\CF_swaparg\expandafter\expandafter\expandafter{#2}{#1}}% \CF_eexpsecond{<arg1>}{<arg2>} donne "<arg1>{**<arg2>}"
-\def\CF_swapunbrace#1#2{#2#1}
-\def\CF_expafter#1#2{\expandafter\CF_swapunbrace\expandafter{#2}{#1}}% \CF_expafter{<arg1>}{<arg2>} donne "<arg1>*<arg2>"
-\def\CF_eexpafter#1#2{\expandafter\expandafter\expandafter\CF_swapunbrace\expandafter\expandafter\expandafter{#2}{#1}}% \CF_eexpafter{<arg1>}{<arg2>} donne "<arg1>**<arg2>"
-\def\CF_addtomacro#1#2{\CF_expsecond{\def#1}{#1#2}}
-\def\CF_eaddtomacro#1#2{\CF_expsecond{\CF_addtomacro#1}{#2}}
-\def\CF_preaddtomacro#1#2{\CF_expsecond{\CF_preaddtomacroa#1{#2}}#1}
-\def\CF_preaddtomacroa#1#2#3{\def#1{#2#3}}
-\def\CF_addtotoks#1#2{#1\expandafter{\the#1#2}}
-\def\CF_eaddtotoks#1#2{\expandafter\CF_addtotoks\expandafter#1\expandafter{#2}}
-\def\CF_assigntonil#1#2\_nil{\def#1{#2}}
-\def\CF_edefaddtomacro#1#2{%
-	\edef\CF_temp{#2}%
-	\CF_expsecond{\CF_addtomacro#1}{\CF_temp}%
-}
-\def\CF_ifnextchar#1#2#3{%
-	\let\CF_ifnextchartok=#1% <- espace ind\xE9sirable, bugfix v1.31
-	\def\CF_ifnextcharcodetrue{#2}%
-	\def\CF_ifnextcharcodefalse{#3}%
-	\futurelet\CF_temptok\CF_ifnextchara
-}
-\def\CF_ifnextchara{%
-	\CF_ifx\CF_temptok\CF_sptoken
-		{\CF_ifnextcharb
-		}
-		{\CF_ifx\CF_temptok\CF_ifnextchartok
-			\CF_ifnextcharcodetrue
-			\CF_ifnextcharcodefalse
-		}%
-}
-\expandafter\def\expandafter\CF_ifnextcharb\space{\futurelet\CF_temptok\CF_ifnextchara}
-\def\CF_ifstar#1{\CF_ifnextchar*{\CF_execfirst{#1}}}
-\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_ifinteger#1{%
-	\begingroup
-		\afterassignment\CF_afterinteger
-		\CF_cntcycle0#1\relax
-}
-\def\CF_afterinteger#1\relax{%
-	\endgroup
-	\CF_ifempty{#1}%
-}
-\def\CF_iffirsttokmatch#1#2{% est ce que #1 et #2 commencent par les m\xEAmes tokens ?
-	\futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
-	\futurelet\CF_toksb\CF_gobtonil#2\relax\_nil
-	\CF_ifx\CF_toksa\CF_toksb
-}
-\def\CF_iffirsttokin#1{% teste si le token qui commence #1 appartient aux tokens mis dans #2
-	\futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
-	\CF_iffirsttokina
-}
-\def\CF_iffirsttokina#1{%
-	\CF_ifempty{#1}
-		{\CF_execsecond
-		}
-		{\futurelet\CF_toksb\CF_gobtonil#1\relax\_nil
-		\CF_ifx\CF_toksa\CF_toksb
-			{\CF_execfirst}
-			{\CF_expsecond\CF_iffirsttokina{\CF_gobarg#1}}%
-		}%
-}
-\def\CF_ifinstr#1#2{%
-	\def\CF_ifinstra##1#2##2\_nil{%
-		\ifx\empty##2\empty
-			\expandafter\CF_execsecond
-		\else
-			\expandafter\CF_execfirst
-		\fi}%
-	\CF_ifinstra#1\__nil#2\_nil
-}
-\def\CF_afterspace#1 #2\_nil{#2}
-\def\CF_valuetomacro#1[#2]#3{% #1= macro  #2=valeur d\xE9faut  #3=cl\xE9
-	\CF_eexpsecond{\def#1}{\useKV[chemfig]{#3}}%
-	\CF_ifx#1\empty
-		{\def#1{#2}}
-		{}%
-}
-
-%--------------------------- Substitution ----------------------------
-\def\CF_ifstartwith#1#2{% #1=<texte>  #2=<motif>
-	\CF_ifempty{#1}%
-		{\CF_execsecond
-		}
-		{\def\CF_startwithcode{#1}%
-		\def\CF_startwithpattern{#2}%
-		\CF_ifstartwitha
-		}%
-}
-\def\CF_ifstartwitha{%
-	\CF_grabfirstarg\CF_startwithcode\CF_firstargcode
-	\CF_grabfirstarg\CF_startwithpattern\CF_firstargpattern
-	\CF_ifx\CF_firstargcode\CF_firstargpattern
-		{\CF_expsecond\CF_ifempty\CF_startwithpattern
-			{\CF_execfirst
-			}
-			{\CF_expsecond\CF_ifempty\CF_startwithcode
-				\CF_execsecond
-				\CF_ifstartwitha
-			}%
-		}
-		{\CF_execsecond
-		}%
-}
-\def\CF_grabfirstarg#1#2{%
-	\CF_ifx#1\empty
-		{\let#2\empty
-		}
-		{\def\CF_grabmacro{#2}%
-		\CF_expsecond\CF_ifbracefirst#1%
-			{\expandafter\CF_grabbracearg#1\_nil#1}
-			{\CF_expafter{\futurelet\CF_nexttok\CF_grabfirstarga}#1\_nil#1}%
-		}%
-}
-\def\CF_grabfirstarga{%
-	\CF_ifx\CF_nexttok\CF_sptoken
-		\CF_grabspacearg
-		\CF_grabnormalarg
-}
-\def\CF_grabbracearg#1{%
-	\expandafter\def\CF_grabmacro{{#1}}%
-	\CF_grabargassigntonil\relax
-}
-\expandafter\def\expandafter\CF_grabspacearg\space{%
-	\expandafter\def\CF_grabmacro{ }%
-	\CF_grabargassigntonil\relax
-}
-\def\CF_grabnormalarg#1{%
-	\expandafter\def\CF_grabmacro{#1}%
-	\CF_grabargassigntonil\relax
-}
-\def\CF_grabargassigntonil#1\_nil#2{\CF_expsecond{\def#2}{\CF_gobarg#1}}
-\def\CF_ifbracefirst#1{\CF_ifnum{\catcode\CF_threeea`\expandafter\CF_firsttonil\detokenize{#1.}\_nil=1 }}
-\def\CF_substonly#1#2{% #1=entier maxi>0  #2=macro : dans la sc#1, remplace tous les <motif> par <pattern> sauf lorsque le motif est suivi d'un caract\xE8re >#1
-	\def\CF_atendsubstitute{\edef#2{\the\CF_substtoks}}% macro ex\xE9cut\xE9e \xE0 la fin
-	\let\CF_substnogroups\CF_substnogrouponly
-	\CF_ifnum{#1>0 }
-		{\let\CF_testifx\empty
-		\foreach\CF_x in {1,...,#1}{\xdef\CF_testifx{\unexpanded\expandafter{\CF_testifx}\unexpanded\expandafter{\expandafter\ifx\CF_x\CF_nexttok1\fi}}}%
-		\let\CF_testif\empty
-		\foreach\CF_x in {1,...,#1}{\xdef\CF_testif{\unexpanded\expandafter{\CF_testif}\unexpanded\expandafter{\expandafter\if\CF_x\CF_nexttok1\fi}}}%
-		\CF_expsecond\CF_substi#2%
-		}
-		{\CF_substall#2%
-		}%
-}
-\def\CF_substnogrouponly{%
-	\CF_exptwomacroargs\CF_ifstartwith\CF_substcode\CF_substsubst
-		{\CF_grabfirstarg\CF_substcode\CF_temp
-		\CF_expafter{\futurelet\CF_nexttok\CF_gobtonil}\CF_substcode\relax\_nil
-		\CF_ifnum{0\CF_testifx=1 }% si le prochain token est \let-\xE9gal \xE0 1...#1
-			{\edef\CF_nexttok{\CF_threeea\CF_firsttonil\expandafter\string\CF_substcode\_nil}% le d\xE9tok\xE9niser
-			\CF_ifnum{0\CF_testif=1 }
-				{\CF_eaddtotoks\CF_substtoks\CF_temp
-				\CF_grabfirstarg\CF_substcode\CF_temp
-				\CF_eaddtotoks\CF_substtoks\CF_temp
-				}
-				{\CF_eaddtotoks\CF_substtoks\CF_substpattern
-				}%
-			}
-			{\CF_eaddtotoks\CF_substtoks\CF_substpattern
-			}%
-		\CF_substgroups
-		}
-		{\CF_expsecond\CF_ifempty\CF_substcode
-			{\CF_atendsubstitute
-			}
-			{\CF_grabfirstarg\CF_substcode\CF_substauxarg
-			\CF_eaddtotoks\CF_substtoks\CF_substauxarg
-			\CF_substgroups
-			}%
-		}%
-}
-\def\CF_substall#1{% #1=macro
-	\def\CF_atendsubstitute{\edef#1{\the\CF_substtoks}}% macro ex\xE9cut\xE9e \xE0 la fin
-	\let\CF_substnogroups\CF_substnogroupall
-	\CF_expsecond\CF_substi#1%
-}
-\def\CF_substnogroupall{%
-	\CF_exptwomacroargs\CF_ifstartwith\CF_substcode\CF_substsubst
-		{\CF_eaddtotoks\CF_substtoks\CF_substpattern
-		\CF_grabfirstarg\CF_substcode\CF_temp
-		\CF_substgroups
-		}
-		{\CF_expsecond\CF_ifempty\CF_substcode
-			{\CF_atendsubstitute
-			}
-			{\CF_grabfirstarg\CF_substcode\CF_substauxarg
-			\CF_eaddtotoks\CF_substtoks\CF_substauxarg
-			\CF_substgroups
-			}%
-		}%
-}
-\def\CF_substi#1#2#3{% #1=<texte> #2=<motif> #3=<motif de substi>
-	\def\CF_substcode{#1}\def\CF_substsubst{#2}\def\CF_substpattern{#3}%
-	\CF_substtoks={}%
-	\CF_substgroups
-}
-
-\def\CF_substgroups{%
-	\CF_expsecond\CF_ifbracefirst\CF_substcode
-		{\CF_grabfirstarg\CF_substcode\CF_substauxarg
-		\begingroup
-			\def\CF_atendsubstitute{%
-				\expandafter\endgroup\expandafter\CF_addtotoks\expandafter\CF_substtoks\expandafter{\expandafter{\the\CF_substtoks}}%
-				\CF_substgroups
-			}%
-			\CF_substtoks{}% initialiser \xE0 vide
-			\expandafter\def\expandafter\CF_substcode\CF_substauxarg
-			\CF_substgroups
-		}%
-		{\CF_substnogroups
-		}%
-}
-
-%---------------------------- Param\xE8tres -----------------------------
-\def\setchemfig{\setKV[chemfig]}
-\def\resetchemfig{%
-	\setKVdefault[chemfig]{%
-		atom style          ={},% code tikz mis \xE0 la fin de every node/.style
-		chemfig style       ={},% code tikz mis \xE0 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,
-		lewis diag coeff    =1,
-		cycle radius coeff  =0.75,
-		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,
-		arrow double coeff  =0.6,
-		arrow double harpoon=true,
-		arrow label sep     =3pt,
-		arrow head          =-CF,
-		+ sep left          =0.5em,
-		+ sep right         =0.5em,
-		+ vshift            =0pt,
-	}%
-}
-\resetchemfig
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%               D E S S I N     M O L \xC9 C U L E S                %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\CF_sanitizecatcode{%
-	\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\@%
-}
-
-\def\CF_nodecontent{\CF_expsecond\printatom{\csname atom_\number\CF_cntatom\endcsname\CF_nodestrut}}
-
-\def\chemskipalign{%
-	\CF_doifempty\CF_bondoutcontentsaved% sauf si un \chemskipalign a \xE9t\xE9 fait \xE0 l'atome pr\xE9c\xE9dent
-		{\global\let\CF_bondoutcontentsaved\CF_bondoutcontent}% sauvegarder l'atome d'o\xF9 vient la liaison
-	\let\CF_nodestrut\empty
-}
-
-\def\CF_emptynode{{}}
-
-\def\definesubmol{\CF_definesubmoltrue\def_submol}
-\def\redefinesubmol{\CF_definesubmolfalse\def_submol}
-
-\def\def_submol#1{%
-	\CF_cntatomgroup=0 % nombre d'arguments suppos\xE9
-	\def\CF_temp{#1}% nom
-	\futurelet\CF_toksa\CF_submoltestnxttok
-}
-
-\def\CF_submoltestnxttok{%
-	\if[\noexpand\CF_toksa\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi
-		{\begingroup\CF_sanitizecatcode\CF_expsecond\CF_submolgrabopt{\CF_temp}%
-		}
-		{\afterassignment\CF_submoltestnxttoka% pas d'argument entre crochet
-		\CF_cntatomgroup=0% cherche le nombre d'arguments \xE9ventuels
-		}%
-}
-
-\def\CF_submoltestnxttoka{\futurelet\CF_toksa\CF_submoltestnxttokb}
-
-\def\CF_submoltestnxttokb{%
-	\if[\noexpand\CF_toksa\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi
-		{\begingroup\CF_sanitizecatcode\CF_expsecond\CF_submolgrabopt{\CF_temp}}
-		{\CF_expsecond{\def_submola}\CF_temp{}}%
-}
-
-\def\CF_submolgrabopt#1[#2]#{\endgroup\def_submola{#1}{#2}}
-
-\def\def_submola#1{% #1 nom
-	\CF_ifnum{0\CF_ifnum{\CF_cntatomgroup<0 }1{\CF_ifnum{\CF_cntatomgroup>9 }10}>0 }
-		{\CF_error{Invalid number of arguments in submol \detokenize\expandafter{\string#1}. Defining it with 0 argument}%
-		\CF_cntatomgroup=0
-		}
-		{}%
-	\ifcat\relax\expandafter\noexpand\CF_firsttonil#1\_nil\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi% si #1 est une s\xE9quence de contr\xF4le
-		{\expandafter\ifdefined\CF_firsttonil#1\_nil
-			\ifCF_definesubmol
-				\CF_warning{the submol \expandafter\string\CF_firsttonil#1\_nil\space is already defined, the previous definition is lost}%
-			\fi
-		\fi
-		\begingroup
-			\CF_sanitizecatcode
-			\def_submolb{#1}%
-		}
-		{\ifcsname CF__#1\endcsname
-			\ifCF_definesubmol
-				\CF_warning{the submol "#1" is already defined, the previous definition is lost}%
-			\fi
-		\fi
-		\begingroup
-			\CF_sanitizecatcode
-			\expandafter\def_submolb\csname CF__#1\endcsname
-		}%
-}
-
-\def\def_submolb#1#2#3{% #1 nom sous forme de macro, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche, \CF_cntatomgroup = nombre d'arguments
-	\def\CF_tempa{#2}\CF_doifnotempty{#2}{\CF_expsecond{\CF_expsecond\CF_substonly{\number\CF_cntatomgroup}\CF_tempa}{\CFhash}{\CFhash}}%
-	\def\CF_tempb{#3}\CF_expsecond{\CF_expsecond\CF_substonly{\number\CF_cntatomgroup}\CF_tempb}{\CFhash}{\CFhash}%
-	\CF_expsecond{\CF_expsecond{\def_submolc{#1}}\CF_tempa}\CF_tempb
-}
-
-\def\def_submolc#1#2#3{% #1 nom sous forme de macro, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche, \CF_cntatomgroup = nombre d'arguments
-	\endgroup
-	\begingroup
-		\global\toks0{\gdef\CFthesubmol}%
-		\CF_ifnum{\CF_cntatomgroup>0 }
-			{\foreach\CF_x in {1,...,\CF_cntatomgroup}{%
-				\edef\CF_temp{\CFhash\CF_x}%
-				\global\toks0\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toks\expandafter0\CF_temp}%
-				}%
-			}
-			{}%
-		\CF_sanitizecatcode \catcode`\#6 \endlinechar-1 \everyeof{\noexpand}%
-		\CF_ifempty{#2}%
-			{\scantokens\expandafter{\the\toks0{\empty#3}}%
-			}%
-			{\scantokens\expandafter{%
-				\the\toks0{%
-					\romannumeral
-					\csname CF_exec%
-						\ifdim\csname CF_currentangle\endcsname pt>90pt
-							\ifdim\csname CF_currentangle\endcsname pt<270pt
-								first%
-							\else
-								second%
-							\fi
-						\else
-							second%
-						\fi
-					\endcsname
-					{0 #2}{0 #3}%
-					}%
-				}%
-			}%
-	\endgroup
-	\let#1\CFthesubmol
-}
-
-\def\CF_seeknode#1#2#3{% cherche un noeud au d\xE9but de #1 l'assigne dans la sc #2 et met le reste dans #3
-	\let#2\empty
-	\def#3{#1}%
-	\CF_iffirsttokmatch{#1}{ }%
-		{\CF_expsecond\CF_seeknodea{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au d\xE9but du groupe d'atome
-		{\CF_seeknodea{#1}#2#3}%
-}
-
-\def\CF_seeknodea#1#2#3{%
-	\CF_ifempty{#1}%
-		{\let#3\empty
-		}
-		{\futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
-		\CF_ifx\CF_toksa\CF_sptoken
-			{\CF_addtomacro#2{ }%
-			\CF_expsecond\CF_seeknodea{\CF_afterspace#1\_nil}#2#3%
-			}%
-			{\CF_ifx\CF_toksa\bgroup
-				{\CF_eaddtomacro#2{\expandafter{\CF_firsttonil#1\_nil}}%
-				\CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
-				}%
-				{\CF_iffirsttokina{-=(*<>!~}%
-					{\def#3{#1}%
-					}%
-					{\CF_eaddtomacro#2{\CF_firsttonil#1\_nil}%
-					\CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
-					}%
-				}%
-			}%
-		}%
-}
-
-% on sait que #1 commence par -,=,~,<,>. On analyse cette liaison
-% #2 re\xE7oit le type de liaisons (1 pour -, 2 pour =, 3 pour ~)
-\def\CF_assignbondcode#1#2{%
-	\futurelet\CF_toksa\CF_gobtonil#1\_nil
-	\edef#2{%
-		\ifx-\CF_toksa1\else
-		\ifx=\CF_toksa2\else
-		\ifx~\CF_toksa3\else
-		\ifx>\CF_toksa4\else
-		\ifx<\CF_toksa5\else0% si 0 --> il y a une erreur non due \xE0 l'utilisateur
-		\fi\fi\fi\fi\fi}%
-	\ifnum#2>3 % si c'est une liaison de Cram
-		\CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_gobarg#1\_nil}% chope le caract\xE8re suivant
-		\CF_ifx:\CF_toksa
-			{\edef#2{\number\numexpr#2+2}% si c 'est un ":", signe du pointill\xE9, ajoute 2
-			}%
-			{\CF_ifx|\CF_toksa% si c 'est un "|", signe du triangle \xE9vid\xE9, ajouter 4
-				{\edef#2{\number\numexpr#2+4}}
-				{}%
-			}%
-	\fi
-}
-
-\def\CF_grabbondoffseta#1,#2\_nil{%
-	\def\CF_startoffset{#1}\def\CF_endoffset{#2}%
-}
-
-\def\CF_grabbondoffset#1(#2)#3\_nil{%
-	\CF_doifnotempty{#2}%
-		{\CF_ifinstr{#2},%
-			{\CF_grabbondoffseta#2\_nil}%
-			{\def\CF_startoffset{#2}}%
-		}%
-	\def\CF_remainafterbond{#3}%
-}
-
-\def\CF_analysebond#1#2{%
-	\CF_assignbondcode{#1}#2%
-	\CF_expsecond{\def\CF_remainafterbond}{\CF_gobarg#1}%mange le premier signe de la liaison
-	\let\CF_doublebondtype\CF_zero
-	\ifnum#2=2 % si c'est une double liaison, regarde s'il y a un + ou - derri\xE8re
-		\CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_gobarg#1\_nil}%
-		\CF_ifx^\CF_toksa
-			{\def\CF_doublebondtype{1}%
-			\CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange le "^"
-			}
-			{\expandafter\ifx\CF_underscore\CF_toksa
-				\def\CF_doublebondtype{2}%
-				\CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange le "_"
-			\fi
-			}%
-	\else
-		\ifnum#2>5 % si c'est une laision de Cram pointill\xE9e ou triangle \xE9vid\xE9
-			\CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange un caract\xE8re de plus
-		\fi
-	\fi
-	\CF_expsecond\CF_iffirsttokmatch\CF_remainafterbond\CFhash
-		{\CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_remainafterbond.}(%si parenth\xE8se juste apr\xE8s
-			{\expandafter\CF_grabbondoffset\CF_remainafterbond\_nil}
-			{}%
-		}%
-		{}%
-	\CF_expsecond\CF_iffirsttokmatch\CF_remainafterbond @%
-		{\expandafter\CF_grabmovearg\CF_remainafterbond\_nil}%
-		{}%
-	\CF_expsecond\CF_iffirsttokmatch{\CF_remainafterbond}[%
-		{\expandafter\CF_analyseoptarg\CF_remainafterbond\_nil\CF_remainafterbond
-		}%
-		{\let\CF_currentstringangle\CF_defaultstringangle
-		\let\CF_currentlength\CF_defaultlength
-		\let\CF_currentfromatom\CF_defaultfromatom
-		\let\CF_currenttoatom\CF_defaulttoatom
-		\let\CF_currenttikz\CF_defaulttikz
-		\let\CF_movebondname\empty
-		}%
-	\ifCF_incycle
-		\pgfmathsetmacro\CF_cycleincrementangle{360/\CF_cyclenum+\CF_initcycleangle}%
-		\edef\CF_currentstringangle{::+\CF_cycleincrementangle}%
-		\def\CF_initcycleangle{0}%
-		\let\CF_currentlength\CF_defaultlength% et on ignore la longueur de liaison sp\xE9cifi\xE9e
-	\fi
-	\CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
-}
-
-\def\CF_setbondangle#1#2{% le code de la direction est contenu dans #1, en sortie, #2 contient l'angle
-	\CF_ifempty{#1}%
-		{\let#2\CF_defaultangle
-		}
-		{\if:\expandafter\noexpand\CF_firsttonil#1\_nil
-			\if:\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_gobarg#1\_nil
-				\pgfmathsetmacro#2{\CF_previousangle+\expandafter\CF_gobarg\CF_gobarg#1}%
-			\else
-				\pgfmathsetmacro#2{\CF_gobarg#1}%
-			\fi
-		\else
-			\pgfmathsetmacro#2{#1*\CF_angleincrement}%
-		\fi% puis normalise l'angle entre 0 et 360
-		\ifdim\ifdim#2pt<0pt -\fi#2pt>360pt
-			\pgfmathsetmacro#2{#2-360*floor(#2/360)}%
-		\fi% si |#2|>360
-		\ifdim#2pt<0pt
-			\pgfmathsetmacro#2{#2+360}%
-		\fi
-		}%
-}
-
-\def\CF_analysemovearg#1,#2\_nil#3{%
-	\def#3{#1}\def\CF_movebondcoeff{#2}%
-}
-
-% Argument limit\xE9s l\xE9gitimes ici car #2 (qui est ce qui suit "@{<nom>}" dans l'argument optionnel) ne DOIT PAS
-% commencer par une accolade.
-\def\CF_grabmovearg @#1#2\_nil{%
-	\CF_ifinstr{#1},%
-		{\CF_analysemovearg#1\_nil\CF_movebondname}%
-		{\def\CF_movebondname{#1}\def\CF_movebondcoeff{0.5}}%
-	\def\CF_remainoptarg{#2}%
-}
-
-\def\CF_testemptyandassign#1#2#3{%
-	\CF_ifempty{#2}
-		{\let#1#3}
-		{\def#1{#2}}%
-}
-
-\def\CF_parseoptlist#1,#2,#3,#4,#5\_nil{%
-	\CF_testemptyandassign\CF_currentstringangle{#1}\CF_defaultstringangle
-	\CF_testemptyandassign\CF_currentlength     {#2}\CF_defaultlength
-	\CF_testemptyandassign\CF_currentfromatom   {#3}\CF_defaultfromatom
-	\CF_testemptyandassign\CF_currenttoatom     {#4}\CF_defaulttoatom
-	\CF_expsecond{\CF_testemptyandassign\CF_currenttikz}{\CF_sanitizelastitem#5,\empty\_nil}\CF_defaulttikz
-}%
-
-\def\CF_analyseoptarg[#1]{%
-	\CF_doifnotempty{#1}%
-		{\CF_iffirsttokmatch{#1}{@}%
-			{\CF_grabmovearg#1\_nil
-			}
-			{\let\CF_movebondname\empty
-			\def\CF_remainoptarg{#1}%
-			}%
-		\expandafter\CF_parseoptlist\CF_remainoptarg,\empty,\empty,\empty,\empty\_nil
-		}%
-	\CF_analyseoptarga\relax
-}
-
-\def\CF_analyseoptarga#1\_nil#2{%
-	\CF_expsecond{\def#2}{\CF_gobarg#1}%
-}
-
-\def\CF_seeksubmol{%
-	\CF_expsecond{\def\CF_molecule}{\romannumeral-`\.\expandafter\noexpand\CF_molecule}%
-	\CF_expsecond\CF_iffirsttokmatch{\CF_molecule}!%
-		{\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enl\xE8ve le "!"
-		\CF_ifx\empty\CF_molecule
-			{\CF_error{no submol name found after "!"}}
-			{}%
-		\ifcat\relax\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule*\_nil
-			\expandafter\CF_seeksubmola\CF_molecule\_nil
-		\else
-			\expandafter\CF_seeksubmolb\CF_molecule\_nil
-		\fi
-		\CF_seeksubmol
-		}%
-		{}%
-}
-
-\def\CF_seeksubmola#1{\CF_seeksubmolc#1\relax}
-
-\def\CF_seeksubmolb#1{\expandafter\CF_seeksubmolc\csname CF__#1\endcsname\relax}% nom de la sous mol\xE9cule
-
-\def\CF_seeksubmolc#1#2\_nil{%#1=macro de la sous mol\xE9cule #2=reste du code commen\xE7ant par \relax
-	\CF_expsecond{\CF_eexpsecond{\def\CF_molecule}}{\expandafter#1\CF_gobarg#2}% supprime le \relax puis ajoute la macro au d\xE9but et la 2-d\xE9veloppe
-}
-
-\def\CF_insertemptygroup#1{% ins\xE8re {} au d\xE9but de la sc #1
-	\CF_expsecond{\def#1}{\expandafter{\expandafter}#1}%
-}
-
-\def\chemfig{\CF_testopt\CF_chemfiga{}}
-
-\def\CF_chemfiga[#1]{%
-	\begingroup
-		\edef\CF_temp{%
-			\unexpanded\expandafter{\CF_begintikzpicture}%
-				[remember picture,%
-				every node/.style={%
-						anchor=base,%
-						inner sep=0pt,%
-						outer sep=0pt,%
-						minimum size=0pt,%
-						\unexpanded\CF_threeea{\useKV[chemfig]{atom style}}%
-					},%
-					baseline,%
-					\unexpanded\CF_threeea{\useKV[chemfig]{chemfig style}}%
-				]%
-			}%
-		\CF_sanitizecatcode
-		\CF_exptwomacroargs\CF_chemfigb\CF_begintikzpicture\CF_endtikzpicture[#1]%
-}
-
-\def\CF_chemfigb#1#2[#3]#4{%
-	\endgroup
-	\begingroup
-		\setchemfig{#3}%
-		\edef\CF_temp{%
-			\unexpanded{#1}[%
-				remember picture,%
-				every node/.style={%
-					anchor=base,%
-					inner sep=0pt,%
-					outer sep=0pt,%
-					minimum size=0pt,%
-					\unexpanded\CF_threeea{\useKV[chemfig]{atom style}}%
-					},%
-				baseline,%
-				\unexpanded\CF_threeea{\useKV[chemfig]{chemfig style}}%
-				]%
-			}%
-		\CF_temp% d\xE9but du tikzpicture
-			\begingroup% \endgroup rajout\xE9 en sortie de trac\xE9 par \CF_chemfigd
-				\let\CF_hooklist\empty
-				\CF_expsecond\setchemfig{#3}%
-				\ifboolKV[chemfig]{fixed length}
-						{\CF_macrofixedbondlengthtrue}
-						{\CF_macrofixedbondlengthfalse}%
-				\ifboolKV[chemfig]{bond join}
-					{\let\CF_drawaxisbond\CF_drawaxisbondjoin}
-					{\let\CF_drawaxisbond\CF_drawaxisbondnojoin}%
-				\ifboolKV[chemfig]{cram rectangle}
-					{\let\CF_clipcramornot\CF_gobtikzinstruction}
-					{\let\CF_clipcramornot\clip}%
-				\CF_valuetomacro\CF_crambasewidth   [1.5ex]{cram width}%
-				\CF_valuetomacro\CF_cramdashlength  [1pt]{cram dash width}%
-				\CF_valuetomacro\CF_cramdashsep     [2pt]{cram dash sep}%
-				\CF_valuetomacro\CF_atomsep         [3em]{atom sep}% espacement des atomes li\xE9s
-				\CF_valuetomacro\CF_bondoffset      [2pt]{bond offset}%
-				\CF_valuetomacro\CF_doublesep       [2pt]{double bond sep}%
-				\CF_valuetomacro\CF_angleincrement  [45]{angle increment}%
-				\CF_valuetomacro\CF_nodestyle       []{node style}%
-				\CF_valuetomacro\CF_bondstyle       []{bond style}%
-				\CF_valuetomacro\CF_stacksep        [1.5pt]{stack sep}%
-				\CF_valuetomacro\CF_cycleradiuscoeff[0.75]{cycle radius coeff}% coeff multiplicateur du rayon des arcs dans les cycles
-				\CF_incyclefalse
-				\CF_cntgroup0
-				\let\CF_lastaction\CF_zero% 0=d\xE9but du dessin 1=trac\xE9 d'un noeud 2=trac\xE9 d'une liaison
-				\let\CF_startoffset\empty
-				\let\CF_endoffset\empty
-				\let\CF_bondoutcontentsaved\empty
-				\def\CF_cycleanglecorrection{180/\CF_cyclenum}%
-				\def\CF_defaultangle{0}%
-				\def\CF_defaultstringangle{:0}% angle pris par d\xE9faut si le champ est vide
-				\def\CF_defaultlength{1}%
-				\let\CF_defaultfromatom\empty% numero de l'atome d'o\xF9 partent les liaisons par d\xE9faut
-				\let\CF_defaulttoatom\empty% num\xE9ro de l'atome o\xF9 arrivent les laisons par d\xE9faut
-				\let\CF_defaulttikz\empty
-				\let\CF_previousbondangle\empty
-				\let\CF_joinbond\CF_zero
-				\let\CF_previoustikz\empty
-				\everyeof{\_nil}\endlinechar-1
-				\CF_sanitizecatcode
-				\expandafter\CF_assigntonil\expandafter\CF_molecule\scantokens{#4}%
-				\CF_expsecond{\CF_substall\CF_molecule}\CFhash\CFhash
-				\CF_expsecond\CF_chemfigc{\CF_molecule}%
-			%\endgroup <-- rajout\xE9 par \CF_chemfigd
-		#2% fin du tikzpicture
-	\endgroup
-	\let\CF_flipstate\CF_zero
-}
-
-\def\CF_chemfigc#1{% #1 est le code de la mol\xE9cule
-	\ifnum\CF_lastaction=3
-		\ifCF_incycle
-			\def\CF_defaultangle{0}%
-		\else
-			\ifnum\CF_cntcycle=0 % si c'est le d\xE9but d'un cycle
-				\pgfmathsetmacro\CF_defaultangle{\CF_previousangle+180+\CF_cycleanglecorrection}% on met la liaison \xE0 +180\xB0 + correction
-			\else
-				\pgfmathsetmacro\CF_defaultangle{\CF_previousangle-90+180/\CF_cyclenum}% sinon \xE0 la bissectrice du sommet du cycle
-			\fi
-		\fi
-		\let\CF_defaultstringangle\empty
-	\fi
-	\let\CF_currentangle\CF_defaultangle
-	\def\CF_molecule{#1}%
-	\CF_seeksubmol% alias en premier ?
-	\if[\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule\_nil
-		\expandafter\CF_analyseoptarg\CF_molecule\_nil\CF_molecule
-		\CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
-		\let\CF_defaultangle\CF_currentangle
-		\let\CF_previousangle\CF_currentangle
-		\CF_doifnotempty\CF_currentstringangle{\let\CF_defaultangle\CF_currentangle}%
-		\CF_doifnotempty\CF_currentlength     {\let\CF_defaultlength\CF_currentlength}%
-		\CF_doifnotempty\CF_currentfromatom   {\let\CF_defaultfromatom\CF_currentfromatom}%
-		\CF_doifnotempty\CF_currenttoatom     {\let\CF_defaulttoatom\CF_currenttoatom}%
-		\CF_doifnotempty\CF_currenttikz       {\let\CF_defaulttikz\CF_currenttikz}%
-		\CF_seeksubmol
-	\fi
-	\edef\CF_defaultstringangle{:\CF_defaultangle}%
-	\let\CF_currentlength\CF_defaultlength
-	\let\CF_currentfromatom\CF_defaultfromatom
-	\let\CF_currenttoatom\CF_defaulttoatom
-	\let\CF_currenttikz\CF_defaulttikz
-	\ifCF_incycle% si on commence un cycle
-		\let\CF_currentangle\CF_previousangle
-		\ifCF_cyclearc% on doit tracer l'arc de cercle dans le cycle ?
-			\pgfmathsetmacro\CF_cyclearcradius{\CF_cycleradiuscoeff*\CF_currentlength*\CF_atomsep/(2*tan(180/\CF_cyclenum))}%
-			\pgfmathsetmacro\CF_cyclearcinitangle{\CF_currentangle+\CF_initcycleangle+180/\CF_cyclenum+90}
-			\pgfmathparse{\CF_currentlength*\CF_atomsep/(2*sin(180/\CF_cyclenum))}%
-			\node[at=(\CF_bondoutnode),shift=(\CF_cyclearcinitangle:\pgfmathresult pt)](arccenter){};% le centre de l'arc
-			\node[at=(arccenter),shift=(\CF_cyclearcstartangle:\CF_cyclearcradius pt)](initarc){};% le d\xE9but de l'arc
-			\CF_expafter{\draw[}\CF_cyclearcdirecttikz](initarc) arc (\CF_cyclearcstartangle:\CF_cyclearcendangle:\CF_cyclearcradius pt);
-		\fi
-	\else
-		\let\CF_currentangle\CF_defaultangle
-	\fi
-	\ifnum\CF_lastaction=0
-		\let\CF_previousangle\CF_defaultangle
-		\node(CF_node){};
-		\CF_expsecond\CF_iffirsttokin{\CF_molecule}{-=(*~?<>}%
-			{\CF_insertemptygroup\CF_molecule}%
-			{}%
-	\fi
-	\CF_chemfigd
-}
-
-\def\CF_chemfigd{%
-	\let\CF_nextaction\CF_chemfigd% \xE0 priori, on reboucle
-	\CF_ifx\CF_molecule\empty
-		{\let\CF_nextaction\endgroup
-		}
-		{\CF_seeksubmol
-		\CF_expsecond\CF_seeknode{\CF_molecule}\CF_currentatomgroup\CF_molecule
-		\CF_ifx\empty\CF_currentatomgroup% pas de noeud pour commencer ?
-			{\def\CF_bondoutnode{%
-				n\CF_lastgroupnumber-%
-				\ifx\CF_currentfromatom\empty
-					\ifdim\CF_currentangle pt<90pt
-						\number\CF_cntatomgroup
-					\else
-						\ifdim\CF_currentangle pt>270pt
-							\number\CF_cntatomgroup
-						\else
-							1%
-						\fi
-					\fi
-				\else
-					\CF_currentfromatom
-				\fi}%
-			\CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_molecule\relax\_nil}%
-			\CF_iffirsttokina{-=<>~}% la suite est une liaison
-				{\ifnum\CF_lastaction=2 % c'est la deuxi\xE8me liaison cons\xE9cutive ?
-					\CF_insertemptygroup\CF_molecule% ins\xE8re un groupe vide
-					\edef\CF_bondoutnode{\CF_bondoutnode}%
-				\else
-					\ifCF_incycle
-						\advance\CF_cntcycle1
-					\fi
-					\CF_expsecond\CF_analysebond{\CF_molecule}\CF_bondtype
-					\edef\CF_bondoutnode{\CF_bondoutnode}%
-					\let\CF_molecule\CF_remainafterbond
-					\ifCF_incycle
-						\ifnum\CF_cntcycle=\CF_cyclenum\relax
-							\CF_threeea\CF_execfirst
-						\else
-							\ifnum\CF_cntcycle=1
-								\let\CF_cyclefirsttikz\CF_currenttikz
-								\CF_doifnotempty\CF_startoffset{\let\CF_cyclejoinlast\CF_zero}%
-							\fi
-							\CF_threeea\CF_execsecond
-						\fi
-					\else
-						\expandafter\CF_execsecond
-					\fi
-						{\let\CF_nextaction\endgroup
-						\CF_drawbond\CF_bondtype{\CF_bondoutnode}{\CF_hookcycle}\CF_previousatomgroup\CF_hookatomgroup
-						}%
-						{\node[at=(\CF_bondoutnode\ifCF_incycle\else\ifCF_macrofixedbondlength.\CF_currentangle\fi\fi),shift=(\ifcase\CF_flipstate\or180-\or-\fi\CF_currentangle:\CF_currentlength*\CF_atomsep)](CF_node){};
-						\let\CF_previousangle\CF_currentangle
-						\def\CF_lastaction{2}%
-						}%
-				\fi
-				\ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_molecule}\relax
-				% s'il ne reste plus rien apr\xE8s la liaison (sans tenir compte de l'espace devant)-> ins\xE8re un groupe vide
-					\CF_insertemptygroup\CF_molecule
-				\fi
-				}%
-				{\edef\CF_bondoutnode{\CF_bondoutnode}% \xE9value le l'atome de d\xE9part de liaison
-				\CF_ifx(\CF_toksa% une parenth\xE8se pour commencer ?
-					{\ifnum\CF_lastaction=2 % il y avait une liaison juste avant ?
-						\CF_insertemptygroup\CF_molecule
-					\else
-						\CF_expsecond\CF_grabsubmol{\CF_molecule}%
-						\begingroup
-							\ifCF_incycle\def\CF_lastaction{3}\fi% on \xE9tait dans un cycle
-							\CF_incyclefalse
-							\aftergroup\CF_chemfigd
-							\def\CF_nextaction{\CF_expsecond\CF_chemfigc{\CF_molinparen}}%
-					\fi
-					}%
-					{\CF_ifx\CF_molecule\empty
-						{\let\CF_nextaction\endgroup
-						}
-						{% ce qui reste apr\xE8s le noeud courant n'est pas vide, ne commence pas par "-=~", ni par une parenth\xE8se
-						\CF_ifx*\CF_toksa% un cycle ?
-							{\ifnum\CF_lastaction=2
-								\CF_insertemptygroup\CF_molecule% ins\xE8re un groupe vide
-							\else
-								\ifCF_incycle
-									\def\CF_lastaction{3}%
-								\fi% on \xE9tait dans un cycle
-								\ifnum\CF_lastaction=3
-									\let\CF_lastcyclenum\CF_cyclenum
-								\fi
-								\CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_molecule}*%
-									{\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enl\xE8ve la 1er \xE9toile
-									\CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_molecule}[% un crochet ensuite ?
-										{\expandafter\CF_cycleparsepreamblewithoptarg\CF_molecule\_nil% \begingroup inclus
-										}%
-										{\def\CF_cyclearcstartangle{0}\def\CF_cyclearcendangle{360}%
-										\let\CF_cyclearcdirecttikz\empty
-										\expandafter\CF_cycleparsepreamble\CF_molecule\_nil% \begingroup inclus
-										}%
-									\CF_cyclearctrue
-									}%
-									{\expandafter\CF_cycleparsepreamble\CF_molecule\_nil% \begingroup inclus
-									\CF_cyclearcfalse
-									}%
-								\CF_cntcycle0
-								\edef\CF_hookcycle{\CF_bondoutnode}%
-								\let\CF_hookatomgroup\CF_previousatomgroup
-								\CF_ifx\CF_hookatomgroup\CF_emptynode
-									{\def\CF_cyclejoinlast{1}}% joindre le dernier
-									{\def\CF_cyclejoinlast{0}}
-								\CF_incycletrue
-								\ifnum\CF_lastaction=3
-									\pgfmathsetmacro\CF_initcycleangle{360/\CF_lastcyclenum-180}% c'est un cycle dans un cycle
-								\else
-									\pgfmathsetmacro\CF_initcycleangle{-180/\CF_cyclenum-90+\CF_cycleanglecorrection}%
-								\fi
-								\aftergroup\CF_chemfigd
-								\def\CF_nextaction{\CF_expsecond\CF_chemfigc{\CF_molinparen}}%
-							\fi
-							}%
-							{\CF_error{something went wrong here: \detokenize\expandafter{\CF_molecule}^^JIf you think it's a bug, please, send a Minimal Example to the author}%
-							}%
-						}%
-					}%
-				}%
-			}%
-			{\CF_expthreemacroargs\CF_drawatomgroup\CF_currentangle\CF_currenttoatom\CF_currentatomgroup
-			}%
-		}%
-	\CF_nextaction
-}
-
-\def\CF_cycleparsepreamble*#1#2\_nil{%
-	\ifnum#1<3
-		\CF_error{a cycle must be at least a triangle.^^JThe number following "*" must be 3 or more}%
-	\fi
-	\def\CF_molecule{#2}%
-	\CF_expsecond\CF_grabsubmol{\CF_molecule}%
-	\begingroup
-	\def\CF_cyclenum{#1}%
-}
-
-\def\CF_cycleparsepreamblewithoptarg*[#1]#2#3\_nil{%
-	\CF_cycleparseoptarg#1,\empty,\empty,\empty\_nil
-	\CF_cycleparsepreamble*#2#3\_nil
-}
-
-\def\CF_cycleparseoptarg#1,#2,#3\_nil{%
-	\CF_ifempty{#1}
-		{\def\CF_cyclearcstartangle{0}}
-		{\def\CF_cyclearcstartangle{#1}}%
-	\CF_ifempty{#2}
-		{\def\CF_cyclearcendangle{360}}
-		{\def\CF_cyclearcendangle{#2}}%
-	\CF_expsecond{\def\CF_cyclearcdirecttikz}{\CF_sanitizelastitem#3,\empty\_nil}%
-}
-
-\def\CF_grabsubmol#1{%
-	\begingroup
-		\catcode`(1 \catcode`)2
-		\CF_threeea
-	\endgroup
-	\expandafter\CF_grabsubmola\scantokens{\relax#1}%
-}
-
-\def\CF_grabsubmola#1\_nil{%
-	\expandafter\CF_assigntonil\expandafter\CF_molecule\scantokens\CF_threeea{\expandafter\CF_gobarg    \CF_gobarg#1}%
-	\expandafter\CF_assigntonil\expandafter\CF_molinparen\scantokens\CF_threeea{\expandafter\CF_firsttonil\CF_gobarg#1\_nil}%
-}
-
-\def\CF_ifcarisupperletter#1{%
-	\ifcat\relax\noexpand#1%
-		\let\CF_next\CF_execsecond% faux si c'est une sc
-	\else
-		\ifnum`#1<`A
-			\let\CF_next\CF_execsecond
-		\else
-			\ifnum`#1>`Z
-				\let\CF_next\CF_execsecond
-			\else
-				\let\CF_next\CF_execfirst
-			\fi
-		\fi
-	\fi
-	\CF_next
-}
-
-% Cr\xE9\xE9 4 noeuds au dessus et au dessous des noeuds #1 et #2
-% \xE0 une distance de #3 du noeud #1 et #4 du noeud #2
-\def\CF_createnormnodes#1#2#3#4{%
-	\CF_doifnotempty{#3}
-		{\node[shape=coordinate,at=(#1),xshift=#3*\CF_normx,yshift=#3*\CF_normy](#11){};
-		\node[shape=coordinate,at=(#1),xshift=-#3*\CF_normx,yshift=-#3*\CF_normy](#12){};
-		}%
-	\CF_doifnotempty{#4}
-		{\node[shape=coordinate,at=(#2),xshift=#4*\CF_normx,yshift=#4*\CF_normy](#21){};
-		\node[shape=coordinate,at=(#2),xshift=-#4*\CF_normx,yshift=-#4*\CF_normy](#22){};
-		}%
-}
-
-\def\CF_computenodevect#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}%
-	\pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimby{\the\CF_dim}%
-	\pgfmathsetmacro\CF_vectorlen{veclen(\CF_dimbx-\CF_dimax,\CF_dimby-\CF_dimay)}%
-	\pgfmathsetmacro\CF_normx{(\CF_dimay-\CF_dimby)/\CF_vectorlen}%
-	\pgfmathsetmacro\CF_normy{(\CF_dimbx-\CF_dimax)/\CF_vectorlen}%
-}
-
-\def\CF_setoffset#1#2{%
-	\CF_doifempty#1%
-		{\edef#1{%
-			\ifx#2\CF_emptynode
-				0pt%
-			\else
-				\ifx#2\empty
-					0pt%
-				\else
-					\CF_bondoffset
-				\fi
-			\fi}%
-		}%
-}
-
-\def\CF_drawbond#1#2#3#4#5{% #1=type de liaison #2 et #3:nom de noeuds de d\xE9but et fin #4 et #5: contenu des atomes de d\xE9but et fin
-	\CF_setoffset\CF_startoffset#4%
-	\CF_setoffset\CF_endoffset#5%
-	\let\CF_currentbondstyle\CF_bondstyle
-	\CF_doifnotempty\CF_currenttikz{\CF_eaddtomacro\CF_currentbondstyle{\expandafter,\CF_currenttikz}}%
-	\path(#2)--(#3)coordinate[pos=0](#2@)coordinate[pos=1](#3@);%
-	\CF_computenodevect{#2@}{#3@}%
-	\pgfmathsetmacro\CF_startcoeff{\CF_startoffset/\CF_vectorlen}%
-	\pgfmathsetmacro\CF_endcoeff{1-\CF_endoffset/\CF_vectorlen}%
-	\path(#2@)--(#3@)coordinate[pos=\CF_startcoeff](#2@@)coordinate[pos=\CF_endcoeff](#3@@);%
-	\CF_doifnotempty\CF_movebondname% on doit poser un noeud sur la liaison
-		{\path(#2@@)--(#3@@)coordinate[overlay,pos=\CF_movebondcoeff](\CF_movebondname);
-		\let\CF_movebondname\empty
-		}%
-	\ifcase#1\relax
-		\CF_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_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe
-	\or% 2 = liaison double
-		\ifCF_incycle
-			\ifnum\CF_doublebondtype=0
-				\def\CF_doublebondtype{1}%
-			\fi
-			\ifnum\CF_flipstate>0
-				\def\CF_doublebondtype{2}%
-			\fi
-			\pgfmathsetmacro\CF_doublebondlengthcorrection{\CF_doublesep*tan(180/\CF_cyclenum)}%
-		\fi
-		\ifcase\CF_doublebondtype
-			\CF_createnormnodes{#2@@}{#3@@}{\CF_doublesep/2}{\CF_doublesep/2}%
-			\CF_drawbonda(#2@@1)--(#3@@1);
-			\CF_drawbonda(#2@@2)--(#3@@2);
-			\let\CF_joinbond\CF_zero
-		\or
-			\CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
-			\CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
-			\begingroup% ajuste \xE9ventuellement les longueurs des liaisons doubles
-				\ifCF_incycle
-					\ifdim\CF_startoffset=0pt
-						\CF_edefaddtomacro\CF_currentbondstyle{,shorten <=\CF_doublebondlengthcorrection pt}%
-					\fi
-					\ifdim\CF_endoffset=0pt
-						\CF_edefaddtomacro\CF_currentbondstyle{,shorten >=\CF_doublebondlengthcorrection pt}%
-					\fi
-				\fi
-				\CF_drawbonda(#2@@1)--(#3@@1);
-			\endgroup
-		\or
-			\CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
-			\CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
-			\begingroup% ajuste \xE9ventuellement les longueurs des liaisons doubles
-				\ifCF_incycle
-					\ifdim\CF_startoffset=0pt
-						\CF_edefaddtomacro\CF_currentbondstyle{,shorten \ifnum\CF_flipstate=0 <=-\else>=\fi\CF_doublebondlengthcorrection pt}%
-					\fi
-					\ifdim\CF_endoffset=0pt
-						\CF_edefaddtomacro\CF_currentbondstyle{,shorten \ifnum\CF_flipstate=0 >=-\else<=\fi\CF_doublebondlengthcorrection pt}%
-					\fi
-				\fi
-				\CF_drawbonda(#2@@2)--(#3@@2);
-			\endgroup
-		\fi
-	\or% 3 = liaison triple
-		\CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
-		\CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
-		\CF_drawbonda(#2@@1)--(#3@@1);
-		\CF_drawbonda(#2@@2)--(#3@@2);
-	\or% 4 = liaison Cram pleine de #2 vers #3
-		\CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
-		\CF_expafter{\filldraw[}\CF_currentbondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
-		\let\CF_joinbond\CF_zero
-	\or% 5 = liaison Cram creuse de #3 vers #2
-		\CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
-		\CF_expafter{\filldraw[}\CF_currentbondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
-		\let\CF_joinbond\CF_zero
-	\or% 6 = liaison Cram pointill\xE9e de #2 vers #3
-		\scope
-			\CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
-			\CF_clipcramornot(#2@@1)--(#2@@2)--(#3@@)--(#2@@1);
-			\CF_expafter{\draw[}\CF_currentbondstyle,dash pattern=on \CF_cramdashlength off \CF_cramdashsep,line width=\CF_crambasewidth](#2@@)--(#3@@);
-		\endscope
-		\let\CF_joinbond\CF_zero
-	\or% 7 = liaison Cram pointill\xE9e de #3 vers #2
-		\scope
-			\CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
-			\CF_clipcramornot(#3@@1)--(#3@@2)--(#2@@)--(#3@@1);
-			\CF_expafter{\draw[}\CF_currentbondstyle,dash pattern=on \CF_cramdashlength off \CF_cramdashsep,line width=\CF_crambasewidth](#3@@)--(#2@@);
-		\endscope
-		\let\CF_joinbond\CF_zero
-	\or% 8 = liaison cram rectangle \xE9vid\xE9 de #2 vers #3
-		\CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
-		\CF_expafter{\draw[}\CF_currentbondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
-		\let\CF_joinbond\CF_zero
-	\or% 9 = liaison cram rectangle \xE9vid\xE9 de #3 vers #1
-		\CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
-		\CF_expafter{\draw[}\CF_currentbondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
-		\let\CF_joinbond\CF_zero
-	\else
-		\CF_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_startoffset\empty
-	\let\CF_endoffset\empty
-	\let\CF_previoustikz\CF_currenttikz
-	\let\CF_previousbondangle\CF_previousangle
-	\def\CF_previousbond{#1}%
-}
-
-\def\CF_drawaxisbondnojoin#1#2{\CF_drawbonda(#1@@)--(#2@@);}
-
-\def\CF_drawaxisbondjoin#1#2{% dessine une liaison simple dans l'axe avec raccord r\xE9trograde
-	\ifCF_incycle\ifnum\CF_cntcycle=\CF_cyclenum\relax
-		\let\CF_nexttikz\CF_cyclefirsttikz
-	\fi\fi
-	\ifnum\CF_joinbond=0
-		\ifCF_incycle
-			\ifnum\CF_cntcycle=\CF_cyclenum\relax
-				\ifnum\CF_cyclejoinlast=1
-					\CF_drawbonda(#1@@)--(#2@@)--%
-						([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);
-				\else
-					\CF_drawbonda(#1@@)--(#2@@);
-				\fi
-			\else
-				\CF_drawbonda(#1@@)--(#2@@);
-			\fi
-		\else
-			\CF_drawbonda(#1@@)--(#2@@);
-		\fi
-		\def\CF_joinbond{1}%
-	\else
-		\CF_ifx\CF_previoustikz\CF_currenttikz
-			{\def\CF_joinbond{1}%
-			\CF_ifx\CF_previousatomgroup\CF_emptynode
-				{\CF_ifx\CF_previousbondangle\empty% si d\xE9but mol\xE9cule
-					{\CF_drawbonda(#1@@)--(#2@@);
-					}
-					{\ifdim\CF_startoffset=0pt
-						\ifCF_incycle
-							\ifnum\CF_cntcycle=\CF_cyclenum\relax
-								\ifnum\CF_cyclejoinlast=1
-									\CF_ifx\CF_cyclefirsttikz\CF_currenttikz
-										{\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@)--%
-										([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);
-										}
-										{\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
-										}%
-								\else
-									\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
-								\fi
-							\else
-								\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
-							\fi
-						\else
-							\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
-						\fi
-					\else
-						\CF_drawbonda(#1@@)--(#2@@);
-					\fi
-					}%
-				}
-				{\CF_drawbonda(#1@@)--(#2@@);}%
-			}
-			{\ifCF_incycle
-				\ifnum\CF_cntcycle=\CF_cyclenum\relax
-					\ifnum\CF_cyclejoinlast=1
-						\CF_ifx\CF_nexttikz\CF_currenttikz
-							{\CF_drawbonda(#1@@)--(#2@@)--([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);}%
-							{\CF_drawbonda(#1@@)--(#2@@);}%
-					\else
-						\CF_drawbonda(#1@@)--(#2@@);
-					\fi
-				\else
-					\CF_drawbonda(#1@@)--(#2@@);
-				\fi
-			\else
-				\CF_drawbonda(#1@@)--(#2@@);
-			\fi
-			}%
-	\fi
-	\ifdim\CF_endoffset=0pt \else
-		\let\CF_joinbond\CF_zero
-	\fi
-}
-
-\def\CF_drawbonda{\CF_expafter{\draw[}\CF_currentbondstyle]}
-
-\def\CF_hookdrawall{% dessine tous les crochets contenus dans la sc \CF_hookdraw
-	\CF_doifnotempty\CF_hookdrawlist
-		{\expandafter\CF_hookdrawfirst\CF_hookdrawlist\_nil% trace un lien de crochet \xE0 crochet
-		\CF_hookdrawall
-		}%
-}
-
-\def\CF_hookdrawfirst[#1,#2,#3]#4#5#6#7#8\_nil{%
-	\def\CF_hookdrawlist{#8}%
-	\begingroup
-		\let\CF_joinbond\CF_zero
-		\def\CF_currenttikz{#3}%
-		\def\CF_hookstartcontent{#6}\def\CF_hookendcontent{#7}%
-		\CF_ifinteger{#2}%
-			{\CF_drawbond{#2}{#4}{#5}\CF_hookstartcontent\CF_hookendcontent
-			}%
-			{\CF_assignbondcode{#2}\CF_bondcurrentnum
-			\CF_drawbond\CF_bondcurrentnum{#4}{#5}\CF_hookstartcontent\CF_hookendcontent
-			}%
-	\endgroup
-}
-
-\def\CF_extractatom#1-#2\_nil{#2}% transforme le bound at outnode en n\xB0 de l'atome
-
-\def\CF_gobblemovearg @#1#2\_nil#3{%
-	\expandafter\def\csname atom_\number\CF_cntatom\endcsname{#2}%
-	\CF_ifinstr{#1},%
-		{\CF_analysemovearg#1\_nil#3\let\CF_movebondcoeff\empty}%
-		{\def#3{#1}}%
-	\CF_doifempty{#2}{\let\CF_nodestrut\empty}%
-}%
-
-\def\hflipnext{\def\CF_flipstate{1}}
-
-\def\vflipnext{\def\CF_flipstate{2}}
-\let\CF_flipstate\CF_zero
-
-\def\CF_drawatomgroup#1#2#3{% #1=angle d'arriv\xE9e de la liaison #2=numero atome sur lequel arrive la liaison #3=groupe d'atomes
-	\expandafter\let\expandafter\CF_bondoutcontent% assigne le contenu de l'atome d'o\xF9 part la liaison
-		\csname
-			\ifdefined\CF_bondoutnode
-				atom_\expandafter\CF_extractatom\CF_bondoutnode\_nil
-			\else
-				empty%
-			\fi
-		\endcsname
-	\global\advance\CF_cntgroup1
-	\let\CF_currentatom\empty
-	\global\let\CF_hookdrawlist\empty
-	\CF_cntatomgroup0
-	\CF_iffirsttokmatch{#3}?
-		{\CF_drawatomgroupa{{}#3}}
-		{\CF_drawatomgroupa{#3}}%
-	\def\CF_currentatomgroup{#3}%
-	\CF_removemovearg\CF_currentatomgroup% enl\xE8ve les "@{<nom>}"
-	\CF_ifinstr{#3}?%
-		{\CF_removehook\CF_currentatomgroup
-		\ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_currentatomgroup}\relax
-			\let\CF_currentatomgroup\CF_emptynode
-		\fi
-		}%
-		{}%
-	\CF_doifnotempty{#2}
-		{\ifnum#2<1
-			\CF_warning{no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
-		\else
-			\ifnum#2>\CF_cntatomgroup
-				\CF_error{no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
-			\fi
-		\fi
-		}%
-	\edef\CF_hookatomnumber{%
-		\CF_ifempty{#2}
-			{\ifdim#1pt>90pt
-				\ifdim#1pt<270pt
-					\number\CF_cntatomgroup
-				\else
-					1%
-				\fi
-			\else
-				1%
-			\fi
-			}
-			{#2%
-			}%
-	}%
-	\CF_cntatom\CF_hookatomnumber
-	\CF_ifx\CF_currentatomgroup\CF_emptynode
-		{\let\CF_nodestrut\empty
-		}
-		{\CF_ifx\empty\CF_bondoutcontentsaved
-			{\def\CF_nodestrut{\vphantom\CF_bondoutcontent}}%
-			{\def\CF_nodestrut{\vphantom\CF_bondoutcontentsaved}}%
-		}%
-	\edef\CF_optstring{anchor=\ifnum\CF_lastaction=0 base\else\ifCF_incycle center\else\ifCF_macrofixedbondlength 180+#1\else center\fi\fi\fi,at=(CF_node),\CF_nodestyle}% premier atome de la mol\xE9cule affich\xE9
-	\loop
-		\unless\ifnum\CF_cntatom>\CF_cntatomgroup
-		\CF_eexpafter
-			{\futurelet\CF_toksa}
-			{\expandafter\expandafter\expandafter\CF_gobtonil\csname atom_\number\CF_cntatom\endcsname\_nil}%
-		\CF_ifx @\CF_toksa% l'atome courant commence par un "@"
-			{\CF_threeea\CF_gobblemovearg\csname atom_\number\CF_cntatom\endcsname\_nil\CF_moveatomname
-			\CF_expafter{\node[}\CF_optstring,overlay](\CF_moveatomname){\phantom{\CF_nodecontent}};%
-			\let\CF_moveatomname\empty
-			}
-			{}%
-		\CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
-		\let\CF_nodestrut\empty
-		\advance\CF_cntatom1
-		\edef\CF_optstring{anchor=base \ifnum\CF_flipstate=1 east\else west\fi,at=(n\number\CF_cntgroup-\number\numexpr\CF_cntatom-1.base \ifnum\CF_flipstate=1 west\else east\fi),\CF_nodestyle}%
-	\repeat
-	\CF_cntatom\CF_hookatomnumber
-	\ifnum\CF_lastaction=2 % s'il faut tracer une liaison
-		\gdef\CF_cycleanglecorrection{0}% alors c'est qu'un cycle ne peut pas commencer la mol\xE9cule : annulation de la correction d'angle
-		\CF_drawbond\CF_bondtype{\CF_bondoutnode}{n\number\CF_cntgroup-\number\CF_cntatom}\CF_previousatomgroup\CF_currentatomgroup
-	\fi
-	\def\CF_lastaction{1}% met la derni\xE8re action \xE0 1 : affichage d'un noeud
-	\loop
-		\ifnum\CF_cntatom>1
-		\advance\CF_cntatom-1
-		\edef\CF_optstring{anchor=base \ifnum\CF_flipstate=1 west\else east\fi,at=(n\number\CF_cntgroup-\number\numexpr\CF_cntatom+1.base \ifnum\CF_flipstate=1 east\else west\fi),\CF_nodestyle}%
-		\CF_eexpafter
-			{\futurelet\CF_toksa}
-			{\expandafter\expandafter\expandafter\CF_gobtonil\csname atom_\number\CF_cntatom\endcsname\_nil}%
-		\CF_ifx @\CF_toksa% l'atome courant commence par un "@"
-			{\CF_threeea\CF_gobblemovearg\csname atom_\number\CF_cntatom\endcsname\_nil\CF_moveatomname
-			\CF_expafter{\node[}\CF_optstring,overlay](\CF_moveatomname){\phantom{\CF_nodecontent}};%
-			\let\CF_moveatomname\empty
-			}
-			{}%
-		\CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
-	\repeat
-	\CF_hookdrawall
-	\edef\CF_lastgroupnumber{\number\CF_cntgroup}%
-	\let\CF_previousatomgroup\CF_currentatomgroup
-}
-
-\def\CF_keepmovearg @#1#2\_nil{\def\CF_currentatom{@{#1}}}
-
-\def\CF_drawatomgroupa#1{% transforme #1 en un groupe d'atomes
-	\CF_ifempty{#1}
-		{\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
-		}
-		{\advance\CF_cntatomgroup1
-		\futurelet\CF_toksa\CF_gobtonil#1\_nil
-		\CF_ifx @\CF_toksa
-			{\CF_keepmovearg#1\_nil
-			\CF_removemovearga#1\_nil\CF_aftermovearg
-			\CF_expsecond\CF_drawatomgroupb{\CF_aftermovearg}%
-			}%
-			{\let\CF_currentatom\empty
-			\CF_drawatomgroupb{#1}%
-			}%
-		}%
-}
-
-\def\CF_drawatomgroupb#1{%
-	\CF_ifempty{#1}
-		{\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
-		}
-		{\futurelet\CF_toksa\CF_gobtonil#1\_nil
-		\CF_ifx\bgroup\CF_toksa
-			{\CF_eaddtomacro\CF_currentatom{\expandafter{\CF_firsttonil#1\_nil}}%
-			\CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
-			}%
-			{\CF_ifx\CF_sptoken\CF_toksa
-				{\CF_addtomacro\CF_currentatom{ }%
-				\CF_expsecond\CF_drawatomgroupba{\CF_afterspace#1\_nil}%
-				}%
-				{\CF_eaddtomacro\CF_currentatom{\CF_firsttonil#1\_nil}%
-				\CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
-				}%
-			}%
-		}%
-}
-
-% enl\xE8ve tous les "@{nom}" de la sc #1
-\def\CF_removemovearg#1{%
-	\CF_expsecond\CF_ifinstr{#1}@%
-		{\expandafter\CF_removemovearga#1\_nil#1%
-		\CF_removemovearg#1%
-		}%
-		{}%
-}
-
-% enl\xE8ve le premier "@{<nom>}" de l'argument et l'assigne \xE0 #2
-\def\CF_removemovearga#1\_nil#2{%
-	\def\CF_removemoveargb##1@{%
-		\CF_expsecond{\def#2}{\CF_gobarg##1}% mange le \relax
-		\CF_removemoveargc\relax
-	}%
-	\def\CF_removemoveargc##1\_nil{\CF_eaddtomacro#2{\CF_gobtwoargs##1}}% mange le \relax et le <nom>
-	\CF_removemoveargb\relax#1\_nil
-}
-
-\def\CF_drawatomgroupba#1{% transforme #1 en un groupe d'atomes
-	\CF_ifempty{#1}
-		{\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
-		\let\CF_currentatom\empty
-		}
-		{\futurelet\CF_toksa\CF_gobtonil#1\_nil
-		\CF_ifx @\CF_toksa
-			{\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
-			\let\CF_currentatom\empty
-			\CF_drawatomgroupa{#1}%
-			}%
-			{\CF_ifx|\CF_toksa
-				{\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
-				\let\CF_currentatom\empty
-				\CF_expsecond\CF_drawatomgroupa{\CF_gobarg#1}%
-				}%
-				{\CF_ifx\CF_sptoken\CF_toksa
-					{\CF_addtomacro\CF_currentatom{ }%
-					\CF_expsecond\CF_drawatomgroupba{\CF_afterspace#1\_nil}%
-					}%
-					{\CF_ifx\bgroup\CF_toksa
-						{\CF_eaddtomacro\CF_currentatom{\expandafter{\CF_firsttonil#1\_nil}}%
-						\CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
-						}%
-						{\CF_expsecond\CF_ifcarisupperletter{\CF_firsttonil#1\_nil}%
-							{\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
-							\let\CF_currentatom\empty
-							\CF_drawatomgroupa{#1}%
-							}%
-							{\CF_ifx?\CF_toksa
-								{\CF_expsecond\CF_iffirsttokmatch{\CF_gobarg#1}[% un crochet apr\xE8s le "?"
-									{\expandafter\CF_graboptarg\CF_gobarg#1\_nil\CF_afterhook}%
-									{\CF_expafter{\CF_graboptarg[]}{\CF_gobarg#1}\_nil\CF_afterhook}%
-								\CF_exptwomacroargs\CF_ifinstr{\CF_hooklist}{\expandafter(\CF_hookcurrentname)}% crochet d\xE9j\xE0 d\xE9fini ?
-									{\CF_expsecond\CF_hookparselist{\CF_hookcurrentname}% chercher les caract\xE9ristiques du crochet sauvegard\xE9
-									\CF_edefaddtomacro\CF_hookdrawlist{%
-										[\CF_hookcurrentname,\CF_hookcurrentlink,\CF_hookcurrenttikz]{\CF_hooksavedcoord}{n\number\CF_cntgroup-\number\CF_cntatomgroup}}%
-									\CF_eaddtomacro\CF_hookdrawlist{\expandafter{\CF_hooksavedcontent}}%
-									\CF_eaddtomacro\CF_hookdrawlist{\expandafter{\CF_currentatom}}% ajoute les 4 arguments \xE0 la liste des crochets \xE0 tracer
-									\global\let\CF_hookdrawlist\CF_hookdrawlist
-									}%
-									{\CF_edefaddtomacro\CF_hooklist{(\CF_hookcurrentname)|n\number\CF_cntgroup-\number\CF_cntatomgroup|}%
-									\CF_eaddtomacro\CF_hooklist{\CF_currentatom|}%
-									\global\let\CF_hooklist\CF_hooklist
-									}%
-								\CF_expsecond\CF_drawatomgroupba{\CF_afterhook}%
-								}%
-								{\CF_eaddtomacro\CF_currentatom{\CF_firsttonil#1\_nil}%
-								\CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
-								}%
-							}%
-						}%
-					}%
-				}%
-			}%
-		}%
-}
-
-\def\CF_kookdefaultname{a}
-\def\CF_hookdefaultlink{-}
-\def\CF_hookdefaulttikz{}
-
-\def\CF_hookparseoptarg#1,#2,#3\_nil{%
-	\CF_testemptyandassign\CF_hookcurrentname{#1}\CF_kookdefaultname
-	\CF_testemptyandassign\CF_hookcurrentlink{#2}\CF_hookdefaultlink
-	\CF_testemptyandassign\CF_hookcurrenttikz{#3}\CF_hookdefaulttikz
-}
-
-\def\CF_graboptarg[#1]#2\_nil#3{%
-	\CF_hookparseoptarg#1,,\_nil
-	\def#3{#2}%
-}
-
-\def\CF_hookparselist#1{% #1 est le nom du noeud \xE0 retrouver
-	\def\CF_hookparselista##1(#1)|##2|##3|##4\_nil{\def\CF_hooksavedcoord{##2}\def\CF_hooksavedcontent{##3}}%
-	\expandafter\CF_hookparselista\CF_hooklist\_nil
-}
-
-\def\CF_removehook#1{%
-	\CF_expsecond\CF_ifinstr{#1}?%
-		{\CF_expafter{\CF_removehooka\relax}#1\_nil#1%
-		\CF_removehook#1%
-		}
-		{}%
-}
-
-\def\CF_removehooka#1?#2\_nil#3{%
-	\CF_iffirsttokmatch{#2}[%
-		{\CF_removehookb#1?#2\_nil#3}
-		{\CF_expsecond{\def#3}{\CF_gobarg#1#2}}%
-}
-
-\def\CF_removehookb#1?[#2]#3\_nil#4{\CF_expsecond{\def#4}{\CF_gobarg#1#3}}
-
-\def\Lewis{%
-	\CF_lewisoverlayfalse
-	\CF_testopt\CF_lewisa{}%
-}
-
-\def\lewis{%
-	\CF_lewisoverlaytrue
-	\CF_testopt\CF_lewisa{}%
-}
-
-\def\CF_lewisa[#1]{%
-	\begingroup
-		\CF_doifnotempty{#1}{\setchemfig{#1}}%
-		\CF_valuetomacro\CF_lewiswidthdouble[0.3ex]{lewis | width}%
-		\CF_valuetomacro\CF_lewisoffset     [0.4ex]{lewis sep}%
-		\CF_valuetomacro\CF_lewislength     [1.5ex]{lewis length}%
-		\CF_valuetomacro\CF_lewisstyle      []{lewis style}%
-		\CF_valuetomacro\CF_lewisdist       [0.3em]{lewis dist}%
-		\CF_valuetomacro\CF_lewisradius     [0.15ex]{lewis radius}%
-		\CF_valuetomacro\CF_lewisdiagcoeff  [1]{lewis diag coeff}%
-		\ifCF_lewisoverlay
-			\CF_addtomacro\CF_lewisstyle{,overlay}%
-		\fi
-		\CF_lewisb
-}
-
-\def\CF_lewisb#1{%
-		\CF_lewisc#1\_nil
-	\endgroup
-}
-
-\def\CF_lewisc#1,#2\_nil{%
-	\setbox\CF_boxlewis\hbox{\printatom{#2}}% mettre en dehors de tikzpicture (si \printatom ne passe pas en mode math)
-	\tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
-		\CF_makeother;\CF_makeother:%
-		\node(CF_lewis at anchor){};
-		\def\CF_lewisremainpos{#1}%
-		\let\CF_lewispreviouspos\empty
-		\loop
-			\unless\ifx\CF_lewisremainpos\empty
-				\edef\CF_lewiscurrentpos{\expandafter\CF_firsttonil\CF_lewisremainpos\_nil}%
-				\edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
-				\pgfmathsetmacro\CF_lewisx{\wd\CF_boxlewis/2+\ifcase\CF_lewiscurrentpos\space1\or1\or0\or-1\or-1\or-1\or0\or1\fi*(\wd\CF_boxlewis/2)}%
-				\pgfmathsetmacro\CF_lewisy{\ht\CF_boxlewis/2+\ifcase\CF_lewiscurrentpos\space0\or1\or1\or1\or0\or-1\or-1\or-1\fi*(\ht\CF_boxlewis/2\ifnum\CF_lewiscurrentpos>4 +\dp\CF_boxlewis\fi)}%
-				\edef\CF_lewisxoffset{\ifcase\CF_lewiscurrentpos\space1\or0.70711\or0\or-0.70711\or-1\or-0.70711\or0\or0.70711\fi}%
-				\edef\CF_lewisyoffset{\ifcase\CF_lewiscurrentpos\space0\or0.70711\or1\or0.70711\or0\or-0.70711\or-1\or-0.70711\fi}%
-				\ifodd\CF_lewiscurrentpos\relax
-					\pgfmathsetmacro\CF_lewiscurrentoffset{\CF_lewisoffset*\CF_lewisdiagcoeff}%%
-				\else
-					\let\CF_lewiscurrentoffset\CF_lewisoffset
-				\fi
-				\if.\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
-					\edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
-					\CF_expafter{\draw[fill,black,}{\CF_lewisstyle]}%
-						(\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset,\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset)circle(\CF_lewisradius);%
-				\else
-					\if|\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
-						\edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
-						\pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
-						\pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
-						\CF_expafter{\draw[}\CF_lewisstyle]%
-							(\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt)--
-							(\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt+\CF_lewisxoffset*\CF_lewiswidthdouble,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt+\CF_lewisyoffset*\CF_lewiswidthdouble)--
-							(\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt+\CF_lewisxoffset*\CF_lewiswidthdouble,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt+\CF_lewisyoffset*\CF_lewiswidthdouble)--
-							(\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt)--cycle;%
-					\else
-						\if:\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
-							\edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
-							\pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
-							\pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
-							\CF_expafter{\draw[fill,black,}{\CF_lewisstyle]}%
-								(\CF_lewisx pt+\CF_lewisdist*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewisdist*\CF_lewisxoffset/2 pt)circle(\CF_lewisradius)%
-								(\CF_lewisx pt-\CF_lewisdist*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewisdist*\CF_lewisxoffset/2 pt)circle(\CF_lewisradius);%
-						\else
-							\pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
-							\pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
-							\CF_expafter{\draw[}\CF_lewisstyle]%
-								(\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt)--%
-								(\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt);%
-						\fi
-					\fi
-				\fi
-		\repeat
-		\node[anchor=base west]at(CF_lewis at anchor){\box\CF_boxlewis};%
-	\endtikzpicture
-}
-
-\def\Chembelow{\begingroup\let\CF_temp\CF_gobarg\CF_chembelowa}
-
-\def\chembelow{\begingroup\let\CF_temp\CF_id\CF_chembelowa}
-
-\def\CF_chembelowa{\CF_testopt\CF_chembelowb\CF_stacksep}
-
-\def\CF_chembelowb[#1]#2#3{%
-	\setbox\CF_box\hbox{\printatom{#2}}%
-	\expandafter\vtop\CF_temp{to\ht\CF_box}{%
-		\offinterlineskip
-		\hbox{\printatom{#2}}%
-		\kern#1\relax
-		\hbox to\wd\CF_box{\hss\printatom{#3}\hss}%
-		\CF_temp\vss
-		}%
-	\endgroup
-}
-
-\def\Chemabove{\begingroup\let\CF_temp\CF_gobarg\CF_chemabovea}
-
-\def\chemabove{\begingroup\let\CF_temp\CF_id\CF_chemabovea}
-
-\def\CF_chemabovea{\CF_testopt\CF_chemaboveb\CF_stacksep}
-
-\def\CF_chemaboveb[#1]#2#3{%
-	\setbox\CF_box\hbox{\printatom{#2}}%
-	\expandafter\vbox\CF_temp{to\ht\CF_box}{%
-		\offinterlineskip
-		\CF_temp\vss
-		\hbox to\wd\CF_box{\hss\printatom{#3}\hss}%
-		\kern#1\relax
-		\hbox{\printatom{#2}}%
-	}%
-	\endgroup
-}
-
-\def\chemmove{\CF_testopt\CF_chemmove{}}
-
-\def\CF_chemmove[#1]#2{%
-	\CF_doifnotempty{#2}%
-		{\expandafter\tikzpicture\romannumeral
-			\CF_ifempty{#1}%
-				{\CF_zero[overlay,remember picture,-CF]}
-				{\CF_zero[overlay,remember picture,-CF,#1]}%
-			#2
-		\endtikzpicture
-		}%
-}
-
-\def\chemnameinit#1{%
-	\setbox\CF_boxstuff\hbox{#1}%
-	\xdef\CF_dpmax{\the\dp\CF_boxstuff}%
-}
-\let\CF_dpmax\CF_zero
-
-\def\CF_parsemolname#1\\#2\_nil{%
-	\hbox to\CF_wdstuffbox{\hss#1\hss}%
-	\CF_doifnotempty{#2}{\CF_parsemolname#2\_nil}%
-}
-
-\def\chemname{%
-	\CF_ifstar
-		{\CF_adjustnamedpfalse\CF_chemnamea}
-		{\CF_adjustnamedptrue \CF_chemnamea}%
-}
-
-\def\CF_chemnamea{\CF_testopt\CF_chemnameb{1.5ex}}
-
-\def\CF_chemnameb[#1]#2#3{%
-	\setbox\CF_boxstuff\hbox{#2}%
-	\edef\CF_wdstuffbox{\the\wd\CF_boxstuff}\edef\CF_dpstuffbox{\the\dp\CF_boxstuff}%
-	\leavevmode
-	\ifdim\CF_dpmax<\CF_dpstuffbox\global\let\CF_dpmax\CF_dpstuffbox\fi
-	\vtop{%
-		\box\CF_boxstuff
-		\nointerlineskip
-		\kern\dimexpr#1\ifCF_adjustnamedp+\CF_dpmax-\CF_dpstuffbox\fi\relax
-		\CF_parsemolname#3\\\_nil
-	}%
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%           S C H \xC9 M A S      R \xC9 A C T I O N N E L S           %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\let\CF_schemenest\CF_zero
-
-\def\CF_subscheme{\CF_testopt\CF_subschemea{}}
-\def\CF_subschemea[#1]{\CF_testopt{\CF_subschemeb[#1]}{text}}
-\def\CF_subschemeb[#1][#2]#3{\schemestart[#1][#2]#3\schemestop}
-
-\def\chemleft#1#2\chemright#3{%
-	\leavevmode
-	\begingroup
-		\setbox0\hbox{$\vcenter{\hbox{}}$}\edef\CF_delimmathht{\the\ht0}%
-		\setbox0\hbox{#2}\edef\CF_delimdim{\the\dimexpr(\ht0+\dp0)/2}%
-		\edef\CF_delimshift{\the\dimexpr(\ht0-\dp0)/2-\CF_delimmathht}%
-		\raise\CF_delimshift\hbox{$\left#1\vrule height\CF_delimdim depth\CF_delimdim width0pt\right.$}\box0
-		\raise\CF_delimshift\hbox{$\left.\vrule height\CF_delimdim depth\CF_delimdim width0pt\right#3$}%
-	\endgroup
-}
-
-\def\chemright#1{%
-	\CF_warning{"\string\chemright\string#1" ignored! No \string\chemleft\space previously found.}%
-}
-
-\def\chemup#1#2\chemdown#3{%
-	\begingroup
-		\setbox0\hbox{\printatom{#2}}\edef\CF_delimdim{\the\dimexpr\wd0/2}%
-		\tikzpicture[every node/.style={inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
-			\node[anchor=base west](chem at stuff){\box0};%
-			\node[at=(chem at stuff.north),anchor=east,rotate=-90]{$\left#1\vrule height\CF_delimdim depth\CF_delimdim width0pt\right.$};%
-			\node[at=(chem at stuff.south),anchor=west,rotate=-90]{$\left.\vrule height\CF_delimdim depth\CF_delimdim width0pt\right#3$};%
-		\endtikzpicture
-	\endgroup
-}
-
-\def\chemdown#1{%
-	\CF_warning{"\string\chemdown\string#1" ignored! No \string\chemup\space previously found.}%
-}
-
-\def\CF_setstyle#1,#2,#3\_nil#4#5#6{%
-	\def#4{#1}\let#5\empty\let#6\empty
-	\CF_iffirsttokmatch\CF_quark{#2\relax}
-		{}%
-		{\def#5{#2}%
-		\CF_iffirsttokmatch\CF_quark{#3\relax}
-			{}%
-			{\CF_setstylea#3\_nil#6}%
-		}%
-}
-\def\CF_setstylea#1,\CF_quark#2\_nil#3{\def#3{#1}}
-
-\def\CF_and{\futurelet\CF_toksa\CF_anda}
-
-\def\CF_anda{%
-	\CF_ifx\CF_toksa\bgroup
-		{\CF_andb}
-		{\CF_andb{}}%
-}
-
-\def\CF_andb#1{%
-	\CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_signspaceante\CF_signspacepost\CF_signvshift
-	\CF_doifempty\CF_signspaceante{\CF_valuetomacro\CF_signspaceante[0.5em]{+ sep left}}%
-	\CF_doifempty\CF_signspacepost{\CF_valuetomacro\CF_signspacepost[0.5em]{+ sep right}}%
-	\CF_doifempty\CF_signvshift{\CF_valuetomacro\CF_signvshift[0pt]{+ vshift}}%
-	\raise\CF_signvshift\hbox{\kern\CF_signspaceante$+$\kern\CF_signspacepost}%
-}
-
-\def\schemestart{%
-	\begingroup
-	\xdef\CF_schemenest{\number\numexpr\CF_schemenest+1}%
-	\CF_testopt\CF_schemestarta{}%
-}
-
-\def\CF_schemestarta[#1]{%
-	\CF_valuetomacro\CF_defaultcompoundstyle[]{compound style}%
-	\CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_arrowangle\CF_arrowlength\CF_arrowstyle
-	\CF_doifempty\CF_arrowangle{\CF_valuetomacro\CF_arrowangle[0]{arrow angle}}%
-	\CF_doifempty\CF_arrowlength{\CF_valuetomacro\CF_arrowlength[1]{arrow coeff}}%
-	\CF_valuetomacro\CF_defaultarrowstyle[]{arrow style}%
-	\CF_valuetomacro\CF_arrowoffset[1em]{arrow offset}%
-	\CF_valuetomacro\CF_compoundsep[5em]{compound sep}%
-	\CF_valuetomacro\CF_arrowlabelsep[3pt]{arrow label sep}%
-	\CF_valuetomacro\CF_arrowhead[-CF]{arrow head}%
-	\CF_eexpsecond{\def\CF_arrowtip}{\expandafter\CF_gobarg\CF_arrowhead}%
-	\CF_eexpsecond{\CF_preaddtomacro\CF_defaultarrowstyle}{\useKV[chemfig]{arrow head},}%
-	\CF_ifx\empty\CF_arrowstyle
-		{\let\CF_arrowstyle\CF_defaultarrowstyle}
-		{\CF_expsecond{\CF_preaddtomacro\CF_arrowstyle}{\CF_defaultarrowstyle,}}% se rajoute apr\xE8s le style par d\xE9faut
-	\CF_valuetomacro\CF_arrowdoublesep[2pt]{arrow double sep}%
-	\pgfmathsetmacro\CF_arrowdoublesep{\CF_arrowdoublesep/2}%
-	\CF_valuetomacro\CF_arrowdoubleposstart[0.6]{arrow double coeff}%
-	\pgfmathsetmacro\CF_arrowdoubleposstart{(1-\CF_arrowdoubleposstart)/2}%
-	\pgfmathsetmacro\CF_arrowdoubleposend{1-\CF_arrowdoubleposstart}%
-	\ifboolKV[chemfig]{scheme debug}
-		{\tikzpicture[every node/.style={draw,anchor=base,inner sep=0pt,outer sep=0pt,minimum size=1.5pt},baseline,remember picture]}
-		{\tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},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
-	\CF_testopt{\CF_schemestartb}{text}%
-}
-
-\def\CF_schemestartb[#1]{%
-	\ifnum\CF_schemenest=1 % la commande n'est pas imbriqu\xE9e ?
-		\CF_cntcompound0
-	\fi
-	\edef\CF_currentnodename{c\number\CF_cntcompound}%
-	\let\CF_nextnodename\empty
-	\let\CF_nextnodestyle\empty
-	\let\CF_directarrowlist\empty
-	\ifboolKV[chemfig]{scheme debug}
-		{\node[fill,green](\CF_currentnodename){};}
-		{\node(\CF_currentnodename){};}%
-	\def\CF_nextnodeanchor{#1}%
-	\CF_doifempty\CF_nextnodeanchor{\def\CF_nextnodeanchor{text}}%
-	\let\CF_compound\empty
-	\CF_schemestartc
-}
-
-\def\CF_schemestartc{%
-	\futurelet\CF_toksa\CF_schemestarte
-}
-
-\expandafter\def\expandafter\CF_schemestartd\space{\futurelet\CF_toksa\CF_schemestarte}
-
-\def\CF_schemestarte{% ... et l'examine :
-	\CF_iffirsttokina{\arrow\schemestop\merge}%
-		{}
-		{\CF_ifx\CF_toksa\bgroup
-			{\CF_addnextarg
-			}
-			{\CF_ifx\CF_toksa\CF_sptoken
-				{\CF_addtomacro\CF_compound{ }%
-				\CF_schemestartd
-				}
-				{\afterassignment\CF_schemestartc
-				\CF_addtomacro\CF_compound
-				}%
-			}%
-		}%
-}
-
-\def\CF_addnextarg#1{\CF_addtomacro\CF_compound{{#1}}\CF_schemestartc}
-
-\def\CF_displaycompound#1#2{% #1 = nom et #2 = style
-	\CF_doifnotempty\CF_compound
-		{\global\advance\CF_cntcompound1
-		\CF_ifx\CF_defaultcompoundstyle\empty
-			{\let\CF_currentnodestyle\empty}
-			{\CF_expsecond{\def\CF_currentnodestyle}{\CF_defaultcompoundstyle,}}%
-		\CF_addtomacro\CF_currentnodestyle{anchor=\CF_nextnodeanchor,at=(\CF_currentnodename)}%
-		\CF_ifempty{#2}%
-			{\CF_doifnotempty\CF_nextnodestyle
-				{\CF_eaddtomacro\CF_currentnodestyle{\expandafter,\CF_nextnodestyle}}%
-			}
-			{\CF_doifnotempty\CF_nextnodestyle
-				{\CF_warning{two styles for the same node, first style "\CF_nextnodestyle" ignored}%
-				}%
-			\CF_addtomacro\CF_currentnodestyle{,#2}%
-			}%
-		\CF_ifempty{#1}
-			{\edef\CF_temp{%
-				\CF_ifempty\CF_nextnodename
-					{c\number\CF_cntcompound}
-					{\CF_nextnodename}%
-				}%
-			}
-			{\CF_doifnotempty\CF_nextnodename
-				{\CF_warning{two names for the same node, first name "\CF_nextnodename" ignored}%
-				}%
-			\edef\CF_temp{#1}%
-			}%
-		\CF_expafter{\node[}\CF_currentnodestyle](\CF_temp){\CF_compound};%
-		\ifboolKV[chemfig]{scheme debug}%
-			{\node[draw=none,anchor=270,at=(\CF_temp.90),fill=green!60,overlay,opacity=0.5]{\scriptsize\bfseries\CF_temp};%
-			}
-			{}%
-		\let\CF_currentnodename\CF_temp
-		}%
-}
-
-\def\CF_schemestop{%
-	\CF_displaycompound{}{}%
-	\CF_directarrowlist
-	\endtikzpicture
-	\xdef\CF_schemenest{\number\numexpr\CF_schemenest-1}%
-	\endgroup
-}
-
-\def\CF_analysearrowarg#1{\CF_analysearrowarga#1[]\_nil}
-
-\def\CF_analysearrowarga#1[#2]#3\_nil{%
-	\CF_ifinstr{#1}.
-		{\CF_addtomacro\CF_temp{#1[#2]}}
-		{\CF_addtomacro\CF_temp{#1.[#2]}}%
-}
-
-\def\CF_arrow{%
-	\CF_ifnextchar(%
-		{\CF_arrowa
-		}
-		{\CF_ifnextchar\bgroup
-			{\CF_arrowb(.[]--.[])}
-			{\CF_arrowb(.[]--.[]){}}%
-		}%
-}
-
-\def\CF_arrowa(#1--#2){%
-	\def\CF_temp{(}%
-	\CF_analysearrowarg{#1}%
-	\CF_addtomacro\CF_temp{--}%
-	\CF_analysearrowarg{#2}%
-	\CF_addtomacro\CF_temp)%
-	\CF_ifnextchar\bgroup
-		{\expandafter\CF_arrowb\CF_temp}
-		{\expandafter\CF_arrowb\CF_temp{}}%
-}
-
-\def\CF_arrowb(#1.#2[#3]--#4.#5[#6])#7{%
-	\def\CF_currentarrowtype{#7}% nom de la fl\xE8che
-	\CF_doifempty\CF_currentarrowtype{\def\CF_currentarrowtype{->}}%
-	\CF_testopt{\CF_arrowc(#1.#2[#3]--#4.#5[#6])}{}%
-}
-
-\def\CF_arrowc(#1.#2[#3]--#4.#5[#6])[#7]{%
-	\def\CF_temp{\CF_arrowe(#1.#2[#3]--#4.#5[#6])}%
-	\CF_arrowd#7,\empty,\empty\_nil
-}
-
-\def\CF_arrowd#1,#2,#3\_nil{%
-	\CF_addtomacro\CF_temp{{#1}}%
-	\CF_eaddtomacro\CF_temp{\expandafter{#2}}%
-	\expandafter\CF_eaddtomacro\expandafter\CF_temp\expandafter{\expandafter\expandafter\expandafter{\expandafter\CF_sanitizelastitem#3,\empty\_nil}}%
-	\CF_temp
-}
-
-% #1, #4 : nom des nodes    #2, #5 : ancres des nodes    #3, #6 : styles des nodes
-% #7 : angle fl\xE8che    #8 : longueur fl\xE8che    #9 : style tikz de la fl\xE8che
-\def\CF_arrowe(#1.#2[#3]--#4.#5[#6])#7#8#9{%
-	\let\CF_arrowcurrentstyle\CF_arrowstyle
-	\if @\expandafter\CF_firsttonil\detokenize{#1.}\_nil% si #1 commence par @
-		\if @\expandafter\CF_firsttonil\detokenize{#4.}\_nil
-			\CF_eaddtomacro\CF_directarrowlist{\expandafter\CF_directarrow\expandafter{\CF_currentarrowtype}{#1}{#2}{#4}{#5}{#9}}%
-			\let\CF_nextaction\CF_schemestartc
-		\else
-			\CF_doifnotempty\CF_arrowcurrentstyle{\CF_addtomacro\CF_arrowcurrentstyle,}%
-			\CF_doifnotempty{#9}{\CF_addtomacro\CF_arrowcurrentstyle{#9,}}%
-			\CF_displaycompound{}{#3}%
-			\def\CF_nextnodename{#4}%
-			\CF_expsecond{\def\CF_currentnodename}{\CF_gobarg#1}%
-			\let\CF_arrowstartname\CF_currentnodename
-			\let\CF_arrowendname\CF_nextnodename
-			\CF_arrowf{#7}{#8}{#2}{#5}%
-			\def\CF_nextnodestyle{#6}%
-		\fi
-	\else
-		\CF_doifnotempty\CF_arrowcurrentstyle{\CF_addtomacro\CF_arrowcurrentstyle,}%
-		\CF_doifnotempty{#9}{\CF_addtomacro\CF_arrowcurrentstyle{#9,}}%
-		\if @\expandafter\CF_firsttonil\detokenize{#2.}\_nil
-			\CF_error{syntax "(<name>--@<name>)" is not allowed}%
-		\else
-			\CF_displaycompound{#1}{#3}%
-			\edef\CF_arrowstartname{%
-				\CF_ifempty{#1}
-					\CF_currentnodename
-					{#1}%
-				\CF_doifnotempty{#2}{.#2}%
-			}%
-			\CF_arrowf{#7}{#8}{#2}{#5}%
-			\def\CF_nextnodename{#4}%
-			\def\CF_nextnodestyle{#6}%
-		\fi
-	\fi
-	\CF_arrowgobspaces% mange les espaces puis ex\xE9cute \CF_nextaction
-}
-
-\def\CF_arrowgobspaces{\futurelet\CF_toksa\CF_arrowgobspacesa}
-
-\def\CF_arrowgobspacesa{%
-	\CF_ifx\CF_sptoken\CF_toksa
-		\CF_arrowgobspacesb
-		\CF_nextaction
-}
-
-\expandafter\def\expandafter\CF_arrowgobspacesb\space{\futurelet\CF_toksa\CF_arrowgobspacesa}
-
-\def\CF_arrowf#1#2#3#4{% #1=angle   #2=longueur    #3=ancre d\xE9part   #4=ancre arriv\xE9e
-	\def\CF_nextaction{\let\CF_compound\empty\CF_schemestartc}%
-	\def\CF_arrowcurrentangle{#1}\CF_doifempty\CF_arrowcurrentangle{\let\CF_arrowcurrentangle\CF_arrowangle}%
-	\def\CF_currentarrowlength{#2}\CF_doifempty\CF_currentarrowlength{\let\CF_currentarrowlength\CF_arrowlength}%
-	\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep),cyan,fill](end at arrow@i@\number\CF_schemenest){};%
-	\edef\CF_arrowendname{end at arrow@i@\number\CF_schemenest\CF_doifnotempty{#4}{.#4}}%
-	\ifboolKV[chemfig]{scheme debug}
-		{\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_arrowoffset),red,fill](start at arrow){};%
-		\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep-\CF_arrowoffset),red,fill](end at arrow){};%
-		}
-		{\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_arrowoffset)](start at arrow){};%
-		\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep-\CF_arrowoffset)](end at arrow){};%
-		}%
-	\def\CF_arrowstartnode{start at arrow}\def\CF_arrowendnode{end at arrow}%
-	\csname\expandafter\CF_grabarrowname\CF_currentarrowtype[\_nil\CF_threeea\endcsname
-		\expandafter\CF_grabarrowargs\CF_currentarrowtype[]\_nil[][][][][][][][]\_nil
-	\def\CF_currentnodename{end at arrow@i@\number\CF_schemenest}%
-	\edef\CF_nextnodeanchor{\CF_ifempty{#4}{180+\CF_arrowcurrentangle}{#4}}%
-}
-
-% trace un fl\xE8che initi\xE9e par (@nom-- at nom)
-% #1=type de fl\xE8che   #2=nom depart   #3=ancre d\xE9part    #4=nom arriv\xE9e    #5=ancre arriv\xE9e    #6=style fl\xE8che
-\def\CF_directarrow#1#2#3#4#5#6{%
-	\CF_expsecond{\def\CF_arrowstartname}{\CF_gobarg#2}%
-	\CF_expsecond{\def\CF_arrowendname}{\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_arrowoffset](start at direct@arrow)%
-		coordinate[pos=1,xshift=-\CF_arrowoffset](end at direct@arrow);%
-	\def\CF_arrowstartnode{start at direct@arrow}%
-	\def\CF_arrowendnode{end at direct@arrow}%
-	\pgfmathanglebetweenpoints
-		{\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_arrowcurrentangle\pgfmathresult
-	\CF_doifnotempty{#6}{\CF_addtomacro\CF_arrowcurrentstyle{#6,}}%
-	\csname\CF_grabarrowname#1[]\_nil\expandafter\endcsname\CF_grabarrowargs#1[]\_nil[][][][][][][][]\_nil
-}
-
-\def\CF_mergegrabchardir#1[#2][#3]#4\_nil{%
-	\CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_firsttonil#1>\_nil}\_nil
-	\ifx>\CF_toksa
-		\def\CF_mergeangle{0}\def\CF_mergeextreme{xmax}\def\CF_mergesign{+}%
-	\else
-	\ifx<\CF_toksa
-		\def\CF_mergeangle{180}\def\CF_mergeextreme{xmin}\def\CF_mergesign{-}%
-	\else
-	\ifx^\CF_toksa
-		\def\CF_mergeangle{90}\def\CF_mergeextreme{ymax}\def\CF_mergesign{+}%
-	\else
-	\ifx v\CF_toksa
-		\def\CF_mergeangle{-90}\def\CF_mergeextreme{ymin}\def\CF_mergesign{-}%
-	\fi\fi\fi\fi
-	\def\CF_mergelabelup{#2}\def\CF_mergelabeldo{#3}%
-}
-
-\def\CF_merge#1({%
-	\CF_mergegrabchardir#1[][]\_nil
-	\CF_mergea(%
-}
-
-\def\CF_mergea#1--(#2){\CF_testopt{\CF_mergeb#1--(#2)}{}}
-
-\def\CF_mergeb#1--(#2)[#3]{%
-	\CF_displaycompound{}{}%
-	\CF_parsemergeopt#3,\CF_quark,\CF_quark,\CF_quark\_nil
-	\def\CF_mergexmax{-16383.99999pt}\let\CF_mergeymax\CF_mergexmax
-	\def\CF_mergexmin{16383.99999pt}\let\CF_mergeymin\CF_mergexmin
-	\CF_mergeparsenodelist#1(\relax)% calcule les maxi des positions
-	\pgfmathsetmacro\CF_mergeextremeresult{\csname CF_merge\CF_mergeextreme\endcsname\CF_mergesign\CF_mergefromcoeff*\CF_compoundsep}%
-	\CF_mergec#1(\relax)% trace les lignes entre les noeuds pr\xE9c\xE9dents et la ligne de jonction
-	\CF_expsecond{\def\CF_temp}{\expandafter[\CF_mergestyle,shorten <=0,shorten >=0,-]}%
-	\if x\expandafter\CF_firsttonil\CF_mergeextreme\_nil
-		\CF_addtomacro\CF_temp{(\CF_mergeextremeresult pt,\CF_mergeymax)--(\CF_mergeextremeresult pt,\CF_mergeymin)}%
-	\else
-		\CF_addtomacro\CF_temp{(\CF_mergexmin,\CF_mergeextremeresult pt)--(\CF_mergexmax,\CF_mergeextremeresult pt)}%
-	\fi
-	\expandafter\draw\CF_temp node[pos=\CF_mergesplitcoeff](merge at point){}% trace la ligne de jonction
-		node[at=(merge at point),shift=(\CF_mergeangle:\CF_compoundsep*\CF_mergetocoeff-\CF_arrowoffset)](end at merge){}%
-		node[at=(merge at point),shift=(\CF_mergeangle:\CF_compoundsep*\CF_mergetocoeff)](end at merge@i){};%
-	\let\CF_arrowcurrentangle\CF_mergeangle
-	\CF_expafter{\draw[}\CF_mergestyle,shorten <=0](merge at point)--(end at merge)%
-		\expandafter\CF_arrowdisplaylabela\expandafter{\CF_mergelabelup}{.5}+\expandafter\CF_arrowdisplaylabela\expandafter{\CF_mergelabeldo}{.5}-;%
-	\def\CF_currentnodename{end at merge@i}%
-	\let\CF_temp\empty
-	\CF_analysearrowarg{#2}%
-	\expandafter\CF_merged\CF_temp\_nil
-}
-
-\def\CF_mergec(#1){%
-	\if\relax\expandafter\noexpand\CF_firsttonil#1\_nil
-	\else
-		\CF_ifdot{#1}%
-			{\edef\merge_currentnodename{\CF_beforedot#1\_nil}%
-			\edef\merge_currentanchor{\CF_afterdot#1\_nil}%
-			}%
-			{\def\merge_currentnodename{#1}%
-			\let\merge_currentanchor\CF_mergeangle
-			}%
-		\if x\expandafter\CF_firsttonil\CF_mergeextreme\_nil
-			\pgfextracty\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
-			\CF_expafter{\draw[}\CF_mergestyle,shorten >=0,-]([shift=(\CF_mergeangle:\CF_arrowoffset)]\merge_currentnodename.\merge_currentanchor)--(\CF_mergeextremeresult pt,\CF_dim);%
-		\else
-			\pgfextractx\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
-			\CF_expafter{\draw[}\CF_mergestyle,shorten >=0,-]([shift=(\CF_mergeangle:\CF_arrowoffset)]\merge_currentnodename.\merge_currentanchor)--(\CF_dim,\CF_mergeextremeresult pt);%
-		\fi
-		\expandafter\CF_mergec
-	\fi
-}
-
-\def\CF_merged#1.#2[#3]\_nil{%
-	\def\CF_nextnodename{#1}%
-	\edef\CF_nextnodeanchor{%
-		\CF_ifempty{#2}
-			{180+\CF_mergeangle}
-			{#2}%
-		}%
-	\def\CF_nextnodestyle{#3}%
-	\let\CF_compound\empty
-	\CF_schemestartc
-}
-
-\def\CF_parsemergeopt#1,#2,#3,#4\_nil{%
-	\CF_ifempty{#1}
-		{\def\CF_mergefromcoeff{0.5}}
-		{\def\CF_mergefromcoeff{#1}}%
-	\def\CF_mergetocoeff{0.5}%
-	\def\CF_mergesplitcoeff{0.5}%
-	\CF_eexpsecond{\def\CF_mergestyle}{\useKV[chemfig]{arrow head}}%
-	\CF_iffirsttokmatch\CF_quark{#2\relax}
-		{}
-		{\CF_ifempty{#2}
-			{\def\CF_mergetocoeff{0.5}}
-			{\def\CF_mergetocoeff{#2}}%
-		\CF_iffirsttokmatch\CF_quark{#3\relax}
-			{}
-			{\CF_ifempty{#3}
-				{\def\CF_mergesplitcoeff{0.5}}
-				{\def\CF_mergesplitcoeff{#3}}%
-			\CF_iffirsttokmatch\CF_quark{#4\relax}
-				{}
-				{\CF_parsemergeopta#4\_nil}%
-			}%
-		}%
-}
-
-\def\CF_parsemergeopta#1,\CF_quark#2\_nil{%
-	\CF_ifempty{#1}
-		{}
-		{\CF_addtomacro\CF_mergestyle{,#1}}%
-}
-
-\def\CF_mergeparsenodelist(#1){%
-	\if\relax\expandafter\noexpand\CF_firsttonil#1\_nil
-	\else
-		\CF_ifdot{#1}%
-			{\edef\merge_currentnodename{\CF_beforedot#1\_nil}\edef\merge_currentanchor{\CF_afterdot#1\_nil}}%
-			{\def\merge_currentnodename{#1}\let\merge_currentanchor\CF_mergeangle}%
-		\pgfextractx\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
-		\ifdim\CF_dim>\CF_mergexmax
-			\edef\CF_mergexmax{\the\CF_dim}%
-		\fi
-		\ifdim\CF_dim<\CF_mergexmin
-			\edef\CF_mergexmin{\the\CF_dim}%
-		\fi
-		\pgfextracty\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
-		\ifdim\CF_dim>\CF_mergeymax
-			\edef\CF_mergeymax{\the\CF_dim}%
-		\fi
-		\ifdim\CF_dim<\CF_mergeymin
-			\edef\CF_mergeymin{\the\CF_dim}%
-		\fi
-		\expandafter\CF_mergeparsenodelist
-	\fi
-}
-
-\def\CF_grabarrowname#1[#2\_nil{\detokenize{CF_arrow(#1)}}
-\def\CF_grabarrowargs#1[#2\_nil{[#2}
-
-\def\CF_makeparametertext#1{%
-	\toks0{}%
-	\CF_cntgroup#1\relax
-	\CF_makeparametertexta1%
-}
-
-\def\CF_makeparametertexta#1{%
-	\unless\ifnum#1>\CF_cntgroup
-		\toks0\expandafter{\the\toks0[###1]}%
-		\expandafter\CF_makeparametertexta\expandafter{\number\numexpr#1+1\expandafter}%
-	\fi
-}
-
-% #1 est le nombre d'arguments optionnels, #2 est le nom et #3 le code
-\def\definearrow#1#2#3{%
-	\begingroup
-		\CF_makeparametertext{#1}%
-	\expandafter\endgroup
-	\expandafter\def\csname\detokenize{CF_arrow(#2)}\expandafter\endcsname\the\toks0{#3\CF_gobtonil}%
-}
-
-\def\CF_ifdot#1{\CF_ifdota#1.\_nil}
-\def\CF_ifdota#1.#2\_nil{\ifx\empty#2\empty\expandafter\CF_execsecond\else\expandafter\CF_execfirst\fi}
-\def\CF_beforedot#1.#2\_nil{#1}
-\def\CF_afterdot#1.#2\_nil{#2}
-
-\def\CF_rotatenode*#1#2\_nil{%
-	\CF_ifdot{#1}
-		{\CF_beforedot#1\_nil}
-		{#1}%
-}
-\def\CF_anchornode*#1#2\_nil#3{%
-	\CF_ifdot{#1}
-		{\CF_afterdot#1\_nil}
-		{\CF_arrowcurrentangle-#390-#1}%
-}
-
-% #1 = label  #2 = position  #3 = + ou - (au dessus ou au dessous)  #4 : nom du noeud de d\xE9part
-% #5 = label  #6 = position  #7 = + ou - (au dessus ou au dessous)  #8 : nom du noeud de fin
-\def\CF_arrowdisplaylabel#1#2#3#4#5#6#7#8{%
-	\CF_doifnotempty{#1#5}
-		{\path(#4)--(#8)\CF_arrowdisplaylabela{#1}{#2}{#3}\CF_arrowdisplaylabela{#5}{#6}{#7};}%
-}
-
-\def\CF_arrowdisplaylabela#1#2#3{%
-	\CF_doifnotempty{#1}
-		{\if*\expandafter\CF_firsttonil\detokenize{#1}\_nil
-			\ifboolKV[chemfig]{scheme debug}
-				{node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep,draw,fill,cyan](shifted at node){}%
-				node[draw,rotate=\CF_rotatenode#1\_nil,anchor=\CF_anchornode#1\_nil#3,at=(shifted at node)]{\expandafter\CF_gobarg\CF_gobarg#1}%
-				}
-				{node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep](shifted at node){}%
-				node[rotate=\CF_rotatenode#1\_nil,anchor=\CF_anchornode#1\_nil#3,at=(shifted at node)]{\expandafter\CF_gobarg\CF_gobarg#1}%
-				}%
-		\else
-			\ifboolKV[chemfig]{scheme debug}
-				{node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep,draw,fill,cyan](shifted at node){}%
-				node[draw,pos=#2,anchor=-#390,sloped,yshift=#3\CF_arrowlabelsep]{#1}%
-				}
-				{node[pos=#2,anchor=-#390,sloped,yshift=#3\CF_arrowlabelsep]{#1}%
-				}
-		\fi
-		}%
-}
-
-% pose des noeuds d\xE9cal\xE9s de la dimension #1 \xE0 (\CF_arrowstartnode) et (\CF_arrowendnode)
-\def\CF_arrowshiftnodes#1{%
-	\unless\ifdim\CF_ifempty{#1}\CF_zero{#1}=0pt
-		\edef\CF_temp{%
-			\noexpand\path(\CF_arrowstartnode)--(\CF_arrowendnode)%
-			node[pos=0,sloped,yshift=#1](\CF_arrowstartnode1){}node[pos=1,sloped,yshift=#1](\CF_arrowendnode1){};}%
-		\CF_temp
-		\edef\CF_arrowstartnode{\CF_arrowstartnode1}\edef\CF_arrowendnode{\CF_arrowendnode1}%
-	\fi
-}
-
-\definearrow3{->}{%
-	\CF_arrowshiftnodes{#3}%
-	\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode);%
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
-}
-
-\definearrow3{<-}{%
-	\CF_arrowshiftnodes{#3}%
-	\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowendnode)--(\CF_arrowstartnode);%
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
-}
-
-\definearrow5{-/>}{%
-	\CF_arrowshiftnodes{#3}%
-	\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)%
-		coordinate[midway,shift=(\CF_arrowcurrentangle:-1pt)](midway at i)%
-		coordinate[midway,shift=(\CF_arrowcurrentangle:1pt)](midway at ii)%
-		coordinate[at=(midway at i),shift=(\CF_ifempty{#4}{225}{#4+180}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line at start)%
-		coordinate[at=(midway at i),shift=(\CF_ifempty{#4}{45}{#4}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line at end)%
-		coordinate[at=(midway at ii),shift=(\CF_ifempty{#4}{225}{#4+180}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line at start@i)%
-		coordinate[at=(midway at ii),shift=(\CF_ifempty{#4}{45}{#4}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line at end@i);
-	\draw(line at start)--(line at end);%
-	\draw(line at start@i)--(line at end@i);%
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
-}
-
-\definearrow3{<->}{%
-	\CF_arrowshiftnodes{#3}%
-	\CF_expafter{\draw[}\CF_arrowcurrentstyle,\CF_arrowtip-\CF_arrowtip](\CF_arrowstartnode)--(\CF_arrowendnode);%
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
-}
-
-\definearrow3{<=>}{%
-	\CF_arrowshiftnodes{#3}%
-	\path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
-			node[pos=0,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u0){}%
-			node[pos=0,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d0){}%
-			node[pos=1,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u1){}%
-			node[pos=1,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d1){};%
-	\begingroup
-		\ifboolKV[chemfig]{arrow double harpoon}
-			{\pgfarrowharpoontrue}
-			{}%
-		\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
-		\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
-	\endgroup
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode%
-}
-
-\definearrow3{<->>}{%
-	\CF_arrowshiftnodes{#3}%
-	\path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
-			node[pos=0,sloped,yshift=1pt](\CF_arrowstartnode @u0){}%
-			node[pos=\CF_arrowdoubleposstart,sloped,yshift=-1pt](\CF_arrowstartnode @d0){}%
-			node[pos=1,sloped,yshift=1pt](\CF_arrowstartnode @u1){}%
-			node[pos=\CF_arrowdoubleposend,sloped,yshift=-1pt](\CF_arrowstartnode @d1){};%
-	\begingroup
-		\ifboolKV[chemfig]{arrow double harpoon}
-			{\pgfarrowharpoontrue}
-			{}%
-		\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
-		\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
-	\endgroup
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode%
-}
-
-\definearrow3{<<->}{%
-	\path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
-			node[pos=\CF_arrowdoubleposstart,sloped,yshift=1pt](\CF_arrowstartnode @u0){}%
-			node[pos=0,sloped,yshift=-1pt](\CF_arrowstartnode @d0){}%
-			node[pos=\CF_arrowdoubleposend,sloped,yshift=1pt](\CF_arrowstartnode @u1){}%
-			node[pos=1,sloped,yshift=-1pt](\CF_arrowstartnode @d1){};%
-	\begingroup
-		\ifboolKV[chemfig]{arrow double harpoon}
-			{\pgfarrowharpoontrue}
-			{}%
-		\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
-		\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
-	\endgroup
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
-}
-
-\definearrow30{%
-	\CF_arrowshiftnodes{#3}%
-	\CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
-}
-
-\definearrow5{-U>}{%
-	\CF_arrowshiftnodes{#3}%
-	\CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)node[midway](Uarrow at arctangent){};%
-	\CF_ifempty{#4}
-		{\def\CF_Uarrowradius{0.333}}
-		{\def\CF_Uarrowradius{#4}}%
-	\CF_ifempty{#5}%
-		{\def\CF_Uarrowabsangle{60}}
-		{\pgfmathsetmacro\CF_Uarrowabsangle{abs(#5)}}% ne prendre en compte que la valeur absolue de l'angle
-	\edef\CF_temp{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
-	\expandafter\draw\CF_temp (Uarrow at arctangent)%
-		arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Uarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Uarrowabsangle]node(Uarrow at start){};
-	\edef\CF_temp{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}}]}%
-	\expandafter\draw\CF_temp (Uarrow at arctangent)%
-		arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Uarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=\CF_Uarrowabsangle]node(Uarrow at end){};
-	\pgfmathsetmacro\CF_temp{\CF_Uarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
-	\ifdim\CF_Uarrowradius pt>0pt
-		\CF_arrowdisplaylabel{#1}{0}\CF_temp{Uarrow at start}{#2}{1}\CF_temp{Uarrow at end}%
-	\else
-		\CF_arrowdisplaylabel{#2}{0}\CF_temp{Uarrow at start}{#1}{1}\CF_temp{Uarrow at end}%
-	\fi
-}
-
-\def\CF_grabdelim#1#2#3\_nil{\def\CF_leftdelim{#1}\def\CF_rightdelim{#2}}
-\def\CF_resetdelim{%
-	\setKVdefault[CFdelimiters]
-		{delimiters  =(),
-		 height      =10pt,
-		 depth       =,
-		 open xshift =0pt,
-		 close xshift=,
-		 indice      =n}%
-}
-
-\CF_resetdelim
-
-\def\polymerdelim{\CF_ifnextchar[{\CF_polymerdelima}{\CF_polymerdelima[]}}
-\def\CF_polymerdelima[#1]#2#3{%
-	\CF_resetdelim
-	\CF_doifnotempty{#1}{\setKV[CFdelimiters]{#1}}%
-	\expandafter\expandafter\expandafter\CF_grabdelim\useKV[CFdelimiters]{delimiters}()\_nil
-	\edef\CF_delimheight{\the\dimexpr\useKV[CFdelimiters]{height}}%
-	\CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{depth}}
-		{\let\CF_delimdepth\CF_delimheight}
-		{\edef\CF_delimdepth{\the\dimexpr\useKV[CFdelimiters]{depth}}}%
-	\edef\CF_delimhalfdim{\the\dimexpr(\CF_delimheight+\CF_delimdepth)/2}%
-	\edef\CF_delimvshift {\the\dimexpr(\CF_delimheight-\CF_delimdepth)/2}%
-	\edef\CF_leftdelimxshift{\the\dimexpr\useKV[CFdelimiters]{open xshift}}%
-	\CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{close xshift}}
-		{\edef\CF_rightdelimxshift{\the\dimexpr-\useKV[CFdelimiters]{open xshift}}}
-		{\edef\CF_rightdelimxshift{\the\dimexpr-\useKV[CFdelimiters]{close xshift}}}%
-	\chemmove{%
-		\nulldelimiterspace0pt
-		\pgfextractx\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_leftdelimx{\the\CF_dim}%
-		\pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_leftdelimy{\the\CF_dim}%
-		\pgfextractx\CF_dim{\pgfpointanchor{#3}{center}}\edef\CF_rightdelimx{\the\CF_dim}%
-		\node[at={(\CF_leftdelimx+\CF_leftdelimxshift,\CF_leftdelimy+\CF_delimvshift)}]
-			{$\left\CF_leftdelim\vrule height\CF_delimhalfdim depth\CF_delimhalfdim width0pt\right.$};%
-		\node[at={(\CF_rightdelimx+\CF_rightdelimxshift,\CF_leftdelimy+\CF_delimvshift)}]
-			{$\left.\vrule height\CF_delimhalfdim depth\CF_delimhalfdim width0pt\right\CF_rightdelim
-				\CF_eexpsecond\CF_doifnotempty{\useKV[CFdelimiters]{indice}}
-					{\CF_underscore{\rlap{$\scriptstyle\useKV[CFdelimiters]{indice}$}}}
-			$};
-	}%
-}
-
-\catcode`\@11
-\pgfdeclarearrow{%
-	name = CF,%
-	defaults = {%
-		length  = 3pt 5 1,%
-		width'  = 0pt .8,%
-		inset'  = 0pt .5,%
-		line width = 0pt 1 1,%
-		round%
-	},%
-	setup code = {%
-		% Cap the line width at 1/4th distance from inset to tip
-		\pgf at x\pgfarrowlength
-		\advance\pgf at x by-\pgfarrowinset
-		\pgf at x.25\pgf at x
-		\ifdim\pgf at x<\pgfarrowlinewidth\pgfarrowlinewidth\pgf at x\fi
-		% Compute front miter length:
-		\pgfmathdivide@{\pgf at sys@tonumber\pgfarrowlength}{\pgf at sys@tonumber\pgfarrowwidth}%
-		\let\pgf at temp@quot\pgfmathresult%
-		\pgf at x\pgfmathresult pt%
-		\pgf at x\pgfmathresult\pgf at x%
-		\pgf at x4\pgf at x%
-		\advance\pgf at x by1pt%
-		\pgfmathsqrt@{\pgf at sys@tonumber\pgf at x}%
-		\pgf at xc\pgfmathresult\pgfarrowlinewidth% xc is front miter
-		\pgf at xc.5\pgf at xc
-		\pgf at xa\pgf at temp@quot\pgfarrowlinewidth% xa is extra harpoon miter
-		% Compute back miter length:
-		\pgf at ya.5\pgfarrowwidth%
-		\csname pgfmathatan2@\endcsname{\pgfmath at tonumber\pgfarrowlength}{\pgfmath at tonumber\pgf at ya}%
-		\pgf at yb\pgfmathresult pt%
-		\csname pgfmathatan2@\endcsname{\pgfmath at tonumber\pgfarrowinset}{\pgfmath at tonumber\pgf at ya}%
-		\pgf at ya\pgfmathresult pt%
-		\advance\pgf at yb by-\pgf at ya%
-		\pgf at yb.5\pgf at yb% half angle in yb
-		\pgfmathtan@{\pgf at sys@tonumber\pgf at yb}%
-		\pgfmathreciprocal@{\pgfmathresult}%
-		\pgf at yc\pgfmathresult\pgfarrowlinewidth%
-		\pgf at yc.5\pgf at yc%
-		\advance\pgf at ya by\pgf at yb%
-		\pgfmathsincos@{\pgf at sys@tonumber\pgf at ya}%
-		\pgf at ya\pgfmathresulty\pgf at yc% ya is the back miter
-		\pgf at yb\pgfmathresultx\pgf at yc% yb is the top miter
-		\ifdim\pgfarrowinset=0pt
-			\pgf at ya.5\pgfarrowlinewidth% easy: back miter is half linewidth
-		\fi
-		% Compute inset miter length:
-		\pgfmathdivide@{\pgf at sys@tonumber\pgfarrowinset}{\pgf at sys@tonumber\pgfarrowwidth}%
-		\let\pgf at temp@quot\pgfmathresult%
-		\pgf at x\pgfmathresult pt%
-		\pgf at x\pgfmathresult\pgf at x%
-		\pgf at x4\pgf at x%\pgf at ya
-		\advance\pgf at x by1pt%
-		\pgfmathsqrt@{\pgf at sys@tonumber\pgf at x}%
-		\pgf at yc\pgfmathresult\pgfarrowlinewidth% yc is inset miter
-		\pgf at yc.5\pgf at yc% 
-		% Inner length (pgfutil at tempdima) is now arrowlength - front miter - back miter
-		\pgfutil at tempdima\pgfarrowlength%
-		\advance\pgfutil at tempdima by-\pgf at xc%
-		\advance\pgfutil at tempdima by-\pgf at ya%
-		\pgfutil at tempdimb.5\pgfarrowwidth%
-		\advance\pgfutil at tempdimb by-\pgf at yb%
-		% harpoon miter correction
-		\ifpgfarrowroundjoin
-			\pgfarrowssetbackend{\pgf at ya\advance\pgf at x by-.5\pgfarrowlinewidth}%
-		\else
-			\pgfarrowssetbackend{0pt}
-		\fi
-		\ifpgfarrowharpoon
-			\pgfarrowssetlineend{\pgfarrowinset\advance\pgf at x by\pgf at yc\advance\pgf at x by.5\pgfarrowlinewidth}%
-		\else
-			\pgfarrowssetlineend{\pgfarrowinset\advance\pgf at x by\pgf at yc\advance\pgf at x by-.25\pgfarrowlinewidth}%
-			\ifpgfarrowreversed
-				\ifdim\pgfinnerlinewidth>0pt
-					\pgfarrowssetlineend{\pgfarrowinset}%
-				\else
-					\pgfarrowssetlineend{\pgfutil at tempdima\advance\pgf at x by\pgf at ya\advance\pgf at x by-.25\pgfarrowlinewidth}%
-				\fi
-			\fi
-		\fi
-		\ifpgfarrowroundjoin
-			\pgfarrowssettipend{\pgfutil at tempdima\advance\pgf at x by\pgf at ya\advance\pgf at x by.5\pgfarrowlinewidth}%
-		\else
-			\pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf at x by\pgf at xa\fi}%
-		\fi
-		% The hull:
-		\pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf at x by\pgf at xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}%
-		\pgfarrowsupperhullpoint{0pt}{.5\pgfarrowwidth}%
-		\pgfarrowshullpoint{\pgfarrowinset}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else 0pt\fi}%
-		% Adjust inset
-		\pgfarrowssetvisualbackend{\pgfarrowinset}%
-		\advance\pgfarrowinset by\pgf at yc%
-		% The following are needed in the code:
-		\pgfarrowssavethe\pgfutil at tempdima
-		\pgfarrowssavethe\pgfutil at tempdimb
-		\pgfarrowssavethe\pgfarrowlinewidth
-		\pgfarrowssavethe\pgf at ya
-		\pgfarrowssavethe\pgfarrowinset
-	},%
-	drawing code = {%
-		\pgfsetdash{}{0pt}%
-		\ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi
-		\ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{\pgfarrowlinewidth}\fi
-		\pgfpathmoveto{\pgfqpoint{\pgfutil at tempdima\advance\pgf at x by\pgf at ya}{0pt}}%
-		\pgfpathlineto{\pgfqpoint{\pgf at ya}{\pgfutil at tempdimb}}%
-		\pgfpathlineto{\pgfqpoint{\pgfarrowinset}{0pt}}%
-		\ifpgfarrowharpoon \else
-			\pgfpathlineto{\pgfqpoint{\pgf at ya}{-\pgfutil at tempdimb}}%
-		\fi
-		\pgfpathclose
-		\ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt \pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi
-	},%
-	parameters = {%
-		\the\pgfarrowlinewidth,%
-		\the\pgfarrowlength,%
-		\the\pgfarrowwidth,%
-		\the\pgfarrowinset,%
-		\ifpgfarrowharpoon h\fi%
-		\ifpgfarrowopen o\fi%
-		\ifpgfarrowroundjoin j\fi%
-	}%
-}
-\CFrestorecatcode
-\endinput
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%                       H I S T O R I Q U E                      %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-v0.1        2010/06/23
-    - Premi\xE8re version publique sur le CTAN
-----------------------------------------------------------------------
-v0.2        2010/08/31
-    - Ajout de la documentation en anglais.
-    - Correction de bugs.
-    - \printatom est d\xE9sormais une macro publique.
-    - Les espaces sont permis dans les mol\xE9cules. Ils seront
-      ignor\xE9s par d\xE9faut puisque les atomes sont compos\xE9s en
-      mode math par \printatom
-    - Une paire de Lewis peut \xEAtre repr\xE9sent\xE9e ":".
-    - Dans les cycles, une correction de la longueur du trait
-      d\xE9port\xE9 des liaisons doubles est fait de telle sorte que si
-      l'on \xE9crit \chemfig{*5(=====)}, on obtient deux polygones
-      r\xE9guliers concentriques.
-    - La s\xE9quence de contr\xF4le \setnodestyle permet de sp\xE9cifier
-      le style des n?uds dessin\xE9s par tikz.
-----------------------------------------------------------------------
-v0.3        2010/11/21
-    - Am\xE9lioration de \definesubmol qui accepte les s\xE9quences de
-      contr\xF4le. On peut aussi choisir un alias dont la substitution
-      est diff\xE9rente selon l'orientation de la liaison qui lui
-      arrive dessus.
-    - Le caract\xE8re "|" force la fin d'un atome. Si on \xE9crit
-      "D|ef" alors, chemfig verra deux atomes "D" et "ef".
-    - Le caract\xE8re "#" est reconnu lorsqu'il suit un caract\xE8re de
-      liaison. Il doit \xEAtre suivi d'un argument entre parenth\xE8ses
-      qui contient l'offset de d\xE9but et de fin qui s'appliqueront
-      \xE0 cette liaison.
-    - La macro \chemfig admet un argument optionnel qui sera pass\xE9
-      \xE0 l'environnement tikzpicture dans lequel elle est dessin\xE9e
-    - Mise en place de la repr\xE9sentation des m\xE9canismes
-      r\xE9actionnels avec la syntaxe "@{<nom>}" devant un atome o\xF9
-      "@{<nom>,<coeff>}" au tout d\xE9but de l'argument d'une liaison.
-      Cette syntaxe permet de placer un n?ud (au sens de tikz) qui
-      deviendra l'extr\xE9mit\xE9 des fl\xE8ches des m\xE9canismes.
-      Le trac\xE9 des fl\xE8ches est faite par la macro \chemmove dont
-      l'argument optionnel devient celui de l'environnement
-      tikzpicture dans lequel sont faites les fl\xE8ches.
-    - Pour le m\xE9canisme d'alignement vertical via le \vphantom, la
-      commande \chemskipalign permet d'ignorer le groupe d'atomes
-      dans lequel elle est \xE9crite.
-    - La commande \chemname permet d'afficher un nom sous une
-      mol\xE9cule. la commande \chemnameinit initialise la plus grande
-      profondeur rencontr\xE9e.
-    - La commande \lewis a \xE9t\xE9 modifi\xE9e de telle sorte que les
-      dessins des d\xE9corations soient proportionnels \xE0 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 \xE0 jour du manuel en anglais.
-    - Ajout de \vflipnext et \hflipnext pour retourner
-      horizontalement ou verticalement la prochaine mol\xE9cule.
-----------------------------------------------------------------------
-v0.4        2011/03/07
-    - chemfig est d\xE9sormais \xE9crit en plain-etex et donc
-      utilisable par d'autres formats que LaTeX.
-    - Un peu plus de rigueur avec les catcodes des caract\xE8res
-      sp\xE9ciaux, notamment lorsque la commande \chemfig se trouve
-      dans l'argument de \chemmove, \chemabove, \chembelow, \chemrel.
-      TODO : faut-il \scantoker l'argument de \chemfig pour \xEAtre
-      d\xE9finitivement d\xE9barrass\xE9 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\xE9but
-      de mol\xE9cule.
-----------------------------------------------------------------------
-v0.4b       2011/04/24
-    - l'argument de \chemfig est tok\xE9nis\xE9 avec \scantokens ce qui
-      rend caduc tout souci de code de cat\xE9gorie, \xE0 part #.
-    - la commande \setbondstyle permet de d\xE9finir le style des
-      liaisons.
-    - correction de l'affichage incorrect des doubles liaisons dans
-      les cycles apr\xE8s les commandes \hflipnext et \vflipnext
-    - correction d'un bug lorsqu'un alias commence une mol\xE9cule
-----------------------------------------------------------------------
-v1.0       2011/06/15
-    - les sch\xE9mas r\xE9actionnels sont d\xE9sormais disponibles.
-    - \Chemabove et \Chembelow modifient la boite englobante.
-    - \Lewis modifie la boite englobante
-    - les macros \chemleft, \chemright, \chemup et \chemdown
-      affichent des d\xE9limiteurs extensibles \xE0 gauche, \xE0 droite,
-      au dessus et au dessous d'un mat\xE9riel.
-----------------------------------------------------------------------
-v1.0a      2011/09/18
-    - les macros \Lewis et \lewis admettent un argument optionnel
-    - la macro \setlewisdist r\xE8gle la distance entre les 2
-      \xE9lectrons
-----------------------------------------------------------------------
-v1.0b      2011/11/29
-    - la commande \merge est d\xE9sormais prot\xE9g\xE9e entre
-      \schemestart et \schemestop contre des d\xE9finitions par d'autres
-      packages.
-    - \box0 est utilis\xE9 au lieu du maladroit \unhbox0
-----------------------------------------------------------------------
-v1.0c      2011/11/30
-    - la macro \+ n'est plus explicitement \xE9crite
-    - v\xE9rifie que eTeX est le moteur utilis\xE9
-----------------------------------------------------------------------
-v1.0d      2011/12/19
-    - les cercles des cycles \xE9taient trac\xE9s au mauvais moment. La
-      longueur de la liaison qui les pr\xE9c\xE9dait influait sur le
-      rayon du cercle : \chemfig{-[,0.5]**6(------)} donnait un bug
-      \xE0 l'affichage.
-----------------------------------------------------------------------
-v1.0e      2012/01/13
-    - la gestion des espaces dans les groupes d'atomes est
-      d\xE9sormais plus rigoureuse. Plusieurs bugs ont \xE9t\xE9
-      corrig\xE9
-----------------------------------------------------------------------
-v1.0f      2012/02/24
-    - correction d'un bug avec \definesubmol, les catcodes n'\xE9taient
-      pas correctement g\xE9r\xE9s.
-----------------------------------------------------------------------
-v1.0g      2012/11/16
-    - correction d'un bug dans \CF_directarrow pour faire prendre en
-      compte le style des fl\xE8che par d\xE9faut
-    - correction d'un bug dans \CF_lewisc : la boite *doit* \xEAtre
-      compos\xE9e en dehors de l'environnement tikzpicture pour
-      \xE9viter nullfont si jamais \printatom ne passe pas en mode
-      math.
-    - correction d'un bug dans \CF_chemfigc : si une longueur par
-      d\xE9faut est modifi\xE9e par [,<l>] au d\xE9but d'une mol\xE9cule
-      et si des cycles \xE9taient emboit\xE9s, cette longueur n'\xE9tait
-      pas appliqu\xE9e aux sous-cycles.
-    - r\xE9-\xE9criture des macros \chemabove et \chembemow pour
-      prendre en compte le bug (d\xE9sormais corrig\xE9) dans luatex.
-    - nouvelle macro \setstacksep qui d\xE9finit l'espacement par
-      d\xE9faut dans les macros \chemabove et \chembelow.
-----------------------------------------------------------------------
-v1.0h      2013/11/28
-    - \chemname admet maintenant une version \xE9toil\xE9 qui ne tient
-      pas compte des profondeurs pr\xE9c\xE9dentes.
-    - \CF_dpmax est g\xE9r\xE9 globalement.
-    - correction d'un bug dans "-U>" : le style de la fl\xE8che
-      n'\xE9tait pris en compte pour l'arc.
-    - correction d'un bug dans \CF_directarrow : l'angle de la
-      fl\xE8che n'\xE9tait pas calcul\xE9
-----------------------------------------------------------------------
-v1.1       2015/02/13
-    - correction d'un bug dans \CF_seeksubmol : la macro
-      \CF_molecule est d\xE9pouill\xE9 de son \xE9ventuel espace
-      en premi\xE8re position.
-    - correction d'un bug dans \CF_arrowf : le nom du prochain
-      n?ud courant "end at arrow@i" \xE9tait erron\xE9 dans le cas o\xF9 une
-      fl\xE8che contenait un sous sch\xE9ma. Ce nom doit d\xE9pendre de
-      \CF_schemenest.
-    - la jonction entre deux liaisons cons\xE9cutives dans l'axe peut
-      \xEAtre activ\xE9 avec \enablebondjoin et d\xE9sactiv\xE9 avec
-      \disablebondjoin (pr\xE9f\xE9rable, \xE9tat par d\xE9faut).
-    - \chemfig suivi d'une "*" demande \xE0 ce que les liaisons aient
-      une longueur invariable : la distance inter-atome devient donc
-      variable. Cette fonctionnalit\xE9 est d\xE9sactiv\xE9 dans les
-      cycles afin que les polygones soient r\xE9guliers.
-      \enablefixedbondlength permet cette fonctionnalit\xE9 pour
-      toutes les macros \chemfig (m\xEAme non \xE9toil\xE9e) tandis que
-      \disablefixedbondlength le d\xE9sactive.
-----------------------------------------------------------------------
-v1.1a      2015/02/23
-    - correction d'un bug dans \CF_grabbondoffset. Si \chemfig est
-      dans l'argument d'une macro, les # sont doubl\xE9s par l'action
-      de \scantokens de la macro \CF_chemfigb et il faut un
-      argument d\xE9limit\xE9 avant "(" pour absorber tous les #.
-----------------------------------------------------------------------
-v1.2       2015/10/08
-    - correction d'un bug dans le trac\xE9 des liaisons de Cram.
-    - cr\xE9ation de \setangleincrement.
-    - chargement de "arrows.meta" et d\xE9finition de la fl\xE8che "CF"
-      bas\xE9e sur "Stealth" et d\xE9finie avec \pgfdeclarearrow.
-      Les anciennes fl\xE8ches "CF_full" et "CF_half" sont
-      abandonn\xE9es puisque d\xE9finies avec \pgfarrowsdeclare.
-    - fl\xE8che "-U>" corrig\xE9e : le placement des labels est
-      maintenant correct dans tous les cas. Ainsi :
-                         -U>[<a>][<b>][<d>][r][a]
-      place le label <a> pr\xE8s du d\xE9but de la fl\xE8che, quels que
-      soient les signes du rayon r et de l'angle a.
-    - \chemrel, \setchemrel et \chemsign sont supprim\xE9es.
-    - compatibilit\xE9, avec les limitations d'usage, avec la
-      librairie "externalize" : le \begin{tikzpicture} voit
-      d\xE9sormais le \end{tikzpicture} correspondant dans la macro
-      \CF_chemfigb.
-----------------------------------------------------------------------
-v1.2a      2015/10/21
-    - erreur de copier-coller dans le code: une adresse url \xE9tait
-      malencontreusement pr\xE9sente en plein milieu d'une ligne de
-      code
-----------------------------------------------------------------------
-v1.2b      2015/11/15
-    - bug dans \CF_seeksubmol qui laissait "*" dans le flux de
-      lecture de TeX. Un message d'erreur est \xE9galement ajout\xE9
-      en cas de "!" en fin de traitement.
-    - correction d'un bug dans \CF_setbondangle o\xF9 l'angle [<:a>]
-      n'\xE9tait pas \xE9valu\xE9 par \pgfmathsetmacro.
-----------------------------------------------------------------------
-v1.2c      2015/11/20
-    - Correction d'un bug dans \CF_setbondangle : l'angle renvoy\xE9
-      pouvait \xEAtre n\xE9gatif
-    - Correction d'un bug dans \CF_directarrow : la macro \CF_ifempty
-      n'est pas correctement d\xE9velopp\xE9e dans l'argument de
-      \pgfpointanchor
-----------------------------------------------------------------------
-v1.2d      2015/12/01
-    - correction d'un bug dans la fl\xE8che "-U"
-    - la version \xE9toil\xE9e de \setcrambond dessine les liaisons de
-      Cram en pointill\xE9s sous forme de trait large et non pas sous
-      forme de triangle.
-----------------------------------------------------------------------
-v1.2e      2017/05/20
-    - la macro contenant la d\xE9finition d'une fl\xE8che est
-      d\xE9sormais "\CF_arrow(<nom>)", ainsi la macro \0 n'est plus
-      d\xE9finie par \definearrow
-    - remerciements rajout\xE9s apr\xE8s une suppression indue, pour ne
-      froisser aucune susceptibilit\xE9
-----------------------------------------------------------------------
-v1.3       2018/03/08
-    - tous les param\xE8tres sont d\xE9sormais pass\xE9s via \setchemfig qui
-      fait appel \xE0 "simplekv". Par cons\xE9quent, _toutes_ les macros qui
-      r\xE9glaient des param\xE8tres deviennent obsol\xE8tes, \xE0 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\xE9es* dans une future version.
-    - la version \xE9toil\xE9e "\chemfig*" et les deux arguments optionnels
-      de la macro "\chemfig[][]" sont \xE9galement optionnels et seront
-      *supprim\xE9*s dans une future version afin d'acc\xE9der \xE0 la syntaxe
-      \chemfig[cl\xE9s=valeurs]{code}
-    - 6 nouveaux param\xE8tres : "lewis radius", "arrow double sep",
-      "arrow double coeff", "arrow double harpoon", "cycle radius
-      coeff", "arrow head".
-    - correction d'un bug dans \CF_parsemergeopt qui dans certains
-      cas, envoyait vers l'affichage des caract\xE8res
-    - petit toilettage du code
-    - macro \polymerdelim (non document\xE9e) exp\xE9rimentale et encore
-      en phase de tests
-    - suppression d'un registre d'\xE9criture de fichier
-----------------------------------------------------------------------
-v1.31       2018/04/05
-    - correction d'un espace ind\xE9sirable dans \CF_ifnextchar
-----------------------------------------------------------------------
-v1.32       2018/08/23
-    - d\xE9finition de \printatom, \CF_begintikzpicture et 
-      \CF_endtikzpicture dans le fichier t-chemfig.tex
-----------------------------------------------------------------------
-v1.33       2018/10/31
-    - les macros d\xE9finies par \definesubmol peuvent d\xE9sormais avoir un ou
-      plusieurs arguments
-    - macro \polymerdelim document\xE9e
-----------------------------------------------------------------------
-v1.34       2019/02/23
-    - bug dans la fl\xE8che "<->" corrig\xE9
-----------------------------------------------------------------------
-v1.4        2019/04/18
-    - corrections de nombreux bugs
-    - caract\xE8re priv\xE9 "_" et non plus "@" -> modifications \xE0 pr\xE9voir
-      notamment dans la doc avec les codes sp\xE9cifiques aux fl\xE8ches, \xE7a
-      risque de couiner sur tex.stackexchange.com
-    - anciennes macros abandonn\xE9es et d\xE9sormais ind\xE9finies :
-          \setcrambond, \setatomsep, \setbondoffset, \setdoublesep,
-          \setangleincrement, \enablefixedbondlength,
-          \disablefixedbondlength, \setnodestyle, \setbondstyle,
-          \setlewis, \setlewisdist, \setstacksep, \setcompoundstyle,
-          \setarrowdefault, \setandsign, \setarrowoffset,
-          \setcompoundsep, \setarrowlabelsep, \enablebondjoin,
-          \disablebondjoin et \schemedebug
-    - l'ancienne syntaxe \chemfig[][]{} est abandonn\xE9e et n'est plus
-      accept\xE9e, d\xE9sormais c'est 
-      \chemfig[<cl\xE9s>=<valeurs>]{<code mol\xE9cule>}
-    - l'ancienne syntaxe \lewis[<coeff>] ou \Lewis[<coeff>] n'est
-      plus accept\xE9e au profit de \lewis[<cl\xE9s>=<valeurs>]
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/chemfig/chemfig.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/chemfig/chemfig.tex	2020-05-21 21:45:57 UTC (rev 55228)
+++ trunk/Master/texmf-dist/tex/generic/chemfig/chemfig.tex	2020-05-21 21:46:14 UTC (rev 55229)
@@ -4,9 +4,9 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                    %
 \def\CFname                    {chemfig}                             %
-\def\CFver                       {1.53}                              %
+\def\CFver                       {1.54}                              %
 %                                                                    %
-\def\CFdate                   {2020/04/27}                           %
+\def\CFdate                   {2020/05/21}                           %
 %                                                                    %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
@@ -33,8 +33,10 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%                       P R \xC9 A L A B L E                        %%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\csname CFloadonce\endcsname
+\let\CFloadonce\endinput
 %-------------------------- Annonce package --------------------------
-\ifdefined\ProvidesPackage\else
+\ifdefined\CFfromsty\else
 	\immediate\write -1 {%
 	Package: \CFname\space\CFdate\space\space v\CFver\space\space
 	Draw molecule with an easy syntax (CT)}%
@@ -60,8 +62,8 @@
 	\endgroup
 	\ifx\__tempa\__tempb\else
 		\CF_error{#2}%
-		\def\CF_temp{#3}%
-		\CFrestorecatcode\expandafter\CF_temp
+		\def\CF_temp{\CFrestorecatcode#3}%
+		\expandafter\CF_temp
 	\fi
 }
 \CF_checkprimitive\eTeXversion
@@ -68,8 +70,8 @@
 	{You are not using an eTeX engine, \CFname\space cannot work.}
 	{\endinput}%
 \CF_checkprimitive\expanded
-	{the \string\expanded\space primitive is not provided by your TeX engine, \CFname\space v\CFver\space cannot work: loading \CFname\space v1.4}
-	{\input chemfigold.tex\relax\endinput}%
+	{the \string\expanded\space primitive is not provided by your TeX engine, \CFname\space cannot work.}
+	{\endinput}%
 
 %------------------------ Chargement simplekv ------------------------
 \input simplekv.tex
@@ -1751,7 +1753,7 @@
 \def\charge_d#1={%
 	\CF_ifx\CF_quark{#1}%
 		{}
-		{\CF_striplastsp{#1}\charge_e}=%
+		{\CF_striplastsp{#1}\charge_e=}% bugfix 1.54
 }
 \def\charge_e#1={%
 	\CF_ifinstr{#1}[
@@ -3075,4 +3077,8 @@
 v1.53       2020/04/27
     - mise \xE0 jour en fonction des nouvelles fonctionnalit\xE9s de
       l'extension simplekv
-    - bug : \CF_ifzerodim interrompt maintenant le trac\xE9 dans la \hbox
\ No newline at end of file
+    - bug : \CF_ifzerodim interrompt maintenant le trac\xE9 dans la \hbox
+----------------------------------------------------------------------
+v1.54       2020/05/21
+    - chemfig ne peut plus fonctionner sans \expanded
+    - bug : un signe "=" laiss\xE9 par erreur dans le flux
\ No newline at end of file



More information about the tex-live-commits mailing list.