summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-07-01 03:01:25 +0000
committerNorbert Preining <norbert@preining.info>2023-07-01 03:01:25 +0000
commit3a29216caca37803e25b84a50fd5f7f91ebc04d3 (patch)
tree45c329c33b2bc8601810e0983b3590448a3279ec /macros
parent711112a97f2a98854236304a216213632d61eeb7 (diff)
CTAN sync 202307010301
Diffstat (limited to 'macros')
-rw-r--r--macros/generic/chemfig/README4
-rw-r--r--macros/generic/chemfig/chemfig-en.pdfbin714456 -> 716706 bytes
-rw-r--r--macros/generic/chemfig/chemfig-en.tex42
-rw-r--r--macros/generic/chemfig/chemfig-fr.pdfbin727414 -> 731831 bytes
-rw-r--r--macros/generic/chemfig/chemfig-fr.tex44
-rw-r--r--macros/generic/chemfig/chemfig.tex35
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md18
-rw-r--r--macros/latex/contrib/l3kernel/README.md9
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx36
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin622937 -> 621778 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1722473 -> 1721348 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin558322 -> 558186 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin152121 -> 151983 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx23
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx9
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin395887 -> 395889 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin122712 -> 122711 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin150674 -> 150675 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin148700 -> 148704 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin114586 -> 114591 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin112483 -> 112487 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin151568 -> 151569 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin128313 -> 128317 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin163457 -> 163456 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin250136 -> 250127 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin150283 -> 150282 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin170073 -> 170069 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin204998 -> 204992 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3pdf.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin81695 -> 81695 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296641 -> 296500 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin243276 -> 243147 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin218435 -> 218307 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx9
-rw-r--r--macros/latex/contrib/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx105
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7358891 -> 7363399 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/source3body.tex7
-rw-r--r--macros/latex/contrib/naive-ebnf/naive-ebnf.dtx49
-rw-r--r--macros/latex/contrib/naive-ebnf/naive-ebnf.pdfbin591999 -> 631010 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-code.dtx87
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-code.pdfbin911018 -> 912191 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin581333 -> 581086 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex77
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin596415 -> 596800 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.tex75
-rw-r--r--macros/luatex/generic/blopentype/LICENSE21
-rw-r--r--macros/luatex/generic/blopentype/README.md15
-rw-r--r--macros/luatex/generic/blopentype/blopentype.md36
-rw-r--r--macros/luatex/generic/blopentype/luatex/blot-fonts.lua19
-rw-r--r--macros/luatex/generic/blopentype/luatex/blot.tex8
106 files changed, 553 insertions, 303 deletions
diff --git a/macros/generic/chemfig/README b/macros/generic/chemfig/README
index b3ec8d1b81..035b0b045a 100644
--- a/macros/generic/chemfig/README
+++ b/macros/generic/chemfig/README
@@ -2,9 +2,9 @@ ___________________________________
The
Chemfig package
- v1.6d
+ v1.6e
- 2023/02/18
+ 2023/06/30
___________________________________
Maintainer: Christian Tellechea
diff --git a/macros/generic/chemfig/chemfig-en.pdf b/macros/generic/chemfig/chemfig-en.pdf
index e4de3cc058..1b8d9d2ca8 100644
--- a/macros/generic/chemfig/chemfig-en.pdf
+++ b/macros/generic/chemfig/chemfig-en.pdf
Binary files differ
diff --git a/macros/generic/chemfig/chemfig-en.tex b/macros/generic/chemfig/chemfig-en.tex
index a5c68c4b6f..a6a640256f 100644
--- a/macros/generic/chemfig/chemfig-en.tex
+++ b/macros/generic/chemfig/chemfig-en.tex
@@ -240,6 +240,9 @@ The values (empty by default) contained in these two keys are executed at the ve
For example, we can write \verb|schemestart code=\chemnameint{}| to reset the name depth at the beginning of each reaction scheme.
+\subsection{Key "baseline"}
+The value passed to this key sets the vertical position of the molecule. See page~\pageref{baseline}.
+
\section{Presenting \protect\CF}
To use this package, start by adding the following code to the preamble:
\begin{itemize}
@@ -294,6 +297,7 @@ Here is the complete list of parameters as well as their default values\label{li
\CFparam{angle increment}
\CFparam{node style}
\CFparam{bond style}
+ \CFparam{baseline}
\CFparam{debug}
\CFparam{cycle radius coeff}
\CFparam{stack sep}
@@ -355,6 +359,8 @@ It is important to understand that the placement of the entire molecule depends
\chemfig{-B}\qquad
\chemfig{A^1-B}/
+To set an arbitrary vertical offset or place a group of atoms on the baseline, use the \chevrons{baseline} key (see page~\pageref{baseline}).
+
\section{Different types of bonds}
For \CF, bonds between two atoms are one of nine types, represented by the characters \boxedfalseverb-, \boxedfalseverb=, \boxedfalseverb~, \boxedfalseverb>, \boxedfalseverb<, \boxedfalseverb{>:}, \boxedfalseverb{<:}, \boxedfalseverb{>|} and \boxedfalseverb{<|} :\label{types.liaisons}
\begin{center}
@@ -1142,12 +1148,6 @@ Except in cases where the character "\verb|#|" is followed by a number between 1
In this example, only \verb|#1| and \verb|#2| are understood as the arguments of the sub molecule \verb|\X|. The other "\verb|#|" are displayed as they are in the molecule (case of \verb|#3| and \verb|#4|) or understood as the character specifying the fine adjustment of the offset of the bonds.
\section{Placement of Atoms}
-\subsection{First Atom}\label{premieratome}
-As explained on page~\pageref{first atom}, the first atom encountered (whether empty or not) is the one that is placed on the baseline, represented in gray on the examples of this manual. The choice of this first atom thus conditions the placement of all the others and often influences the placement of the whole molecule.
-
-\exemple{First atom}/\chemfig{H-[7]C(-[5]H)=C(-[1]H)-[7]H}\qquad
-\chemfig{C(-[3]H)(-[5]H)=C(-[1]H)-[7]H}/
-
\subsection{Groups of atoms}\label{placementatomes}
In a group of atoms, the atoms are placed one after the other in a well-established order:
\begin{itemize}
@@ -1171,6 +1171,35 @@ In the example below whose code would be "\verb|\chemfig{A[:-60,,,3]BCDEF}|" the
\chemfig{A-[:-60,,,3]\0{B}{5}|\0{C}{4}|\0{D}{1}|\0{E}{2}|\0{F}{3}}
\end{center}
+\subsection{Vertical alignment}\label{baseline}
+The \CFkey{baseline} is used to finely control the vertical placement of the molecule in relation to the baseline of the current paragraph.
+
+It is set to \CFval{0pt} by default, and in this case, the first atom encountered (whether empty or not) is the one placed on the baseline of the current paragraph, shown in gray on the examples in this manual. The choice of this first atom therefore conditions the placement of all the others, and often influences the placement of the entire molecule.
+
+\exemple{First atom}/\chemfig{H-[7]C(-[5]H)=C(-[1]H)-[7]H}\qquad
+\chemfig{C(-[3]H)(-[5]H)=C(-[1]H)-[7]H}/
+
+An arbitrary dimension can be specified to vertically shift the molecule by this value with the syntax \CFkv{baseline}{dimension}:
+
+\exemple{Vertical shift}/\chemfig{A(-[:-60]-[:30]C)-[:45]B}\qquad
+\chemfig[baseline=5pt]{A(-[:-60]-[:30]C)-[:45]B}\qquad
+\chemfig[baseline=-5pt]{A(-[:-60]-[:30]C)-[:45]B}/
+
+With the syntax \CFkv{baseline}{(name)} (the name must be in parentheses), we specify that the baseline of the molecule is at the node named \chevrons{name}. The name of the atom can be the one assigned automatically by \CF (of the form \Verb|n<a>-<b>|) or a name given by the user using the syntax \Verb|@{<name >}| (see page~\pageref{mecanismes-reactionnels}).
+
+\exemple*{Alignment on atoms}/Default alignment : \chemfig{A(-[:-60]-[:30]C)-[:45]B}\medbreak
+Alignment on B: \chemfig[baseline=(b.base)]{A(-[:-60]-[:30]C)-[:45]@{b}B}\medbreak
+Alignment on empty atom: \chemfig[baseline=(vide)]{A(-[:-60]@{vide}-[:30]C)-[:45]B}\medbreak
+Alignment on C: \chemfig[baseline=(c.base)]{A(-[:-60]-[:30]@{c}C)-[:45]B}/
+
+It is possible to name \TIKZ nodes. Thus, if we want to vertically center several molecules on the current baseline, we set \CFkey{baseline} to \CFval{(current bounding box.center)}.
+
+\exemple*{Centered Alignment}/1) \chemfig{A-[:-45]B} et 2) \chemfig{B-[:45]C}\bigbreak
+
+\setchemfig{baseline=(current bounding box.center)}% vertical centering of the following molecules
+1) \chemfig{A-[:-45]B} et 2) \chemfig{B-[:45]C}
+\setchemfig{baseline=0pt}% back to default value/
+
\subsection{Bonds between atoms}\label{liaisonentreatomes}
A bond starting from an atom would, if extended, pass through the centre of its bounding box. The atom placed at the end of the bond has its center of its bounding box is in the extension of the bond. Therefore, a bond between two atoms extends through the centers of their bounding boxes, as shown in this example:
\begin{center}
@@ -2446,6 +2475,7 @@ The commands created by \CF are:
\item \CFkv{cycle radius coeff} {0.75}: shrinkage ratio of the circle or arc inside cycles
\item \CFkv{stack sep} {1.5pt}: vertical gap between arguments of \verb-\chemabove- and \verb-\chembelow- macros
\item \CFkv{show cntcycle} {false}: show rings numbers
+ \item \CFkv{baseline} {0pt}: dimension or name of node to set the vertical position
\item \CFkv{debug} {false}: show atoms ans groups of atoms
\item \CFkv{autoreset cntcycle} {true}: reset ring counter at \verb|\chemfig| execution
\item \CFkv{compound style} {{}}: style of compounds
diff --git a/macros/generic/chemfig/chemfig-fr.pdf b/macros/generic/chemfig/chemfig-fr.pdf
index 0de1a1679d..78f90d47e2 100644
--- a/macros/generic/chemfig/chemfig-fr.pdf
+++ b/macros/generic/chemfig/chemfig-fr.pdf
Binary files differ
diff --git a/macros/generic/chemfig/chemfig-fr.tex b/macros/generic/chemfig/chemfig-fr.tex
index 18001f3619..9250e57d17 100644
--- a/macros/generic/chemfig/chemfig-fr.tex
+++ b/macros/generic/chemfig/chemfig-fr.tex
@@ -240,6 +240,9 @@ Les valeurs, vides par défaut, contenues dans ces deux clés sont exécutées a
On peut, par exemple, écrire «\verb|schemestart code=\chemnameint{}|» pour réinitialiser la profondeur des noms au début de chaque schéma réactionnel.
+\subsection{Clé «baseline»}
+La valeur passée à cette clé permet de contrôler la position verticale de la molécule tracée par rapport à la ligne de base. Voir page~\pageref{baseline}.
+
\section{Présentation}
Pour charger \CF, il faut écrire :
\begin{itemize}
@@ -294,6 +297,7 @@ Voici la liste exhaustive des paramètres ainsi que leurs valeurs par défaut\la
\CFparam{angle increment}
\CFparam{node style}
\CFparam{bond style}
+ \CFparam{baseline}
\CFparam{debug}
\CFparam{cycle radius coeff}
\CFparam{stack sep}
@@ -355,6 +359,8 @@ Il est important de comprendre que le placement de la molécule entière dépend
\chemfig{-B}\qquad
\chemfig{A^1-B}/
+Pour spécifier un décalage vertical arbitraire ou placer sur la ligne de base un groupe d'atome, il faut utiliser la clé \CFkey{baseline} (voir page~\pageref{baseline}).
+
\section{Différents types de liaisons}
Pour \CF, les liaisons entre 2 atomes sont de 9 types, correspondant aux caractères \boxedfalseverb-, \boxedfalseverb=, \boxedfalseverb~, \boxedfalseverb>, \boxedfalseverb<, \boxedfalseverb{>:}, \boxedfalseverb{<:}, \boxedfalseverb{>|} et \boxedfalseverb{<|} :\label{types.liaisons}
\begin{center}
@@ -425,7 +431,7 @@ Ce marqueur doit se situer \emph{immédiatement} après le signe de liaison et d
\chemfig{A-#(,0pt)B-#(0pt)C}/
\endgroup
-Par défaut, tous les atomes se trouvant dans les groupes d'atomes sont composés en mode mathématique (les espaces sont ignorés). Ils peuvent donc contenir des caractères propres à ce mode comme la mise en indice ou en exposant\footnote{Il existe un problème de placement des groupes d'atomes contenant des exposants ou des indices. Voir page~\pageref{alignement.vertical}.}:
+Par défaut, tous les atomes se trouvant dans les groupes d'atomes sont composés en mode mathématique (les espaces sont ignorés). Ils peuvent donc contenir des caractères propres à ce mode comme la mise en indice ou en exposant\footnote{Il existe un problème de placement des groupes d'atomes contenant des exposants ou des indices.}:
\exemple{Mode mathématique}|\chemfig{A_1B^2-C _ 3 ^ 4}|
Il existe des réglages spécifiques aux liaisons de Cram:
@@ -1142,12 +1148,6 @@ En dehors des cas où le caractère «\verb|#|» est suivi d'un chiffre compris
Dans cet exemple, seuls \verb|#1| et \verb|#2| sont compris comme les arguments de la sous molécule \verb|\X|. Les autres «\verb|#|» sont affichés tels quels dans la molécule (cas de \verb|#3| et \verb|#4|) ou compris comme le caractère spécifiant le réglage fin du retrait des liaisons.
\section{Placement des atomes}
-\subsection{Premier atome}\label{premieratome}
-Comme expliqué à la page~\pageref{premieratome1}, le premier atome rencontré (qu'il soit vide ou pas) est celui qui est placé sur la ligne de base, représentée en gris sur les exemples de ce manuel. Le choix de ce premier atome conditionne donc le placement de tous les autres relativement à lui et influe souvent sur le placement de la molécule toute entière.
-
-\exemple{Premier atome}/\chemfig{H-[7]C(-[5]H)=C(-[1]H)-[7]H}\qquad
-\chemfig{C(-[3]H)(-[5]H)=C(-[1]H)-[7]H}/
-
\subsection{Groupe d'atomes}\label{placementatomes}
Dans un groupe d'atomes, les atomes sont placés les uns après les autres, dans un ordre bien établi:
\begin{itemize}
@@ -1171,6 +1171,35 @@ Dans l'exemple ci-dessous dont le code serait «\verb|\chemfig{A[:-60,,,3]BCDEF}
\chemfig{A-[:-60,,,3]\0{B}{5}|\0{C}{4}|\0{D}{1}|\0{E}{2}|\0{F}{3}}
\end{center}
+\subsection{Alignement vertical}\label{baseline}
+La clé \CFkey{baseline} permet de contrôler finement le placement vertical de la molécule par rapport à la ligne de base du paragraphe en cours.
+
+Elle vaut \CFval{0pt} par défaut et dans ce cas, le premier atome rencontré (qu'il soit vide ou pas) est celui qui est placé sur la ligne de base du paragraphe en cours, représentée en gris sur les exemples de ce manuel. Le choix de ce premier atome conditionne donc le placement de tous les autres relativement à lui et influe souvent sur le placement de la molécule toute entière.
+
+\exemple{Premier atome}/\chemfig{H-[7]C(-[5]H)=C(-[1]H)-[7]H}\qquad
+\chemfig{C(-[3]H)(-[5]H)=C(-[1]H)-[7]H}/
+
+On peut spécifier une dimension arbitraire pour décaler verticalement la molécule de cette valeur avec la syntaxe \CFkv{baseline}{dimension} :
+
+\exemple{Décalage vertical}/\chemfig{A(-[:-60]-[:30]C)-[:45]B}\qquad
+\chemfig[baseline=5pt]{A(-[:-60]-[:30]C)-[:45]B}\qquad
+\chemfig[baseline=-5pt]{A(-[:-60]-[:30]C)-[:45]B}/
+
+Avec la syntaxe \CFkv{baseline}{(nom)} (le nom doit se trouver entre parenthèses), on spécifie que la ligne de base de la molécule est sur le nœud nommé \chevrons{nom} Le nom de l'atome peut être celui attribué automatiquement par \CF (de la forme \Verb|n<a>-<b>|) ou bien un nom donné par l'utilisateur par la syntaxe \Verb|@{<nom>}| (voir page~\pageref{mecanismes-reactionnels}).
+
+\exemple*{Alignement sur des atomes}/Alignement par défaut : \chemfig{A(-[:-60]-[:30]C)-[:45]B}\medbreak
+Alignement sur B : \chemfig[baseline=(b.base)]{A(-[:-60]-[:30]C)-[:45]@{b}B}\medbreak
+Alignement sur atome vide : \chemfig[baseline=(vide)]{A(-[:-60]@{vide}-[:30]C)-[:45]B}\medbreak
+Alignement sur C : \chemfig[baseline=(c.base)]{A(-[:-60]-[:30]@{c}C)-[:45]B}/
+
+Il est possible de nommer de nœuds de \TIKZ. Ainsi, si l'on veut centrer verticalement plusieurs molécules sur la ligne de base courante, met la valeur \CFval{(current bounding box.center)} dans la clé \CFkey{baseline}.
+
+\exemple*{Alignement centré}/1) \chemfig{A-[:-45]B} et 2) \chemfig{B-[:45]C}\bigbreak
+
+\setchemfig{baseline=(current bounding box.center)}% centrage vertical de toutes les molécules
+1) \chemfig{A-[:-45]B} et 2) \chemfig{B-[:45]C}
+\setchemfig{baseline=0pt}% retour à la valeur par défaut/
+
\subsection{Liaisons entre atomes}\label{liaisonentreatomes}
Une liaison partant d'un atome passerait, si on la prolongeait, par le centre de sa boite englobante. L'atome d'arrivée est placé au bout de la liaison de telle sorte que le centre de sa boite englobante soit dans le prolongement de la liaison. Par conséquent, une liaison entre deux atomes passe, par prolongement, par les centres de leurs boites englobantes, comme l'illustre cet exemple:
\begin{center}
@@ -2446,6 +2475,7 @@ Les commandes créées par \CF sont :
\item \CFkv{cycle radius coeff} {0.75}: coefficient du cercle ou de l'arc de cercle tracé dans les cycles
\item \CFkv{stack sep} {1.5pt}: espacement vertical pour les arguments des macros \verb-\chemabove- et \verb-\chembelow-
\item \CFkv{show cntcycle} {false}: affichage des numéros des cycles
+ \item \CFkv{baseline} {0pt}: dimension ou nom du nœud pour régler la position verticale
\item \CFkv{debug} {false}: affichage des atomes et des groupes d'atomes
\item \CFkv{autoreset cntcycle} {true}: remise à 0 du compteur de cycles à chaque exécution de \verb|\chemfig|
\item \CFkv{compound style} {{}}: style des composés
diff --git a/macros/generic/chemfig/chemfig.tex b/macros/generic/chemfig/chemfig.tex
index 8dfc68592a..f3f78f3968 100644
--- a/macros/generic/chemfig/chemfig.tex
+++ b/macros/generic/chemfig/chemfig.tex
@@ -4,9 +4,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
\def\CFname {chemfig} %
-\def\CFver {1.6d} %
+\def\CFver {1.6e} %
% %
-\def\CFdate {2023/02/18} %
+\def\CFdate {2023/06/30} %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -71,7 +71,9 @@
\def\CF_warning#1{\immediate\write-1{Package \CFname\space Warning: #1^^J}}
\def\CF_checkprimitive#1#2{% Vérifie que #1 est une primitive et sinon, émet le message #2 et exécute \endinput
\begingroup
- \edef\__tempa{\meaning#1}\edef\__tempb{\string#1}\expandafter
+ \edef\__tempa{\meaning#1}%
+ \edef\__tempb{\string#1}%
+ \expandafter
\endgroup
\ifx\__tempa\__tempb\else
\CF_error{#2}%
@@ -414,6 +416,7 @@
\def\CF_defifempty#1#2#3{\CF_ifempty{#2}{\def#1{#3}}{\def#1{#2}}}
\defKV[chemfig]{%
atom style = \def\CF_atomstyle {#1},
+ baseline = \CF_defifempty\CF_baseline {#1}{0pt},% nouveau v 1.6e
chemfig style = \def\CF_chemfigstyle {#1},
cram width = \CF_defifempty\CF_crambasewidth {#1}{1.5ex},
cram dash width = \CF_defifempty\CF_cramdashlength {#1}{1pt},
@@ -444,6 +447,7 @@
\def\resetchemfig{\restoreKV[chemfig]}
\setKVdefault[chemfig]{%
atom style = {},% code tikz mis à la fin de every node/.style
+ baseline = {0pt},% nouveau v 1.6e
chemfig style = {},% code tikz mis à la fin de l'arugment optionnel de \tikzpicture
bond join = false,
fixed length = false,
@@ -941,19 +945,19 @@
minimum size=0pt,%
\unexpanded\expandafter{\CF_atomstyle}%
},%
- baseline,%
+ baseline=\CF_baseline,%
\unexpanded\expandafter{\CF_chemfigstyle}%
]%
}%
\begingroup% \endgroup rajouté en sortie de tracé par \CF_chemfigd
\let\CF_hooklist\empty
\ifboolKV[chemfig]{fixed length}
- {%
- \CF_macro_fixed_bond_lengthtrue
- }
- {%
- \CF_macro_fixed_bond_lengthfalse
- }%
+ {%
+ \CF_macro_fixed_bond_lengthtrue
+ }
+ {%
+ \CF_macro_fixed_bond_lengthfalse
+ }%
\ifboolKV[chemfig]{bond join}
{%
\let\CF_drawaxisbond\CF_drawaxisbondjoin
@@ -1154,7 +1158,7 @@
\CF_ifx*\CF_toksa% un cycle ?
{%
\ifnum\CF_lastaction=2
- \def\CF_currentfromatom{1}% Bugfix 1.6e
+ \def\CF_currentfromatom{1}% Bugfix 1.6d
\CF_insertemptygroup\CF_molecule% insère un groupe vide
\else
\ifCF_in_cycle
@@ -1171,7 +1175,8 @@
\expandafter\CF_parsecyclepreamblewithoptarg\CF_molecule\_nil% \begingroup inclus
}%
{%
- \def\CF_cycle_arcstartangle{0}\def\CF_cycle_arcendangle{360}%
+ \def\CF_cycle_arcstartangle{0}%
+ \def\CF_cycle_arcendangle{360}%
\let\CF_cycle_arcdirecttikz\empty
\expandafter\CF_parsecyclepreamble\CF_molecule\_nil% \begingroup inclus
}%
@@ -3545,4 +3550,8 @@ v1.6d 2023/02/18
réactionnels
- correction d'un bug : \CF_currentfromatom n'était pas
initialisé au début d'un cycle et donc le code suivant plantait
- \chemfig{AB-[,,2]*3(---)} \ No newline at end of file
+ \chemfig{AB-[,,2]*3(---)}
+----------------------------------------------------------------------
+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
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index 1be2493081..68e4090e09 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,20 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2023-06-30]
+
+### Added
+- `\codepoint_to_category:n`
+
+### Changed
+- Drop notes about slow `\expanded` emulation. `\expanded` is required since
+ release 2023-05-15
+- Sync engine/primitive requirements in `expl3.dtx` with code and README
+
+### Fixed
+- Case changing of Greek characters with complex NFD representation (issue \#1236)
+- Error recovery when wrongly applying abs to a tuple (issue \#1238)
+
## [2023-06-16]
### Changed
@@ -18,7 +32,6 @@ this project uses date-based 'snapshot' version identifiers.
- Expand (partial) paths in `\l_file_search_path_seq` and `\input@path`
(see latex3/latex2e\#1086)
-
## [2023-06-05]
### Added
@@ -1463,7 +1476,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-06-16...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2023-06-30...HEAD
+[2023-06-30]: https://github.com/latex3/latex3/compare/2023-06-16...2023-06-30
[2023-06-16]: https://github.com/latex3/latex3/compare/2023-06-05...2023-06-16
[2023-06-05]: https://github.com/latex3/latex3/compare/2023-05-22...2023-06-05
[2023-05-22]: https://github.com/latex3/latex3/compare/2023-05-15...2023-05-22
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 28b328f366..9ac444ab9a 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2023-06-16
+Release 2023-06-30
Overview
--------
@@ -59,12 +59,11 @@ XeTeX from the 2019 TeX Live release, and has always been available in LuaTeX
(some by Lua emulation). The Japanese pTeX and upTeX gained all of the above
(except `\ifincsname`) for TeX Live 2019 `\ifincsname` for TeX Live 2020.
-At present, the `\expanded` primitive is emulated if unavailable. This code is
-slow and imposes some coding restrictions. As such, it will be *removed* for TeX
-Live 2022.
+Starting from release 2023-05-15, the `\expanded` primitive is *required*.
+Its slow emulation has been removed.
In addition to the above, engines which are fully Unicode-compatible
-must provde the functionality of the following primitives, documented in the
+must provide the functionality of the following primitives, documented in the
LuaTeX manual
- `\Uchar`
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index d95bda9fa9..31a8946103 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2023-06-16}%
+\def\ExplFileDate{2023-06-30}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -658,10 +658,9 @@
% text of an~\tn{edef}, and the expansion is passed to the function as
% a braced token list. Expansion takes place until only unexpandable
% tokens are left. |x|-type arguments cannot be nested.
-% \item[e] Fully-expanded token or braced token list which does
-% not require doubled |#| tokens. This expansions is very similar
-% to |x|-type but may be nested and does not require that |#|
-% tokens are doubled.
+% \item[e] Fully-expanded token or braced token list.\\
+% This expansion is very similar to |x|-type but may be nested and does
+% not require that |#| tokens are doubled. It uses \tn{expanded} primitive.
% \item[f] Expanding the first token recursively in a braced token
% list.\\ Almost the same as the |x| type except here the token list
% is expanded fully until the first unexpandable token is found and
@@ -965,27 +964,16 @@
% \section{Engine/primitive requirements}
%
% To use \pkg{expl3} and the higher level packages provided by the
-% team, the minimal set of primitive requirements is currently
-% \begin{itemize}
-% \item All of those from \TeX90.
-% \item All of those from \eTeX{} \emph{excluding} |\TeXXeTstate|,
-% |\beginL|, |\beginR|, |\endL| and |\endR| (\emph{i.e.}~excluding
-% \TeX{}-\kern0pt-\reflectbox{\TeX{}}).
-% \item Functionality equivalent to the \pdfTeX{} primitive
-% |\pdfstrcmp|.
-% \end{itemize}
-% Any engine which defines |\pdfoutput| (\emph{i.e.}~allows direct production
-% of a PDF file without a DVI intermediate) must also provide |\pdfcolorstack|,
-% |\pdfliteral|, |\pdfmatrix|, |\pdfrestore| and |\pdfsave| or equivalent
-% functionality. Fully Unicode engines must provide a method for producing
-% character tokens in an expandable manner.
+% team, the minimal set of primitive requirements is currently described
+% in \href{README.md}{README.md}.
%
% Practically, these requirements are met by the engines
% \begin{itemize}
-% \item \pdfTeX{} v1.40 or later.
-% \item \XeTeX{} v0.99992 or later.
-% \item \LuaTeX{} v0.95 or later.
-% \item e-(u)\pTeX{} mid-2012 or later.
+% \item \pdfTeX{} v1.40.20 or later.
+% \item \XeTeX{} v0.999991 or later.
+% \item \LuaTeX{} v1.10 or later.
+% \item e-(u)\pTeX{} v3.8.2 or later.
+% \item Prote (2021) or later.
% \end{itemize}
%
% Additional modules beyond the core of \pkg{expl3} may require additional
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index cdb6b5dd99..67c571e2b8 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index 4071671ac9..a0daf6f920 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index b64664d912..786c5d7879 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -62,7 +62,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-06-16}
+\date{Released 2023-06-30}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 309f26d599..e87c039363 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -1025,14 +1025,12 @@
% \begin{syntax}
% \cs{use:e} \Arg{expandable tokens}
% \end{syntax}
-% Fully expands the \meta{token list} in an \texttt{x}-type manner,
-% \emph{but} the function remains fully expandable, and parameter
-% character (usually~|#|) need not be doubled.
+% Fully expands the \meta{token list} in an \texttt{e}-type manner,
+% in which parameter character (usually~|#|) need not be doubled, \emph{and}
+% the function remains fully expandable.
% \begin{texnote}
-% \cs{use:e} is a wrapper around the primitive \tn{expanded}
-% where it is available:
-% it requires two expansions to complete its action.
-% When \tn{expanded} is not available this function is very slow.
+% \cs{use:e} is a wrapper around the primitive \tn{expanded}.
+% It requires two expansions to complete its action.
% \end{texnote}
% \end{function}
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index e1b8e779ee..c82fccb0a9 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -211,7 +211,7 @@
\def\LongText%
{%
The L3 programming layer requires the e-TeX primitives and the
- \LineBreak 'pdfTeX extensions' as described in the README file.
+ \LineBreak 'pdfTeX utilities' as described in the README file.
\LineBreak
These are available in the engines\LineBreak
- pdfTeX v1.40.20\LineBreak
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 966e1b29e3..c236ea8282 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index 272f93e92c..000779e5a1 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index da533ae309..dba24d5c7b 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 42825a59f5..d69256ef41 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 737538a75e..8f1856198c 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
index ec2010b132..0d4f1c6baa 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/contrib/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index ca462b79d8..31e7bf22ac 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 7fb8e5c631..66785fe4ae 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 938715c87a..6a38db6634 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -85,7 +85,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
index 75c197361d..eabd9d67fe 100644
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ b/macros/latex/contrib/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index f2a689c3d9..527c9dcab7 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index e50d3bcbec..3e8f53870b 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index 76bb8b0605..6629ac4c99 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -222,12 +222,8 @@
%
% The |e| type expands all tokens fully, starting from the first. More
% precisely the expansion is identical to that of \TeX{}'s \tn{message}
-% (in particular |#| needs not be doubled). It was added in May 2018.
-% In recent enough engines (starting around 2019) it relies on the
-% primitive \tn{expanded} hence is fast. In older engines it is very
-% much slower. As a result it should only be used in performance
-% critical code if typical users will have a recent installation of the
-% \TeX{} ecosystem.
+% (in particular |#| needs not be doubled). It relies on the
+% primitive \tn{expanded} hence is fast.
%
% The |x| type expands all tokens fully, starting from the first. In
% contrast to |e|, all macro parameter characters |#| must be doubled,
@@ -306,11 +302,7 @@
% \item
% In contrast, |e|~expansion (full expansion, almost like~|x| except
% for the treatment of~|#|) does not prevent variants from being
-% expandable (if the base function is). The drawback is that
-% |e|~expansion is very much slower in old engines (before 2019).
-% Consider using |f|~expansion if that type of expansion is
-% sufficient to perform the required expansion, or |x|~expansion if
-% the variant will not itself need to be expandable.
+% expandable (if the base function is).
% \item
% Finally |f|~expansion only expands the front of the token list,
% stopping at the first non-expandable token. This may fail to
@@ -404,13 +396,6 @@
% \emph{after} reinsertion of the \meta{function}.
% Thus the \meta{function} may take more
% than one argument: all others are left unchanged.
-% \begin{texnote}
-% This relies on the \tn{expanded} primitive when available (in
-% \LuaTeX{} and starting around 2019 in other engines). Otherwise
-% it uses some fall-back code that is very much slower. As a result
-% it should only be used in performance-critical code if typical
-% users have a recent installation of the \TeX{} ecosystem.
-% \end{texnote}
% \end{function}
%
% \begin{function}[EXP]{\exp_args:Nf}
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index 0fce245dda..03487c7103 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index 02543c36e5..43c6d4156e 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index abcfead994..1ad1248cf2 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index 99aa9279ba..5c6e063078 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index dc6a92e10c..3b370f678e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -2108,15 +2108,16 @@
% map over all items in the tuple an auxiliary that dispatches to the
% type-appropriate sign-flipping function.
% \begin{macrocode}
-\cs_new:Npn \@@_tuple_set_sign_o:w #1
+\cs_new:Npn \@@_tuple_set_sign_o:w #1#2 @
{
\if_meaning:w 2 #1
\exp_after:wN \@@_tuple_set_sign_aux_o:Nnw
\fi:
\@@_invalid_operation_o:nw { abs }
+ #2
}
-\cs_new:Npn \@@_tuple_set_sign_aux_o:Nnw #1#2#3 @
- { \@@_tuple_map_o:nw \@@_tuple_set_sign_aux_o:w #3 }
+\cs_new:Npn \@@_tuple_set_sign_aux_o:Nnw #1#2
+ { \@@_tuple_map_o:nw \@@_tuple_set_sign_aux_o:w }
\cs_new:Npn \@@_tuple_set_sign_aux_o:w #1#2 ;
{
\@@_change_func_type:NNN #1 \@@_set_sign_o:w
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index 4cf841cf23..9168af101d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index df680daaff..0882cba89a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 39f16674c9..5cfa2b73a0 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index 09d901bd19..4a549bdba9 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index afaa7a6218..0306a25add 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index e8a5274cfb..348b582dab 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 65f7d3e99a..4e72114d26 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 8273fa4ef4..97243134c0 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index 6bfab36b21..b1638acc75 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index 9a2069c11d..0e587e842c 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index bba4b879be..fc94eca3af 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index 9be9793d93..e6d430c192 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index bfe8307d04..111e889fc9 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index 765ed7fd95..a1121dd0ce 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index 086ee85b9c..e89ebb176d 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 62e88766bb..6838bf11c6 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index 19e2adde95..afc0605a61 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index 311f82e58e..0898334f51 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 31e4154a38..2235524d7b 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index 8524332494..d17bc2dd22 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index a6a5db123e..534d533da0 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 697d13b8fa..e39c1962b2 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index cb6dd5cde7..20bad7ae57 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index 63dac876c0..ae829790f9 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index d000bb7371..baf24d5bc6 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index cab18a2c4c..906fbf5601 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index 39467cdce5..828a005655 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index be0e010f72..3757fb902d 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 3072a506c0..936939db81 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index 38375df896..9eaf2116a2 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index 04070b2e15..aaff774ace 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index ac8097cb3a..cdf7bce3fa 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx
index 9f21d2a410..a8f7ed8a01 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/contrib/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index 7aed561100..3dd67ab49b 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index d82d8a4eed..1c96879388 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index 96c629fcbf..10167f4baf 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index a0a27fa857..f8d94d4c0f 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index c364268012..6d9cc425c0 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 718d14fd5e..4789fff3ce 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 875acbcc27..1d92789b5b 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index 774bdb0ab4..d23f9e366c 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 43116a29e4..f82cd50ac9 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index 9883963846..c05afad054 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index a0751c9b36..b9c752b392 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index d1a85b937e..2f26c99c9d 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-06-16}
+\date{Released 2023-06-30}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index f0dbdcdba5..7c02d2fb8b 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index 8c8d338096..66d24d8910 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-06-16}
+\date{Released 2023-06-30}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index b27cc1d823..4d7bad1082 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index d740b82b46..900d65805e 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index aa996351fe..6eaf8bda57 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-06-16}
+\date{Released 2023-06-30}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index f761831a6b..8b55915aec 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -1285,7 +1285,7 @@
% We choose to retain stress diacritics, but we also need to recombine
% them for pdf\TeX{}. That is handled here.
% \begin{macrocode}
-\cs_new:Npn \_@@_change_case_upper_el_stress:nn #1#2
+\cs_new:Npn \@@_change_case_upper_el_stress:nn #1#2
{
\exp_args:Ne \@@_change_case_generate:n
{
@@ -1717,8 +1717,9 @@
{#1} {#2} {#3} {#4} {#5}
}
{
- \@@_change_case_breathing_aux:nnnnn
- {#1} {#2} {#3} {#4} {#6}
+ \@@_codepoint_process:nN
+ { \@@_change_case_breathing:nnnnnw {#1} {#2} {#3} {#4} }
+ #6 \q_mark
}
}
\cs_new:Npn \@@_change_case_breathing_aux:nnnnn #1#2#3#4#5
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx
index 787c3f9dfc..a2d6d48c10 100644
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index e2bac1b756..a8b84eb10c 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index 47341eeea4..eb97fca1fd 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index 116be7de53..9c80c0fb9a 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 58d4276197..af9ed91866 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index bedbb2e2a5..8af32dff06 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index b44b307bbf..e4dba1753f 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-06-16}
+% \date{Released 2023-06-30}
%
% \maketitle
%
@@ -106,6 +106,22 @@
% category code $10$.
% \end{function}
%
+% \begin{function}[added = 2023-06-19, EXP]{\codepoint_to_category:n}
+% \begin{syntax}
+% \cs{codepoint_to_category:n} \Arg{codepoint}
+% \end{syntax}
+% Expands to the Unicode general category identifier of the \meta{codepoint}.
+% The general category identifier is a string made up of two letter
+% characters, the first uppercase and the second lowercase. The uppercase
+% letters divide codepoints into broader groups, which are then refined
+% by the lowercase letter. For example, codepoints representing letters
+% all have identifiers starting \texttt{L}, for example \texttt{Lu}
+% (uppercase letter), \texttt{Lt} (titlecase letter), \emph{etc.}
+% Full details are available in the documentation provided by the Unicode
+% Consortium: see
+% \url{https://www.unicode.org/reports/tr44/#General_Category_Values}
+% \end{function}
+%
% \begin{function}[added = 2022-10-09, EXP]{\codepoint_to_nfd:n}
% \begin{syntax}
% \cs{codepoint_to_nfd:n} \Arg{codepoint}
@@ -347,6 +363,21 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[EXP]{\codepoint_to_category:n}
+% Get the value and convert back to the string.
+% \begin{macrocode}
+\cs_new:Npn \codepoint_to_category:n #1
+ {
+ \cs:w
+ c_@@_category_
+ \tex_romannumeral:D
+ \__kernel_codepoint_data:nn { category } {#1}
+ _str
+ \cs_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\codepoint_to_nfd:n, \@@_to_nfd:n}
% \begin{macro}[EXP]{\@@_to_nfd:nn}
% \begin{macro}[EXP]{\@@_to_nfd:nnn}
@@ -461,7 +492,7 @@
% \begin{macrocode}
\group_begin:
\clist_map_inline:nn
- { uppercase , lowercase }
+ { category , uppercase , lowercase }
{
\cs_set_nopar:cpn { l_@@_ #1 _block_clist } { }
\cs_set_nopar:cpn { l_@@_ #1 _block_tl } { 1 }
@@ -477,6 +508,29 @@
\cs_set_nopar:Npn \l_@@_next_codepoint_fint_tl { 0 }
\cs_set_nopar:Npn \l_@@_matched_block_tl { 0 }
% \end{macrocode}
+% For Unicode general category, there needs to be numerical representation of
+% each possible value. As we need to go from string to number here, but the
+% other way elsewhere, we set up fast mappings both ways, but one set local
+% and the other as constants.
+% \begin{macrocode}
+ \cs_set_protected:Npn \@@_data_auxi:w #1#2
+ {
+ \quark_if_recursion_tail_stop:n {#2}
+ \cs_set_nopar:cpn { l_@@_category_ #2 _tl } {#1}
+ \str_const:cn { c_@@_category_ \tex_romannumeral:D #1 _str } {#2}
+ \exp_args:Ne \@@_data_auxi:w { \int_eval:n { #1 + 1 } }
+ }
+ \@@_data_auxi:w { 1 }
+ { Lu } { Ll } { Lt } { Lm } { Lo }
+ { Mn } { Me } { Mc }
+ { Nd } { Nl } { No }
+ { Zs } { Zl } { Zp }
+ { Cc } { Cf } { Co } { Cs } { Cn }
+ { Pd } { Ps } { Pe } { Pc } { Po } { Pi } { Pf }
+ { Sm } { Sc } { Sk } { So }
+ \q_recursion_tail
+ \q_recursion_stop
+% \end{macrocode}
% Parse the main Unicode data file and pull out the NFD and case changing
% data. The NFD data is stored on using the hash table approach and can yield
% a predictable number of codepoints: one or two. We also need the case data,
@@ -491,7 +545,7 @@
\tl_if_head_eq_charcode:nNF {#6} < % >
{ \@@_data_auxii:w #1 ; #6 ~ \q_stop }
}
- \@@_data_auxiii:w #1 ; #2 ;
+ \@@_data_auxiii:w #1 ; #2 ; #3 ;
}
\cs_set_protected:Npn \@@_data_auxii:w #1 ; #2 ~ #3 \q_stop
{
@@ -503,22 +557,27 @@
}
}
% \end{macrocode}
+% The category data needs to be converted from a string to the numerical
+% equivalent: a simple operation.
% The case data is going to be stored as an offset from the parent character,
% rather than an absolute value. We therefore deal with that plus the situation
-% where a codepoint has no mapping data in oen shot.
+% where a codepoint has no mapping data in one shot.
% \begin{macrocode}
\cs_set_protected:Npn \@@_data_auxiii:w
- #1 ; #2 ; #3 ; #4 ; #5 ; #6 ; #7 ; #8 ~ \q_stop
+ #1 ; #2 ; #3 ; #4 ; #5 ; #6 ; #7 ; #8 ; #9 ~ \q_stop
{
\use:e
{
\@@_data_auxiv:w
#1 ; #2 ;
- \@@_data_offset:nn {#1} {#6} ;
+ \@@_data_category:n {#3} ;
\@@_data_offset:nn {#1} {#7} ;
- #8;
+ \@@_data_offset:nn {#1} {#8} ;
+ #9;
}
}
+ \cs_set:Npn \@@_data_category:n #1
+ { \use:c { l_@@_category_ #1 _tl } }
\cs_set:Npn \@@_data_offset:nn #1#2
{
\tl_if_blank:nTF {#2}
@@ -536,20 +595,21 @@
% case exceptions are all stored as codepoints, with a fixed number of
% balanced text as we know that there are never more than three.
% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxiv:w #1 ; #2 ; #3 ; #4 ; #5 ;
+ \cs_set_protected:Npn \@@_data_auxiv:w #1 ; #2 ; #3 ; #4 ; #5 ; #6 ;
{
\int_compare:nNnT {"#1} > \l_@@_next_codepoint_fint_tl
{
- \@@_data_auxvi:nnnw {#1} {#3} {#4}
+ \@@_data_auxv:nnnnw {#1} {#3} {#4} {#5}
#2 Last> \q_stop
}
- \@@_add:nn { uppercase } {#3}
- \@@_add:nn { lowercase } {#4}
- \int_compare:nNnF {#3} = { \@@_data_offset:nn {#1} {#5} }
+ \@@_add:nn { category } {#3}
+ \@@_add:nn { uppercase } {#4}
+ \@@_add:nn { lowercase } {#5}
+ \int_compare:nNnF {#4} = { \@@_data_offset:nn {#1} {#6} }
{
\tl_const:cx
{ c_@@_titlecase_ \codepoint_str_generate:n {"#1} _tl }
- { {"#5} { } { } }
+ { {"#6} { } { } }
}
\tl_set:Nx \l_@@_next_codepoint_fint_tl
{ \int_eval:n { "#1 + 1 } }
@@ -563,17 +623,22 @@
}
% \end{macrocode}
% Distinguish between a range and a gap, and pass on the appropriate value(s).
+% The general category for unassigned characters is \texttt{Cn}, so we
+% find the correct value once and then use that.
% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxvi:nnnw #1#2#3#4 Last> #5 \q_stop
+ \cs_set_protected:Npx \@@_data_auxv:nnnnw #1#2#3#4#5 Last> #6 \q_stop
{
- \tl_if_blank:nTF {#5}
+ \exp_not:N \tl_if_blank:nTF {#6}
{
- \@@_range:nnn {#1} { uppercase } { 0 }
- \@@_range:nnn {#1} { lowercase } { 0 }
+ \exp_not:N \@@_range:nnn {#1} { category }
+ { \exp_not:V \l_@@_category_Cn_tl }
+ \exp_not:N \@@_range:nnn {#1} { uppercase } { 0 }
+ \exp_not:N \@@_range:nnn {#1} { lowercase } { 0 }
}
{
- \@@_range:nnn {#1} { uppercase } {#2}
- \@@_range:nnn {#1} { lowercase } {#3}
+ \exp_not:N \@@_range:nnn {#1} { category } {#2}
+ \exp_not:N \@@_range:nnn {#1} { uppercase } {#3}
+ \exp_not:N \@@_range:nnn {#1} { lowercase } {#4}
}
}
% \end{macrocode}
@@ -672,7 +737,7 @@
% \begin{macrocode}
\cs_set_protected:Npn \@@_finalise_blocks:
{
- \clist_map_inline:nn { uppercase , lowercase }
+ \clist_map_inline:nn { category , uppercase , lowercase }
{
\@@_range:nnn { 110000 } {##1} { 0 }
\@@_finalise_blocks:n {##1}
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index e16a458212..041c358d4f 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 1d7c4a5418..4cf2cca1c2 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-06-16}
+\date{Released 2023-06-30}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/contrib/l3kernel/source3body.tex
index a56e37e828..cddbdac6e2 100644
--- a/macros/latex/contrib/l3kernel/source3body.tex
+++ b/macros/latex/contrib/l3kernel/source3body.tex
@@ -228,11 +228,10 @@ following argument specifiers:
this type of expansion. Functions which feature an \texttt{x}-type
argument are \emph{not} expandable.
\item[\texttt{e}] The \texttt{e} specifier is in many respects
- identical to \texttt{x}, but with a very different implementation.
+ identical to \texttt{x}, but uses \tn{expanded} primitive.
+ Parameter character (usually~|#|) in the argument need not be doubled.
Functions which feature an \texttt{e}-type argument may be
- expandable. The drawback is that \texttt{e} is extremely slow
- (often more than $200$ times slower) in older engines, more
- precisely in non-\LuaTeX{} engines older than 2019.
+ expandable.
\item[\texttt{f}] The \texttt{f} specifier stands for \emph{full
expansion}, and in contrast to \texttt{x} stops at the first
non-expandable token (reading the argument from left to right) without
diff --git a/macros/latex/contrib/naive-ebnf/naive-ebnf.dtx b/macros/latex/contrib/naive-ebnf/naive-ebnf.dtx
index 8f7768f156..d3105b2b87 100644
--- a/macros/latex/contrib/naive-ebnf/naive-ebnf.dtx
+++ b/macros/latex/contrib/naive-ebnf/naive-ebnf.dtx
@@ -50,7 +50,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{naive-ebnf}
%<*package>
-[2023-05-27 0.0.6 EBNF in Plain Text]
+[2023-06-30 0.0.7 EBNF in Plain Text]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -133,7 +133,7 @@
% \begin{ebnf}[1.5in]
% <VeryLongVariable> := <X> | <Y> \\
% <X> := "X" 'EOL' \\
-% <Y> := "Y"
+% <Y> := "Y" \\
% \end{ebnf}
% \end{document}
% \end{docshot}
@@ -171,6 +171,21 @@
% \end{document}
% \end{docshot}
+% Special symbols are interpreted correctly, if they stay inside quotes:
+% \docshotOptions{}
+% \begin{docshot}
+% \documentclass{minimal}
+% \usepackage[T1]{fontenc}
+% \usepackage{naive-ebnf}
+% \begin{document}\noindent
+% \begin{ebnf}[1.5in]
+% <X> := 'EOL' "'" "|" \\
+% <Y> := ">" "<" "]" "[" \\
+% <Z> := "\LaTeX" "\textdollar" \\
+% \end{ebnf}
+% \end{document}
+% \end{docshot}
+
% \section{Package Options}
% It's possible to configure the behavior of the package with the help of a few package options:
@@ -215,7 +230,6 @@
bw/.store in=\ebnf@bw,
trail/.store in=\ebnf@trail,
trail/.default=naive-ebnf.tmp.tex,
- trail
}
\ProcessPgfPackageOptions{/ebnf}
% \end{macrocode}
@@ -257,10 +271,10 @@
% Then, we a command to render a single non-terminal:
% \begin{macrocode}
\makeatletter
-\newcommand\nonterminal[1]{%
+\newcommand\nonterminal[1]{{%
\ebnf@color{gray}{\relax\ifmmode\langle\else\(\langle\)\fi}%
\relax\ifmmode\textsf{#1}\else{\sffamily#1}\fi%
- \ebnf@color{gray}{\relax\ifmmode\rangle\else\(\rangle\)\fi}}
+ \ebnf@color{gray}{\relax\ifmmode\rangle\else\(\rangle\)\fi}}}
\makeatother
% \end{macrocode}
% \end{macro}
@@ -270,7 +284,7 @@
% Then, we a command to render a single non-terminal:
% \begin{macrocode}
\makeatletter
-\newcommand\sterminal[1]{\relax\ifmmode\else\ttfamily\fi#1}%
+\newcommand\sterminal[1]{{\relax\ifmmode\else\ttfamily\fi#1}}%
\makeatother
% \end{macrocode}
% \end{macro}
@@ -286,18 +300,18 @@
{\ebnf@color{gray}{(}#1\ebnf@color{gray}{)}}
\ExplSyntaxOn
\newcommand\ebnf@terminal[1]{
- \tl_set:Nn \l_ebnf_tl { }
- \tl_set_rescan:Nno \l_ebnf_tl { } { #1 }
+ \tl_set:Nn \l_ebnf_tl {}
+ \tl_set_rescan:Nnn \l_ebnf_tl {} { #1 }
\terminal{\l_ebnf_tl}
}
\newcommand\ebnf@sterminal[1]{
- \tl_set:Nn \l_ebnf_tl { }
- \tl_set_rescan:Nno \l_ebnf_tl { } { #1 }
+ \tl_set:Nn \l_ebnf_tl {}
+ \tl_set_rescan:Nnn \l_ebnf_tl {} { #1 }
\sterminal{\l_ebnf_tl}
}
\newcommand\ebnf@nonterminal[1]{
- \tl_set:Nn \l_ebnf_tl { }
- \tl_set_rescan:Nno \l_ebnf_tl { } { #1 }
+ \tl_set:Nn \l_ebnf_tl {}
+ \tl_set_rescan:Nnn \l_ebnf_tl {} { #1 }
\nonterminal{\l_ebnf_tl}
}
\ExplSyntaxOff
@@ -318,11 +332,16 @@
\NewDocumentEnvironment{ebnf}{O{4em}+b}
{\tl_set:Nn\l__ebnf_tmp_tl{#2}}
{%
- \regex_replace_all:nnN { \{(.+?)\} }%
+ \regex_replace_all:nnN { ([^\ ])< } {\1\\textless{}} \l__ebnf_tmp_tl%
+ \regex_replace_all:nnN { >([^\ ]) } {\\textgreater{}\1} \l__ebnf_tmp_tl%
+ \regex_replace_all:nnN { ([^\ ])'([^\ ]) } {\1\\textquotesingle{}\2} \l__ebnf_tmp_tl%
+ \regex_replace_all:nnN { ([^\ ])\|([^\ ]) } {\1\\textbar{}\2} \l__ebnf_tmp_tl%
+ %
+ \regex_replace_all:nnN { \{\ (.+?)\ \} }%
{\c{ebnf@repetition}{\1}} \l__ebnf_tmp_tl%
- \regex_replace_all:nnN { \((.+?)\) }%
+ \regex_replace_all:nnN { \(\ (.+?)\ \) }%
{\c{ebnf@grouping}{\1}} \l__ebnf_tmp_tl%
- \regex_replace_all:nnN { \[(.+?)\] }%
+ \regex_replace_all:nnN { \[\ (.+?)\ \] }%
{\c{ebnf@optional}{\1}} \l__ebnf_tmp_tl%
\regex_replace_all:nnN { (<[^>]+?>\ :=) }%
{\c{makebox}[#1][r]{\1}} \l__ebnf_tmp_tl%
diff --git a/macros/latex/contrib/naive-ebnf/naive-ebnf.pdf b/macros/latex/contrib/naive-ebnf/naive-ebnf.pdf
index 96b2f8a7d3..d15fe959a6 100644
--- a/macros/latex/contrib/naive-ebnf/naive-ebnf.pdf
+++ b/macros/latex/contrib/naive-ebnf/naive-ebnf.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.dtx b/macros/latex/contrib/nicematrix/nicematrix-code.dtx
index 07b6fe8513..86e54a5643 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-code.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix-code.dtx
@@ -17,8 +17,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{6.20}
-\def\myfiledate{2023/06/04}
+\def\myfileversion{6.20a}
+\def\myfiledate{2023/06/30}
%
%
%<*batchfile>
@@ -801,11 +801,11 @@ version 2005/12/01 or later.
% \bigskip
% The following token list will contain the type of horizontal alignment of the
% current cell as provided by the corresponding column. The possible values are
-% |r|, |l|, |c|. For example, a column |p[l]{3cm}| will provide the value |l|
-% for all the cells of the column.
+% |r|, |l|, |c| and |j|. For example, a column |p[l]{3cm}| will provide the
+% value |l| for all the cells of the column.
% \begin{macrocode}
\str_new:N \l_@@_hpos_cell_str
-\str_set:Nn \l_@@_hpos_cell_str { c }
+\str_set:Nn \l_@@_hpos_cell_str { c }
% \end{macrocode}
%
% \bigskip
@@ -1779,7 +1779,8 @@ version 2005/12/01 or later.
% sequence of successive commands |\tabularnote| and we have to format the
% labels of these tabular notes (in the array). We compose those labels in a box
% |\l_tmpa_box| because we will do a special construction in order to have this
-% box in an overlapping position if we are at the end of a cell.
+% box in an overlapping position if we are at the end of a cell when
+% |\l_@@_hpos_cell_str| is equal to |c| or |r|.
% \begin{macrocode}
\hbox_set:Nn \l_tmpa_box
{
@@ -1802,14 +1803,20 @@ version 2005/12/01 or later.
\int_compare:nNnT \l_tmpa_int = \c@tabularnote
{ \int_gincr:N \c@tabularnote }
\seq_clear:N \l_@@_notes_labels_seq
- \hbox_overlap_right:n { \box_use:N \l_tmpa_box }
+ \bool_lazy_or:nnTF
+ { \str_if_eq_p:Vn \l_@@_hpos_cell_str { c } }
+ { \str_if_eq_p:Vn \l_@@_hpos_cell_str { r } }
+ {
+ \hbox_overlap_right:n { \box_use:N \l_tmpa_box }
% \end{macrocode}
% If the command |\tabularnote| is used exactly at the end of the cell, the
% |\unskip| (inserted by \pkg{array}?) will delete the skip we insert now
% and the label of the footnote will be composed in an overlapping position (by
% design).
% \begin{macrocode}
- \skip_horizontal:n { \box_wd:N \l_tmpa_box }
+ \skip_horizontal:n { \box_wd:N \l_tmpa_box }
+ }
+ { \box_use:N \l_tmpa_box }
}
}
% \end{macrocode}
@@ -2430,7 +2437,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\legacy_if:nF { measuring@ }
{
- \str_set:Nn \l_tmpa_str { #1 }
+ \str_set:Nx \l_tmpa_str { #1 }
\seq_if_in:NVTF \g_@@_names_seq \l_tmpa_str
{ \@@_error:nn { Duplicate~name } { #1 } }
{ \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str }
@@ -3501,16 +3508,15 @@ version 2005/12/01 or later.
% If there is one or several commands |\tabularnote| in the caption specified
% by the key |caption| and if that caption has to be composed above the tabular,
% we have now that information because it has been written in the |aux| file at
-% a previous run. We use that information to start couting the tabular notes in
-% the main array at the right value (that remember that the caption will be
+% a previous run. We use that information to start counting the tabular notes in
+% the main array at the right value (we remember that the caption will be
% composed \emph{after} the array!).
% \begin{macrocode}
\tl_if_exist:NT \l_@@_note_in_caption_tl
{
\tl_if_empty:NF \l_@@_note_in_caption_tl
{
- \int_gset_eq:NN \g_@@_notes_caption_int
- { \l_@@_note_in_caption_tl }
+ \int_gset_eq:NN \g_@@_notes_caption_int \l_@@_note_in_caption_tl
\int_gset:Nn \c@tabularnote { \l_@@_note_in_caption_tl }
}
}
@@ -4810,7 +4816,7 @@ version 2005/12/01 or later.
{
position = \int_eval:n { \c@jCol + 1 } ,
multiplicity = \int_use:N \l_tmpa_int ,
- total-width = \dim_use:N \l_tmpa_dim % added 2022-08-06
+ total-width = \dim_use:N \l_tmpa_dim
}
% \end{macrocode}
% We don't have provided value for |start| nor for |end|, which means that the
@@ -4961,7 +4967,7 @@ version 2005/12/01 or later.
% will provide the horizontal alignment of the column to which belongs the cell.
% \begin{macrocode}
\str_if_eq:VnTF \l_@@_hpos_col_str j
- { \str_set:Nn \exp_not:N \l_@@_hpos_cell_str { c } }
+ { \str_set:Nn \exp_not:N \l_@@_hpos_cell_str { } }
{
\str_set:Nn \exp_not:N \l_@@_hpos_cell_str
{ \str_lowercase:V \l_@@_hpos_col_str }
@@ -6088,6 +6094,21 @@ version 2005/12/01 or later.
{ \caption }
{ \caption [ \l_@@_short_caption_tl ] }
{ \l_@@_caption_tl }
+% \end{macrocode}
+% In some circonstancies (in particular when the package \pkg{caption} is
+% loaded), the caption is composed several times. That's why, when the same
+% tabular note is encountered (in the caption!), we consider that you are in the
+% second compilation and you can give to |\g_@@_notes_caption_int| its final
+% value, which is the number of tabular notes in the caption. But sometimes, the
+% caption is composed only once. In that case, we fix the value of
+% |\g_@@_caption_finished_bool| now.
+% \begin{macrocode}
+ \bool_if:NF \g_@@_caption_finished_bool % added 2023/06/30
+ {
+ \bool_gset_true:N \g_@@_caption_finished_bool
+ \int_gset_eq:NN \g_@@_notes_caption_int \c@tabularnote
+ \int_gzero:N \c@tabularnote
+ }
\tl_if_empty:NF \l_@@_label_tl { \label { \l_@@_label_tl } }
\group_end:
}
@@ -6857,7 +6878,7 @@ version 2005/12/01 or later.
>
{
% \end{macrocode}
-% At the beginning of the cell, we link |\CodeAfter| to a command which do
+% At the beginning of the cell, we link |\CodeAfter| to a command which
% begins with |\\| (whereas the standard version of |\CodeAfter| begins does
% not).
% \begin{macrocode}
@@ -6956,7 +6977,7 @@ version 2005/12/01 or later.
{
\NewDocumentEnvironment { #1 NiceArray } { }
{
- \bool_gset_false:N \g_@@_NiceArray_bool
+ \bool_gset_false:N \g_@@_NiceArray_bool
\str_if_empty:NT \g_@@_name_env_str
{ \str_gset:Nn \g_@@_name_env_str { #1 NiceArray } }
\@@_test_if_math_mode:
@@ -8308,14 +8329,17 @@ version 2005/12/01 or later.
% We may think that the final user won't use a ``last column'' which contains
% only a command |\Vdots|. However, if the |\Vdots| is in fact used to draw, not
% a dotted line, but an arrow (to indicate the number of rows of the matrix), it
-% may be really encountered.
+% may be really encountered. That's why we do an adjustemnt for that case.
% \begin{macrocode}
\int_compare:nNnT \l_@@_last_col_int > { -2 }
{
\int_compare:nNnT \l_@@_initial_j_int = \g_@@_col_total_int
{
- \dim_set_eq:NN \l_tmpa_dim \l_@@_right_margin_dim
- \dim_add:Nn \l_tmpa_dim \l_@@_extra_right_margin_dim
+ \dim_set:Nn \l_tmpa_dim
+ {
+ \l_@@_right_margin_dim + \l_@@_extra_right_margin_dim
+ + 2 mm
+ }
\dim_add:Nn \l_@@_x_initial_dim \l_tmpa_dim
\dim_add:Nn \l_@@_x_final_dim \l_tmpa_dim
}
@@ -8607,9 +8631,9 @@ version 2005/12/01 or later.
}
\draw
[
- #1 ,
shorten~> = \l_@@_xdots_shorten_end_dim ,
shorten~< = \l_@@_xdots_shorten_start_dim ,
+ #1
]
( \l_@@_x_initial_dim , \l_@@_y_initial_dim )
% \end{macrocode}
@@ -9136,6 +9160,7 @@ version 2005/12/01 or later.
\tl_set_rescan:Nno \l_@@_argspec_tl { } \l_@@_argspec_tl
\exp_args:NNV \NewDocumentCommand \@@_Vdotsfor: \l_@@_argspec_tl
{
+ \bool_gset_true:N \g_@@_empty_cell_bool % added
\tl_gput_right:Nx \g_@@_HVdotsfor_lines_tl
{
\@@_Vdotsfor:nnnn
@@ -13287,8 +13312,8 @@ version 2005/12/01 or later.
%
%
%
-% We will extract the potential keys |columns-type|, |l|, |c|, |r| and pass
-% the other keys to the environment |{NiceArrayWithDelims}|.
+% We will extract some keys and pass the other keys to the environment
+% |{NiceArrayWithDelims}|.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Auto }
{
@@ -13321,6 +13346,11 @@ version 2005/12/01 or later.
% \begin{macrocode}
\group_begin:
\bool_set_true:N \l_@@_Matrix_bool
+ \str_if_eq:nnT { #1 } { . }
+ {
+ \str_if_eq:nnT { #2 } { . }
+ { \bool_set_false:N \l_@@_Matrix_bool }
+ }
\keys_set_known:nnN { NiceMatrix / Auto } { #6 } \l_tmpa_tl
% \end{macrocode}
% We nullify the command |\@@_transform_preamble:| because we will provide a
@@ -13363,13 +13393,14 @@ version 2005/12/01 or later.
\group_end:
}
% \end{macrocode}
+%
%
% \begin{macrocode}
\cs_set_protected:Npn \@@_define_com:nnn #1 #2 #3
{
\cs_set_protected:cpn { #1 AutoNiceMatrix }
{
- \bool_gset_false:N \g_@@_NiceArray_bool
+ \bool_gset_false:N \g_@@_NiceArray_bool
\str_gset:Nx \g_@@_name_env_str { #1 AutoNiceMatrix }
\AutoNiceMatrixWithDelims { #2 } { #3 }
}
@@ -13388,9 +13419,10 @@ version 2005/12/01 or later.
% We define also a command |\AutoNiceMatrix| similar to the environment |{NiceMatrix}|.
% \begin{macrocode}
\NewDocumentCommand \AutoNiceMatrix { O { } m O { } m ! O { } }
- {
+ {
\group_begin:
- \bool_gset_true:N \g_@@_NiceArray_bool
+ \bool_gset_true:N \g_@@_NiceArray_bool
+ % \bool_set_true:N \l_@@_Matrix_bool
\AutoNiceMatrixWithDelims . . { #2 } { #4 } [ #1 , #3 , #5 ]
\group_end:
}
@@ -16061,7 +16093,8 @@ version 2005/12/01 or later.
if~you~use~'columns-width=auto'.~If~you~don't~want~to~see~this~
message~again,~use~the~key~'allow-duplicate-names'~in~
'\token_to_str:N \NiceMatrixOptions'.\\
- \c_@@_available_keys_str
+ \bool_if:NF \c_@@_messages_for_Overleaf_bool
+ { For~a~list~of~the~names~already~used,~type~H~<return>. }
}
{
The~names~already~defined~in~this~document~are:~
diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.pdf b/macros/latex/contrib/nicematrix/nicematrix-code.pdf
index 384552b056..1e27e66ce0 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-code.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index 7a0776a2bb..de3bb30332 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index 688e3b032b..6fd43c26a6 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -3231,6 +3231,7 @@ $\begin{bNiceMatrix}
\colorbox{yellow!50}{\textbf{Nouveau 6.20}}\enskip
Avec la clé |xdots/horizontal-labels|, les labels restent horizontaux.\par\nobreak
+\smallskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
$\begin{bNiceMatrix}[xdots/horizontal-labels]
1 & \hspace*{1cm} & 0 \\[8mm]
@@ -4135,7 +4136,9 @@ les notes de pied de page).
\item Si une commande |\tabularnote{...}| se trouve exactement à la fin d'une case
(sans aucun espace après), l'appel de note est composé en débordement vers la
droite (cela peut permettre de mieux conserver l'alignement des contenus d'une
-colonne).
+colonne). Depuis la version 6.20a, ce comportement n'a lieu que le mode
+l'alignement de la cellule est |c| ou |r| (alignement horizontal centré ou en
+butée à droite).
\item Si la clé |notes/para| est utilisée, les notes sont composées à la fin du
tableau en un seul paragraphe.
@@ -4159,8 +4162,8 @@ l'environnement |{TabularNote}| à la fin de l'environnement |{NiceTabular}|
argument, une seule note est insérée en fin de tableau (mais tous les labels
sont marqués). Il est possible de désactiver cette fonctionnalité avec la clé
|notes/detect-duplicates|.\footnote{Pour des raisons techniques, il n'est pas
- autorisé de mettre des |\tabularnote| avec exactement le même argument dans la
- légende.}
+ autorisé de mettre plusieurs |\tabularnote| avec exactement le même argument
+ dans la légende.}
\item Il est possible de référencer une note de tableau (avec la commande
|\label| placée après le |\tabularnote|).
@@ -4930,15 +4933,16 @@ environnements (pour LaTeX, il s'agit d'une commande — complètement développ
\smallskip
\index{name!clé pour un environnement}
-Il est néanmoins recommandé de passer plutôt par la clé |name|. Celle-ci permet
-de donner un nom à l'environnement. Une fois l'environnement nommé, les nœuds
-sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où \textsl{nom} est
-le nom donné au tableau et $i$ et $j$ les numéros de rangée et de colonne de la
-case considérée. On peut les utiliser avec \textsc{pgf} mais l'utilisateur final
-préférera sans doute utiliser TikZ (qui est une sur-couche de \textsc{pgf}). Il
-faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas TikZ par défaut.
-Dans les exemples qui suivent, on suppose que TikZ a été chargé par
-l'utilisateur.
+Il est néanmoins recommandé de passer plutôt par la clé |name|\footnote{Depuis
+ la version 6.20a, la valeur passée à cette clé est \emph{développée}, au sens
+ de TeX.}. Celle-ci permet de donner un nom à l'environnement. Une fois
+l'environnement nommé, les nœuds sont accessibles à travers les noms
+«\textsl{nom}-$i$-$j$» où \textsl{nom} est le nom donné au tableau et $i$ et $j$
+les numéros de rangée et de colonne de la case considérée. On peut les utiliser
+avec \textsc{pgf} mais l'utilisateur final préférera sans doute utiliser TikZ
+(qui est une sur-couche de \textsc{pgf}). Il faut néanmoins se souvenir que
+\pkg{nicematrix} ne charge pas TikZ par défaut. Dans les exemples qui suivent,
+on suppose que TikZ a été chargé par l'utilisateur.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -6240,32 +6244,35 @@ On peut même tracer des lignes continues.\footnote{Dans ce document, la
sur la forme des pointes de flèches.}
\begin{Verbatim}
-\NiceMatrixOptions
- {nullify-dots,code-for-first-col = \color{blue},code-for-first-row=\color{blue}}
-$\begin{pNiceMatrix}[first-row,first-col,xdots/horizontal-labels]
- & & \Ldots[line-style={solid,<->},shorten=0pt]^{n \text{ colonnes}} \\
- & 1 & 1 & 1 & \Ldots & 1 \\
- & 1 & 1 & 1 & & 1 \\
-\Vdots[line-style={solid,<->}]_{n \text{ rangées}}
- & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & \Ldots & 1
-\end{pNiceMatrix}$
+\tikzset{H/.style = {solid,<->,shorten > = -1mm, shorten < = -1mm}}
+\tikzset{V/.style = {solid,<->}}
+\NiceMatrixOptions{xdots/horizontal-labels}
+$\begin{pNiceArray}{ccc|cc}[first-row,last-col,margin]
+\Hdotsfor[line-style=H]{3}^{3} & \Hdotsfor[line-style=H]{2}^{2} \\
+2 & 1 & 1 & 1 & 1 & \hspace*{4mm}\Vdotsfor[line-style=V]{3}^{3}\\
+1 & 1 & 1 & 1 & 1 \\
+1 & 1 & 1 & 1 & 1 \\
+\Hline
+1 & 1 & 1 & 1 & 1 & \Vdotsfor[line-style=V]{2}^{2}\\
+1 & 1 & 1 & 1 & 1 \\
+\end{pNiceArray}$
\end{Verbatim}
-\begin{scope}
-\NiceMatrixOptions
- {nullify-dots,code-for-first-col = \color{blue},code-for-first-row=\color{blue}}
-\[\begin{pNiceMatrix}[first-row,first-col,xdots/horizontal-labels]
- & & \Ldots[line-style={solid,<->},shorten=0pt]^{n \text{ colonnes}} \\
- & 1 & 1 & 1 & \Ldots & 1 \\
- & 1 & 1 & 1 & & 1 \\
-\Vdots[line-style={solid,<->}]_{n \text{ rangées}} & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & \Ldots & 1
-\end{pNiceMatrix}\]
-\end{scope}
+\begin{center}
+\tikzset{H/.style = {solid,<->,shorten > = -1mm, shorten < = -1mm}}
+\tikzset{V/.style = {solid,<->}}
+\NiceMatrixOptions{xdots/horizontal-labels}
+$\begin{pNiceArray}{ccc|cc}[first-row,last-col,margin]
+\Hdotsfor[line-style=H]{3}^{3} & \Hdotsfor[line-style=H]{2}^{2} \\
+2 & 1 & 1 & 1 & 1 & \hspace*{4mm}\Vdotsfor[line-style=V]{3}^{3}\\
+1 & 1 & 1 & 1 & 1 \\
+1 & 1 & 1 & 1 & 1 \\
+\Hline
+1 & 1 & 1 & 1 & 1 & \Vdotsfor[line-style=V]{2}^{2}\\
+1 & 1 & 1 & 1 & 1 \\
+\end{pNiceArray}$
+\end{center}
\subsection{Lignes en tiretés}
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index e754fc3aec..ec37719356 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix.tex b/macros/latex/contrib/nicematrix/nicematrix.tex
index dc565d2160..9987ba819b 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix.tex
@@ -3153,7 +3153,7 @@ $\begin{bNiceMatrix}
\bigskip
\colorbox{yellow!50}{\textbf{New 6.20}}\enskip
-With the key |xdots/horizontal-labels|, the labels stay horizontal\par\nobreak
+With the key |xdots/horizontal-labels|, the labels stay horizontal.\par\nobreak
%
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -4039,7 +4039,9 @@ together, separated by commas (this is similar to the option |multiple| of
\item If a command |\tabularnote{...}| is exactly at the end of a cell (with
no space at all after), the label of the note is composed in an overlapping
position (towards the right). This structure may provide a better alignment of
-the cells of a given column.
+the cells of a given column. However, since the version 6.20a, that behaviour is
+in force only when the horizontal alignment mode of the corresponding column is
+|c| or |r|.
\item If the key |notes/para| is used, the notes are composed at the end of
the array in a single paragraph (as with the key |para| of \pkg{threeparttable}).
@@ -4835,11 +4837,12 @@ counter).
\smallskip
\index{name!key for an environment}
-However, it's advisable to use instead the key |name|. This key gives a name
-to the current environment. When the environment has a name, the nodes are
-accessible with the name ``\textsl{name}-$i$-$j$'' where \textsl{name} is the
-name given to the array and $i$ and $j$ the numbers of row and column. It's
-possible to use these nodes with \textsc{pgf} but the final user will
+However, it's advisable to use instead the key |name|\footnote{Since the version
+ 6.20a, the value of that key is \emph{expanded} (in the TeX sens).}. This key
+gives a name to the current environment. When the environment has a name, the
+nodes are accessible with the name ``\textsl{name}-$i$-$j$'' where \textsl{name}
+is the name given to the array and $i$ and $j$ the numbers of row and column.
+It's possible to use these nodes with \textsc{pgf} but the final user will
probably prefer to use Tikz (which is a convenient layer upon \textsc{pgf}).
However, one should remind that \pkg{nicematrix} doesn't load Tikz by default.
In the following examples, we assume that Tikz has been loaded.
@@ -6147,31 +6150,36 @@ In fact, it's even possible to draw solid lines with the commands |\Cdots|,
has been loaded, which impacts the shape of the arrow tips.}
\begin{Verbatim}
-\NiceMatrixOptions
- {nullify-dots,code-for-first-col = \color{blue},code-for-first-row=\color{blue}}
-$\begin{pNiceMatrix}[first-row,first-col,xdots/horizontal-labels]
- & & \Ldots[line-style={solid,<->},shorten=0pt]^{n \text{ columns}} \\
- & 1 & 1 & 1 & \Ldots & 1 \\
- & 1 & 1 & 1 & & 1 \\
-\Vdots[line-style={solid,<->}]_{n \text{ rows}} & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & \Ldots & 1
-\end{pNiceMatrix}$
+\tikzset{H/.style = {solid,<->,shorten > = -1mm, shorten < = -1mm}}
+\tikzset{V/.style = {solid,<->}}
+\NiceMatrixOptions{xdots/horizontal-labels}
+$\begin{pNiceArray}{ccc|cc}[first-row,last-col,margin]
+\Hdotsfor[line-style=H]{3}^{3} & \Hdotsfor[line-style=H]{2}^{2} \\
+2 & 1 & 1 & 1 & 1 & \hspace*{4mm}\Vdotsfor[line-style=V]{3}^{3}\\
+1 & 1 & 1 & 1 & 1 \\
+1 & 1 & 1 & 1 & 1 \\
+\Hline
+1 & 1 & 1 & 1 & 1 & \Vdotsfor[line-style=V]{2}^{2}\\
+1 & 1 & 1 & 1 & 1 \\
+\end{pNiceArray}$
\end{Verbatim}
-\begin{scope}
-\NiceMatrixOptions
- {nullify-dots,code-for-first-col = \color{blue},code-for-first-row=\color{blue}}
-\[\begin{pNiceMatrix}[first-row,first-col,xdots/horizontal-labels]
- & & \Ldots[line-style={solid,<->},shorten=0pt]^{n \text{ columns}} \\
- & 1 & 1 & 1 & \Ldots & 1 \\
- & 1 & 1 & 1 & & 1 \\
-\Vdots[line-style={solid,<->}]_{n \text{ rows}} & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & & 1 \\
- & 1 & 1 & 1 & \Ldots & 1
-\end{pNiceMatrix}\]
-\end{scope}
+\begin{center}
+\tikzset{H/.style = {solid,<->,shorten > = -1mm, shorten < = -1mm}}
+\tikzset{V/.style = {solid,<->}}
+\NiceMatrixOptions{xdots/horizontal-labels}
+$\begin{pNiceArray}{ccc|cc}[first-row,last-col,margin]
+\Hdotsfor[line-style=H]{3}^{3} & \Hdotsfor[line-style=H]{2}^{2} \\
+2 & 1 & 1 & 1 & 1 & \hspace*{4mm}\Vdotsfor[line-style=V]{3}^{3}\\
+1 & 1 & 1 & 1 & 1 \\
+1 & 1 & 1 & 1 & 1 \\
+\Hline
+1 & 1 & 1 & 1 & 1 & \Vdotsfor[line-style=V]{2}^{2}\\
+1 & 1 & 1 & 1 & 1 \\
+\end{pNiceArray}$
+\end{center}
+
\subsection{Dashed rules}
\label{dashed}
@@ -6877,6 +6885,15 @@ The successive versions of the file |nicematrix.sty| provided by TeXLive are ava
\nolinkurl{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}
}
+\subsection*{Changes between version 6.20 and 6.20a}
+
+The value of the key |name| of an environment of \pkg{nicematrix} is expanded
+(in the TeX sens).
+
+The labels of the tabular notes (created by the command |\tabularnote|) are now
+composed in an overlapping position \emph{only} when the horizontal alignment
+mode of the column is |c| or |r|.
+
\subsection*{Changes between version 6.19 and 6.20}
New key |xdots/horizontal-labels|.
diff --git a/macros/luatex/generic/blopentype/LICENSE b/macros/luatex/generic/blopentype/LICENSE
new file mode 100644
index 0000000000..bfed4c5d96
--- /dev/null
+++ b/macros/luatex/generic/blopentype/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Luis Rivera
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/macros/luatex/generic/blopentype/README.md b/macros/luatex/generic/blopentype/README.md
index 4a0a3930f2..c93988bad1 100644
--- a/macros/luatex/generic/blopentype/README.md
+++ b/macros/luatex/generic/blopentype/README.md
@@ -1,5 +1,5 @@
# blopentype
-Basic LuaTeX OpenType Handler
+Basic LuaTeX OpenType Manager
# Description
@@ -11,9 +11,9 @@ In his terse documentation for `PiTeX`, Paul Isambert lists, among the "mandator
| fonts.ptxlua | The Lua fontloader; should become independant some day. |
| foundry-settings.lua | Default settings for the fontloader. |
-Well: the day has come, and the fontloader has now become `blopentype`: a *Basic LuaTeX OpenType Handler*.
+Well: the day has come, and the fontloader has now become `blopentype`: a *Basic LuaTeX OpenType Manager*.
-The basic code is copied almost verbatim from Isambert's `PiTeX`, save the adoption of the filename extensions `ltm` for *LuaTeX macros*, `lts` for *LuaTeX scripts*, and `blot-sets.lua` for the basic basic settings.
+The basic code is copied almost verbatim from Isambert's `PiTeX`, save the adoption of the canonical filename extensions `tex` for *LuaTeX macros*, `lua` for *LuaTeX scripts*, and `blot-sets.lua` for the basic basic settings.
The required dependencies are Isambert packages [texapi](https://ctan.org/pkg/texapi), [YaX](https://ctan.org/pkg/yax) and [Gates](https://ctan.org/pkg/gates), as stated in `DEPENDS.txt`.
You may find an example of usage in the `blottest.[tex|pdf]` files, and some basic documentation in `blopentype.md`.
@@ -22,16 +22,17 @@ You may find an example of usage in the `blottest.[tex|pdf]` files, and some bas
The macros are still barely documented, and massively keep the names of their parent (`PiTeX`) package; that may be fixed some day.
-The font database is loaded at `$HOME/texmf/luatex/foundry/readable.txt`; it is not updated automatically after installing new fonts: you have to edit it manually, or else delete/rename(backup) it and rerun LuaTeX to rebuild it.
+The font database is stored at `$TEXMFLOCAL/texmf/luatex/blotfonts/readable.txt`.
+It is updated automatically after installing *and using* new fonts, but you may edit it, or else delete/rename(backup) the database by hand, and rerun LuaTeX to rebuild it.
-The character table for each typeface is stored in the `luatex/foundry` directory as a flat `lua` file; it would be nice to have it compiled as a `luac` file to save some space.
+The character table for each typeface is stored in the `luatex/blotfonts` directory as a flat `lua` file; it would be nice to have it compiled as a `luac/luc` file to save some space, some day.
Good luck, and happy LuaTeXing
# Authors
-Version 0.0.0 (C) 2022 Paul Isambert (massively) and Luis Rivera (minor surgeon; or rather: kludger).
+Version 0.0.2 (C) 2023 Paul Isambert (author) and Luis Rivera (maintainer).
LaTeX Project Public License, LPPL Version 1.3c 2008-05-04 or MIT License
-December 28, 2022 \ No newline at end of file
+June 29, 2023
diff --git a/macros/luatex/generic/blopentype/blopentype.md b/macros/luatex/generic/blopentype/blopentype.md
index a42d55ec48..651f57f281 100644
--- a/macros/luatex/generic/blopentype/blopentype.md
+++ b/macros/luatex/generic/blopentype/blopentype.md
@@ -1,24 +1,38 @@
-# Basic LuaTeX OpenType Handler Minimal User Guide
+# Basic LuaTeX OpenType Manager Minimal User Guide
-As for version 0.0.0 December 2022
+As of version 0.0.1 May 2023
-Fonts (fonts.ltm and fonts.lts)
-==================================
+Loading the macros
+==================
+
+This is a Plain TeX macro package, so simply type
+
+```
+\input blot
+```
+
+and you are halfway through: there are font parameter defaults, but no font is loaded
+automatically, since it must depend on your system; so you have to load fonts
+on your own.
+
+Fonts
+=====
The fontloader uses gates, but only superficially. They won't be
documented here.
To load a given font, you define it in YaX syntax with the `\setfont` command.
+Thus, the instruction:
-```\setfont <command>:<attributes>```
+```\setfont <fontcommand>:<attributes>```
-Sets <command> to call the font described in <attributes>; all defaults
-to the values of the `metafont` parameter. If `<command>` is `\mainfont`,
-as the name of the main font for the document, the font is called at once;
-any other `\command` requires explicit calls.
+sets <fontcommand> to call the font described in <attributes>; all new fonts default
+to the values of the `metafont` parameter described elsewhere.
+If `<fontcommand>` is `\mainfont`, the font is called at once;
+any other `\fontcommand` requires an explicit call.
-You may thing of `\setfont <command>` as similar to DEKTeX's `\font\cmr10 at 12pt`
-or whatever font definition, but now the call is to an array of font attributes.
+You may thing of `\setfont <fontcommand>` as similar to DEKTeX's `\font<fontcommand> <parameters>`,
+but now the call is to an array of font attributes, enumerated below.
`name`
The family name of the font; e.g. Palatino Linotype for the main text of
diff --git a/macros/luatex/generic/blopentype/luatex/blot-fonts.lua b/macros/luatex/generic/blopentype/luatex/blot-fonts.lua
index 638f83e984..940fc5de2d 100644
--- a/macros/luatex/generic/blopentype/luatex/blot-fonts.lua
+++ b/macros/luatex/generic/blopentype/luatex/blot-fonts.lua
@@ -129,6 +129,7 @@ local lfs = get_locals {lfs = "dir isdir isfile mkdir", kpse = "expand_var show_
-- Returns anything after the last dot, i.e. an extension.
function lfs.extension (s)
return str.lower(str.match(s, "%.([^%.]*)$"))
+-- return str.match(s, "%.([^%.]*)$")
end
local extensions = {
@@ -220,8 +221,8 @@ local normal_names = {}
for _, name in ipairs(settings.normal) do
normal_names[name] = true
end
-local local_path = lfs.expand_var("$TEXMFHOME")
-local foundry_path = lfs.ensure_dir (local_path, "tex", "luatex", "foundry")
+local local_path = lfs.expand_var("$TEXMFLOCAL")--:gsub(":",";")
+local foundry_path = lfs.ensure_dir (local_path, "tex", "luatex", "blotfonts")
-- local local_path = lfs.expand_var("$TEXMFHOME")
-- local foundry_path = lfs.ensure_dir (local_path, "fonts", "truetype", "public", "gfs")
local library_file = foundry_path .. "/" .. "readable.txt"
@@ -244,13 +245,19 @@ local function extract_font (file, names)
fi = fl.open
end
if not fi then
- fl.error("Can't open %s", file)
+-- fl.error("Can't open %s", file)
+ fl.error("\nCannot open file", file)
return
end
end
subname = name
else
fi = fl.open(file)
+ -- blot-fonts.lua:257: attempt to index a nil value (local 'fi')
+ if not fi then
+ print("\nCannot open file", file)
+ return
+ end
end
-- Getting the most precise information. Not necessarily the best
-- solution, but since the user can modify the library, it's not so bad.
@@ -282,6 +289,7 @@ end
-- only those that arent in the libraries are considered.
local fonts_done = {}
local function check_fonts (rep, tb)
+ if lfs.isdir(rep) then
for f in lfs.dir (rep) do
if f ~= "." and f ~= ".." then
f = str.gsub(rep, "/$", "") .. "/" .. f
@@ -308,6 +316,7 @@ local function check_fonts (rep, tb)
end
end
end
+ end
end
-- Writes the library to an external file.
@@ -355,6 +364,7 @@ end
-- If there is no library, we create it.
local font_paths = lfs.show_path("opentype fonts")
+font_paths = str.gsub(font_paths, ":", ";")
font_paths = str.gsub(font_paths, "\\", "/")
font_paths = str.gsub(font_paths, "/+", "/")
font_paths = str.gsub(font_paths, "!!", "")
@@ -398,6 +408,9 @@ local function load_library (lib)
LIB = str.gsub(LIB, ";%s*;", ";;")
LIB = str.gsub(LIB, ";+", ";")
LIB = str.gsub(LIB, "^;", "")
+ LIB = str.gsub(LIB, ":%s*:", "::")
+ LIB = str.gsub(LIB, ":+", ":")
+ LIB = str.gsub(LIB, "^:", "")
LIB = str.gsub(LIB, "%s+", " ")
LIB = lp.match(explode_semicolon, LIB)
diff --git a/macros/luatex/generic/blopentype/luatex/blot.tex b/macros/luatex/generic/blopentype/luatex/blot.tex
index 44a89e553e..bad87626b1 100644
--- a/macros/luatex/generic/blopentype/luatex/blot.tex
+++ b/macros/luatex/generic/blopentype/luatex/blot.tex
@@ -1,10 +1,11 @@
% blopentype: a basic luatex open type loader
%
% some (most) pitex macros still in place.- 30.12.2022
+% check history after `\endinput`
%
% User interface
%
-\message{This is blopentype, v0.0.0 December 2022}
+\message{This is blopentype, v0.0.2 June 2023}
\input luatex85.sty % deprecated 30.12.2022
\input yax % which itself \input's texapi
@@ -252,3 +253,8 @@
%
%
% Date: November 2011.
+%
+% --- blopentype history
+%
+% 28-06-2023 fixed bug in blot-fonts.lua which affected nix systems.
+% thanks to david.carlisle for useful patch. \ No newline at end of file