From 189140b53960215eec1626503040fb38360ab4ed Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sun, 28 Feb 2021 03:01:24 +0000
Subject: CTAN sync 202102280301

---
 macros/generic/chemfig/chemfig.tex | 196 +++++++++++++------------------------
 1 file changed, 70 insertions(+), 126 deletions(-)

(limited to 'macros/generic/chemfig/chemfig.tex')

diff --git a/macros/generic/chemfig/chemfig.tex b/macros/generic/chemfig/chemfig.tex
index 6c743b24e3..76761ab317 100644
--- a/macros/generic/chemfig/chemfig.tex
+++ b/macros/generic/chemfig/chemfig.tex
@@ -4,9 +4,9 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                    %
 \def\CFname                    {chemfig}                             %
-\def\CFver                       {1.56}                              %
+\def\CFver                       {1.6}                               %
 %                                                                    %
-\def\CFdate                   {2020/07/13}                           %
+\def\CFdate                   {2021/02/26}                           %
 %                                                                    %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
@@ -17,17 +17,17 @@
 % 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-2020                         |
+% Copyright  : Christian Tellechea 2010-2021                         |
 % 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                                 |
+%              3) README                                             |
+%              4) chemfig_doc_fr.tex                                 |
+%              5) chemfig_doc_fr.pdf                                 |
+%              6) chemfig_doc_en.tex                                 |
+%              7) chemfig_doc_fr.pdf                                 |
+%              8) lewis.tex                                          |
 %--------------------------------------------------------------------
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -92,13 +92,12 @@
 \newif\ifCF_definesubmol
 \newif\ifCF_adjustnamedp
 \newif\ifCF_macrofixedbondlength
-\newif\ifCF_lewisoverlay
+\newif\ifCF_compound_is_chemfig
 
 \newdimen\CF_dim
 \newdimen\CF_arrowsize
 \newdimen\CF_zero \CF_zero=0pt
 
-\newbox\CF_boxlewis
 \newbox\CF_box
 \newbox\CF_boxstuff
 \newbox\CF_testbox
@@ -277,9 +276,11 @@
 	\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}}}%
