diff options
author | Norbert Preining <norbert@preining.info> | 2023-12-29 03:01:31 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-12-29 03:01:31 +0000 |
commit | a5ae3453af00d8ec9eb8bf64151fc4c8bcb18021 (patch) | |
tree | 49722f55b01f8ce69a0cd1c783383e40bdb53473 /macros/generic/chemfig/chemfig.tex | |
parent | 8806b2d6c55426cb0ba19311d2acf7c4f522a291 (diff) |
CTAN sync 202312290301
Diffstat (limited to 'macros/generic/chemfig/chemfig.tex')
-rw-r--r-- | macros/generic/chemfig/chemfig.tex | 105 |
1 files changed, 92 insertions, 13 deletions
diff --git a/macros/generic/chemfig/chemfig.tex b/macros/generic/chemfig/chemfig.tex index f3f78f3968..b9531d51ef 100644 --- a/macros/generic/chemfig/chemfig.tex +++ b/macros/generic/chemfig/chemfig.tex @@ -4,9 +4,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \def\CFname {chemfig} % -\def\CFver {1.6e} % +\def\CFver {1.66} % % % -\def\CFdate {2023/06/30} % +\def\CFdate {2023/12/28} % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -110,6 +110,7 @@ \newif\ifCF_compound_is_chemfig \newdimen\CF_dim +\newdimen\CF_turnangle \newdimen\CF_arrowsize \newdimen\CF_zero \CF_zero=0pt @@ -991,6 +992,9 @@ \let\CF_defaulttoatom\empty% numéro de l'atome où arrivent les laisons par défaut \let\CF_defaulttikz\empty \let\CF_previousbondangle\empty + \def\CF_previousbondtype{0}% + \def\CF_previousnode{}% + \def\CF_previous_offset{0pt}% \let\CF_joinbond\CF_zero \let\CF_previoustikz\empty \everyeof{\_nil}\endlinechar-1 @@ -1329,7 +1333,10 @@ \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}}% + \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}% @@ -1343,6 +1350,36 @@ \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 + \ifboolKV[chemfig]{bond join}% nouveau v1.66 + {% + \scope + \expandafter\tikzset\expandafter{\CF_currentbondstyle}% + \ifnum\CF_previousbondtype=5 + \ifnum0\ifdim\CF_startoffset=0pt 1\fi\ifdim\CF_previous_offset=0pt 1\fi=11 + \CF_ifzerodim\CF_previousatomgroup + {% + \CF_turnangle=\CF_compute_turnangle{\CF_previousbondangle}{\CF_currentangle}% + \pgfmathsetmacro\CF_cram_overlap{\CF_crambasewidth*cos(\CF_turnangle)-\pgflinewidth}% + \ifdim\CF_cram_overlap pt>0pt + \CF_warning{Cram base too wide to join}% + \else + \ifdim\CF_turnangle>0pt % si on tourne à gauche + \fill(#2@@)--(\CF_previousnode@@2)--([shift=(\CF_currentangle-90:\pgflinewidth/2)]#2@@)--cycle; + \else + \fill(#2@@)--(\CF_previousnode@@1)--([shift=(\CF_currentangle+90:\pgflinewidth/2)]#2@@)--cycle; + \fi + \fi + } + {% + }% + \fi + \fi + \expandafter + \endscope + \expanded{\def\noexpand\CF_simplebondwidth{\the\dimexpr\pgflinewidth}}% récupère l'épaisseur de ligne si une liaison ">" est à suivre + } + {% + }% \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe \or% 2 = liaison double \ifCF_in_cycle @@ -1393,13 +1430,40 @@ \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; + \or% 4 = liaison Cram pleine de #2 vers #3 : > + \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{\pgflinewidth/2}% + \CF_ifzerodim\CF_previousatomgroup% nouveau v1.66 + {% + \ifnum\ifboolKV[chemfig]{bond join}10\ifdim\CF_startoffset=0pt 1\fi\ifdim\CF_previous_offset=0pt 1\fi=111 + \ifnum\CF_previousbondtype=1 + \CF_turnangle=\CF_compute_turnangle{\CF_previousbondangle}{\CF_currentangle}% + \pgfmathsetmacro\CF_cram_overlap{\CF_crambasewidth*cos(\CF_turnangle)-\CF_simplebondwidth}% + \ifdim\CF_cram_overlap pt>0pt + \CF_warning{Cram base too wide to join}% + \else + \CF_expafter{\fill[}\CF_currentbondstyle](#2@@1)--([shift=(\CF_previousbondangle\ifdim\CF_turnangle>0pt -\else+\fi90:\CF_simplebondwidth/2)]\CF_previousnode@@)--(#2@@2)--cycle;% + \fi + \else + \ifnum\CF_previousbondtype=5 + \CF_turnangle=\CF_compute_turnangle{\CF_previousbondangle}{\CF_currentangle}% + \CF_expafter{\fill[}\CF_currentbondstyle](#2@@1)--([shift=(\CF_previousbondangle\ifdim\CF_turnangle>0pt -\else+\fi90:\CF_crambasewidth/2)]\CF_previousnode@@)--(#2@@2)--cycle;% + \fi + \fi + \fi + } + {% + }% + \ifboolKV[chemfig]{bond join} + {\CF_expafter{\fill[}}% pas de contour si liaisons jointes + {\CF_expafter{\filldraw[}} + \CF_currentbondstyle](#2@@1)--(#2@@2)--(#3@@2)--(#3@@1)--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; + \or% 5 = liaison Cram pleine de #2 vers #3 : < + \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{\pgflinewidth/2}% + \ifboolKV[chemfig]{bond join} + {\CF_expafter{\fill[}}% pas de contour si liaisons jointes + {\CF_expafter{\filldraw[}} + \CF_currentbondstyle](#2@@2)--(#2@@1)--(#3@@1)--(#3@@2)--cycle; \let\CF_joinbond\CF_zero \or% 6 = liaison Cram pointillée de #2 vers #3 \scope @@ -1427,10 +1491,20 @@ \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_previous_offset\CF_endoffset \let\CF_endoffset\empty \let\CF_previoustikz\CF_currenttikz \let\CF_previousbondangle\CF_previousangle - \def\CF_previousbond{#1}% + \edef\CF_previousnode{#3}% +} + +\def\CF_compute_turnangle#1#2{% + \expandafter\CF_compute_turnangle_a\the\dimexpr #2pt-#1pt\relax\_nil +} +\def\CF_compute_turnangle_a#1\_nil{% + \dimexpr#1 + \ifdim#1<-180pt +360pt\else + \ifdim#1>180pt -360pt\fi\fi\relax } \def\CF_drawaxisbondnojoin#1#2{\CF_drawbonda(#1@@)--(#2@@);} @@ -1513,7 +1587,7 @@ \CF_drawbonda(#1@@)--(#2@@); \fi \else - \CF_drawbonda(#1@@)--(#2@@); + \CF_drawbonda(#1@@)--(#2@@);% \fi }% \fi @@ -1669,6 +1743,7 @@ \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écule : annulation de la correction d'angle \CF_drawbond\CF_bondtype{\CF_bondoutnode}{n\number\CF_cnt_group-\number\CF_cnt_atom}\CF_previousatomgroup\CF_currentatomgroup + \let\CF_previousbondtype\CF_bondtype \fi \def\CF_lastaction{1}% met la dernière action à 1 : affichage d'un noeud \loop @@ -3218,7 +3293,7 @@ v0.2 2010/08/31 l'on écrit \chemfig{*5(=====)}, on obtient deux polygones réguliers concentriques. - La séquence de contrôle \setnodestyle permet de spécifier - le style des n?uds dessinés par tikz. + le style des noeuds dessinés par tikz. ---------------------------------------------------------------------- v0.3 2010/11/21 - Amélioration de \definesubmol qui accepte les séquences de @@ -3554,4 +3629,8 @@ v1.6d 2023/02/18 ---------------------------------------------------------------------- v1.6e 2023/06/30 - nouvelle clé "baseline" pour régler finement l'alignement - vertical d'une molécule
\ No newline at end of file + vertical d'une molécule +---------------------------------------------------------------------- +v1.66 2023/12/28 + - les liaisons de Cram pleines sont jointes entre elles ou aux + liaisons simples lorsque "bond join" est vrai
\ No newline at end of file |