+		\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}}}%
+		\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%
@@ -368,13 +369,6 @@
 	angle increment     = \CF_defifempty\CF_angleincrement     {#1}{45},
 	node style          = \def\CF_nodestyle                    {#1},
 	bond style          = \def\CF_bondstyle                    {#1},
-	lewis | width       = \CF_defifempty\CF_lewiswidthdouble   {#1}{0.3ex},
-	lewis sep           = \CF_defifempty\CF_lewisoffset        {#1}{0.4ex},
-	lewis length        = \CF_defifempty\CF_lewislength        {#1}{1.5ex},
-	lewis style         = \def\CF_lewisstyle                   {#1},
-	lewis dist          = \CF_defifempty\CF_lewisdist          {#1}{0.3em},
-	lewis radius        = \CF_defifempty\CF_lewisradius        {#1}{0.15ex},
-	lewis diag coeff    = \CF_defifempty\CF_lewisdiagcoeff     {#1}{1},
 	cycle radius coeff  = \CF_defifempty\CF_cycleradiuscoeff   {#1}{0.75},
 	stack sep           = \CF_defifempty\CF_stacksep           {#1}{1.5pt},
 	compound style      = \def\CF_defaultcompoundstyle         {#1},
@@ -408,15 +402,11 @@
 	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,
+	autoreset cntcycle  = true,
+	show cntcycle       = false,
+	debug               =false,
 	scheme debug        = false,
 	compound style      = {},
 	compound sep        = 5em,
@@ -432,8 +422,6 @@
 	+ sep left          = 0.5em,
 	+ sep right         = 0.5em,
 	+ vshift            = 0pt,
-	autoreset cntcycle  = true,
-	show cntcycle       = false,
 }%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1365,7 +1353,7 @@
 	\global\advance\CF_cntgroup1
 	\let\CF_currentatom\empty
 	\global\let\CF_hookdrawlist\empty
-	\CF_cntatomgroup0
+	\CF_cntatomgroup0 % est le nombre d'atome dans le groupe que va calculer \CF_drawatomgroupa
 	\CF_iffirsttokmatch{#3}?
 		{\CF_drawatomgroupa{{}#3}}
 		{\CF_drawatomgroupa{#3}}%
@@ -1422,7 +1410,12 @@
 			\let\CF_moveatomname\empty
 			}
 			{}%
-		\CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+		\ifboolKV[chemfig]{debug}
+			{\CF_expafter{\node[}\CF_optstring,draw=gray](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+			\CF_show_debug_atom
+			}
+			{\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}%
@@ -1446,13 +1439,31 @@
 			\let\CF_moveatomname\empty
 			}
 			{}%
-		\CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+		\ifboolKV[chemfig]{debug}
+			{\CF_expafter{\node[}\CF_optstring,draw=gray](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+			\CF_show_debug_atom
+			}
+			{\CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+			}%
 	\repeat
+	\ifboolKV[chemfig]{debug}
+		\CF_show_debug_atomgroup
+		{}%
 	\CF_hookdrawall
 	\edef\CF_lastgroupnumber{\number\CF_cntgroup}%
 	\let\CF_previousatomgroup\CF_currentatomgroup
 }
 
+\def\CF_show_debug_atom{%
+	\node[at=(n\number\CF_cntgroup-\number\CF_cntatom.south),anchor=north,outer sep=1pt,overlay]{$\scriptscriptstyle\color{gray}\number\CF_cntatom$};%
+}
+
+\def\CF_show_debug_atomgroup{%
+	\draw[red,overlay] ([xshift=-.5pt,yshift=.5pt]n\number\CF_cntgroup-1.north west) rectangle ([xshift=.5pt,yshift=-.5pt]n\number\CF_cntgroup-\number\CF_cntatomgroup.south east);%
+	\path (n\number\CF_cntgroup-1.north west) -- (n\number\CF_cntgroup-\number\CF_cntatomgroup.north east)
+		node [midway,yshift=1pt,overlay] {$\scriptscriptstyle\color{red}\number\CF_cntgroup$};
+}
+
 \def\CF_keepmovearg @#1#2\_nil{\def\CF_currentatom{@{#1}}}
 
 \def\CF_drawatomgroupa#1{% transforme #1 en un groupe d'atomes
@@ -1785,95 +1796,6 @@
 	\charge_d
 }
 
-\def\Lewis{%
-	\CF_warning{\string\Lewis\space is unmaintained and is likely to be removed in a near future. Please, use \string\Charge.}%
-	\CF_lewisoverlayfalse
-	\CF_testopt\CF_lewisa{}%
-}
-
-\def\lewis{%
-	\CF_warning{\string\lewis\space is unmaintained and is likely to be removed in a near future. Please, use \string\charge.}%
-	\CF_lewisoverlaytrue
-	\CF_testopt\CF_lewisa{}%
-}
-
-\def\CF_lewisa[#1]{%
-	\begingroup
-		\CF_doifnotempty{#1}{\setchemfig{#1}}%
-		\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)
-		\CF_ifinsidetikz
-			{\pgfinterruptpicture
-			\let\CF_atendoflewis\endpgfinterruptpicture
-			}
-			{\let\CF_atendoflewis\relax
-			}%
-	\tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
-		\CF_makeother;\CF_makeother:%
-		\node(CF_lewis@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@anchor){\box\CF_boxlewis};%
-	\endtikzpicture
-	\CF_atendoflewis
-}
-
 \def\Chembelow{\begingroup\let\CF_temp\CF_gobarg\CF_chembelowa}
 
 \def\chembelow{\begingroup\let\CF_temp\CF_id\CF_chembelowa}
@@ -2074,20 +1996,34 @@
 	\CF_iffirsttokina{\arrow\schemestop\merge}%
 		{}
 		{\CF_ifx\CF_toksa\bgroup
-			{\CF_addnextarg
+			{\ifCF_compound_is_chemfig% bugfix 1.6
+				\edef\CF_restore_hashcatcode{\catcode\number`\#=\number\catcode`\# \relax}%
+				\catcode`\#12 % TODO ou carrément mettre # à 12 dans tout l'environnement ?
+			\fi
+			\CF_addnextarg
 			}
 			{\CF_ifx\CF_toksa\CF_sptoken
 				{\CF_addtomacro\CF_compound{ }%
 				\CF_schemestartd
 				}
-				{\afterassignment\CF_schemestartc
+				{\CF_ifx\CF_toksa\chemfig
+					\CF_compound_is_chemfigtrue% mettre le flag à vrai
+					{}%
+				\afterassignment\CF_schemestartc
 				\CF_addtomacro\CF_compound
 				}%
 			}%
 		}%
 }
 
-\def\CF_addnextarg#1{\CF_addtomacro\CF_compound{{#1}}\CF_schemestartc}
+\def\CF_addnextarg#1{%
+	\CF_addtomacro\CF_compound{{#1}}%
+	\ifCF_compound_is_chemfig% bugfix 1.6
+		\CF_restore_hashcatcode
+		\CF_compound_is_chemfigfalse% mettre le flag à faux
+	\fi
+	\CF_schemestartc
+}
 
 \def\CF_displaycompound#1#2{% #1 = nom et #2 = style
 	\CF_doifnotempty\CF_compound
@@ -3088,7 +3024,7 @@ v1.53       2020/04/27
 v1.54       2020/05/21
     - chemfig ne peut plus fonctionner sans \expanded
     - bug : un signe "=" laissé par erreur dans le flux
-    ----------------------------------------------------------------------
+----------------------------------------------------------------------
 v1.55       2020/06/15
     - chemfig est incompatible avec conTeXt, vu que ce moteur redéfinit
       des primitives telles que \expanded, \unexpanded et peut être
@@ -3096,4 +3032,12 @@ v1.55       2020/06/15
 ----------------------------------------------------------------------
 v1.56       2020/07/13
     - le centre des cycles est désormais accessible via un noeud
-      spécifique pour chacun d'eux.
\ No newline at end of file
+      spécifique pour chacun d'eux.
+----------------------------------------------------------------------
+v1.6        2021/02/26
+    - les macros des formules de Lewis sont retirées et placées dans
+      le fichier séparé "lewis.tex" que l'utilisateur peut charger
+      s'il le souhaite
+    - ajout d'une clé <debug> pour le trousseau [chemfig]
+    - à l'intérieur d'un schéma, le token '#' est permis dans
+      l'argument de \chemfig
-- 
cgit v1.2.3

