From 370853b6ba0be6e880b2f320268d4fefbd6aeef6 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 14 Oct 2019 03:00:58 +0000
Subject: CTAN sync 201910140300

---
 macros/latex/contrib/nicematrix/nicematrix.dtx | 386 ++++++++++++++-----------
 1 file changed, 221 insertions(+), 165 deletions(-)

(limited to 'macros/latex/contrib/nicematrix/nicematrix.dtx')

diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index 831a7fca85..47271a5452 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{3.4}
-\def\myfiledate{2019/10/05}
+\def\myfileversion{3.5}
+\def\myfiledate{2019/10/13}
 %
 %
 %<*batchfile>
@@ -45,7 +45,7 @@ version 2005/12/01 or later.
 %</batchfile>
 %
 %<*driver>
-\documentclass[dvipsnames]{l3doc}% dvipsnames is for xcolor (loaded by Tikz, loaded by nicematrix)
+\documentclass[dvipsnames]{l3doc}% dvipsnames is for xcolor (loaded by Tikz)
 \VerbatimFootnotes
 \usepackage{xltxtra}
 \usepackage[xetex]{geometry}
@@ -114,10 +114,10 @@ c & c & b & a & e
 %
 % This package can be used with |xelatex|, |lualatex|, |pdflatex| but also by
 % the classical workflow |latex|-|dvips|-|ps2pdf| (or Adobe Distiller). Two or
-% three compilations may be necessary. This package requires and \textbf{loads} the
-% packages \pkg{expl3}, \pkg{l3keys2e}, \pkg{xparse}, \pkg{array}, \pkg{amsmath}
-% and \pkg{tikz}. It also loads the Tikz library \pkg{fit}. The final user only
-% has to load the extension with |\usepackage{nicematrix}|.
+% three compilations may be necessary. This package requires and \textbf{loads}
+% the packages \pkg{expl3}, \pkg{l3keys2e}, \pkg{xparse}, \pkg{array},
+% \pkg{amsmath} and \pkg{tikz}. It also loads the Tikz library \pkg{fit}. The
+% final user only has to load the extension with |\usepackage{nicematrix}|.
 %
 %
 % \medskip
@@ -227,10 +227,10 @@ c & c & b & a & e
 % instead of |l|, |c| and |r|. It's possible to use the constructions
 % |w{...}{...}|, |W{...}{...}|\footnote{However, for the columns of type |w| and
 % |W|, the cells are composed in math mode (in the environments of
-% \pkg{nicematrix}) whereas in |{array}| of \pkg{array}, they are composed in text mode.}, "|",
-% |>{...}|, |<{...}|, |@{...}|, |!{...}| and |*{n}{...}| but the letters |p|,
-% |m| and |b| should not be used. See p.~\pageref{NiceArray} the section
-% relating to |{NiceArray}|.
+% \pkg{nicematrix}) whereas in |{array}| of \pkg{array}, they are composed in
+% text mode.}, "|", |>{...}|, |<{...}|, |@{...}|, |!{...}| and |*{n}{...}| but
+% the letters |p|, |m| and |b| should not be used. See p.~\pageref{NiceArray}
+% the section relating to |{NiceArray}|.
 % 
 % 
 % \section{The continuous dotted lines}
@@ -550,10 +550,10 @@ c & c & b & a & e
 % \item The option |renew-dots|\par\nobreak
 %
 % With this option, the commands |\ldots|, |\cdots|, |\vdots|, |\ddots|,
-% |\iddots|\footnotemark[\thefniddots] and |\hdotsfor| are redefined within the environments
-% provided by \pkg{nicematrix} and behave like |\Ldots|, |\Cdots|, |\Vdots|,
-% |\Ddots|, |\Iddots| and |\Hdotsfor|; the command |\dots| (``automatic dots''
-% of |amsmath|) is also redefined to behave like |\Ldots|.
+% |\iddots|\footnotemark[\thefniddots] and |\hdotsfor| are redefined within the
+% environments provided by \pkg{nicematrix} and behave like |\Ldots|, |\Cdots|,
+% |\Vdots|, |\Ddots|, |\Iddots| and |\Hdotsfor|; the command |\dots|
+% (``automatic dots'' of |amsmath|) is also redefined to behave like |\Ldots|. 
 %
 % \item The option |renew-matrix|\par\nobreak 
 %
@@ -701,9 +701,8 @@ c & c & b & a & e
 % we have used the options |left-margin| and |right-margin|.\footnote{The
 % options |left-margin| and |right-margin| take dimensions as values but, if no
 % value is given, the default value is used, which is |\arraycolsep| (by
-% default: 5~pt). There is
-% also an option |margin| to fix both |left-margin| and |right-margin| to the
-% same value.}
+% default: 5~pt). There is also an option |margin| to fix both |left-margin| and
+% |right-margin| to the same value.}
 % \[\begin{pNiceMatrix}[
 %  create-extra-nodes,left-margin,right-margin,
 %  code-after = {\begin{tikzpicture}
@@ -756,7 +755,8 @@ c & c & b & a & e
 % In this case, if we want a control over the height of the rows, we can add a
 % |\strut| in each row of the array.
 % \[\begin{pNiceMatrix}[
-%  create-extra-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
+%  create-extra-nodes,left-margin,right-margin,extra-right-margin=3pt,
+%  extra-left-margin=3pt,
 %  code-after = {\begin{tikzpicture}
 %                   [every node/.style = {blend mode = multiply,
 %                                         inner sep = -\pgflinewidth/2},
@@ -777,7 +777,8 @@ c & c & b & a & e
 % \end{pNiceMatrix}\]
 %
 % \bigskip
-% We explain below how to fill the nodes created by \pkg{nicematrix} (cf. p. \pageref{highlight}).
+% We explain below how to fill the nodes created by \pkg{nicematrix} (cf. p.
+% \pageref{highlight}). 
 %
 % \section{The code-after}
 %
@@ -899,7 +900,8 @@ c & c & b & a & e
 % \bigskip
 % \section{The exterior row and columns}
 % The options |first-row|, |last-row|, |first-col| and |last-col| allow the
-% composition of exterior rows and columns in the environments of \pkg{nicematrix}.
+% composition of exterior rows and columns in the environments of
+% \pkg{nicematrix}. 
 % \label{exterior}
 %
 % A potential first row has the number $0$ (and not $1$). Idem for the potential
@@ -930,10 +932,10 @@ c & c & b & a & e
 % We have several remarks to do.
 % \begin{itemize}
 % \item For the environments with an explicit preamble (i.e. |{NiceArray}| and
-% its variants), no letter must be given in the preamble for the potential first
-% column and the potential last column: the first column will be automatically
-% (and necessarily) of type |R| and the last column will be automatically of
-% type |L|).
+% its variants), no letter must be given in that preamble for the potential
+% first column and the potential last column: the first column will be
+% automatically (and necessarily) of type |R| and the last column will be
+% automatically of % type |L|.
 % \item In an environment with an explicit preamble, the option |last-col| must
 % be used \emph{without} value: the number of columns will be automatically
 % computed from the preamble of the array.
@@ -957,7 +959,7 @@ c & c & b & a & e
 %                    ~emphase#code-for-first-col@ = \color{blue},
 %                    ~emphase#code-for-last-row@ = \color{green},
 %                    ~emphase#code-for-last-col@ = \color{magenta}}
-% $\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col]
+% $\begin{pNiceArray}{CC|CC}[first-row,last-row,first-col,last-col]
 %     & C_1    & C_2    & C_3    & C_4    &     \\
 % L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
 % L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
@@ -973,7 +975,7 @@ c & c & b & a & e
 %                    code-for-first-col = \color{blue},
 %                    code-for-last-row = \color{green},
 %                    code-for-last-col = \color{magenta}}
-% \[\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col]
+% \[\begin{pNiceArray}{CC|CC}[first-row,last-row,first-col,last-col]
 %     & C_1    & \multicolumn1C{C_2}    & C_3    & C_4    &     \\
 % L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
 % L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
@@ -997,10 +999,10 @@ c & c & b & a & e
 % the first and in the last row, he should use |!{\vline}| instead of \verb+|+
 % in the preamble of the array.} 
 % \item Logically, the potential option |columns-width| (described
-% p.~\pageref{width}) doesn't apply to the ``first column'' and ``last column''. 
-% \item For technical reasons, it's not possible to use the option of the command |\\|
-% after the ``first row'' or before the ``last row'' (the placement of the
-% delimiters would be wrong). 
+% p.~\pageref{width}) doesn't apply to the ``first column'' and ``last column''.
+% \item For technical reasons, it's not possible to use the option of the
+% command |\\| after the ``first row'' or before the ``last row'' (the placement
+% of the delimiters would be wrong). 
 % \end{itemize}
 % 
 % 
@@ -1051,8 +1053,10 @@ c & c & b & a & e
 % \end{NiceArray}\right)$
 %
 %
-% \bigskip
-% These dotted lines do \emph{not} extend in the potential exterior rows and columns.
+% \bigskip 
+% These dotted lines do \emph{not} extend in the potential exterior rows and
+% columns.
+%
 % 
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
@@ -1152,9 +1156,9 @@ c & c & b & a & e
 % |\arraycolsep| equal to $0$~pt).
 %
 % \bigskip
-% It's possible to give the value |auto| to the option |columns-width|: all the
-% columns of the array will have a width equal to the widest cell of the
-% array.\footnote{The result is achieved with only one compilation (but Tikz
+% It's possible to give the special value |auto| to the option |columns-width|:
+% all the columns of the array will have a width equal to the widest cell of 
+% the array.\footnote{The result is achieved with only one compilation (but Tikz
 % will have written informations in the |.aux| file and a message requiring a
 % second compilation will appear).}\par\nobreak 
 %
@@ -1173,8 +1177,8 @@ c & c & b & a & e
 % \end{pNiceMatrix}$
 % 
 % \bigskip
-% It's possible to fix the width of the columns of all the matrices of a current
-% scope with the command |\NiceMatrixOptions|.\par\nobreak
+% Without surprise, it's possible to fix the width of the columns of all the
+% matrices of a current scope with the command |\NiceMatrixOptions|.\par\nobreak
 %
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
@@ -1243,7 +1247,9 @@ c & c & b & a & e
 % The command |\Block| must be used in the upper leftmost cell of the array with
 % two arguments. The first argument is the size of the block with the syntax
 % $i$\verb|-|$j$ where $i$ is the number of rows of the block and $j$ its number
-% of columns. The second argument is the content of the block (composed in math mode).
+% of columns. The second argument is the content of the block (composed in math
+% mode).
+%
 %
 %
 % \medskip
@@ -1328,7 +1334,8 @@ c & c & b & a & e
 % \end{Verbatim}
 % %
 % \[\begin{bNiceArray}{CCCC|C}[small, last-col, 
-%                      code-for-last-col = \scriptscriptstyle, columns-width=3mm]
+%                      code-for-last-col = \scriptscriptstyle, 
+%                      columns-width=3mm]
 % 1 & -2 & 3 & 4 & 5 \\
 % 0 & 3  & 2 & 1 & 2 & L_2 \gets 2 L_1 - L_2 \\
 % 0 & 1  & 1 & 2 & 3 & L_3 \gets L_1 + L_3 \\
@@ -1338,8 +1345,8 @@ c & c & b & a & e
 %
 % \bigskip
 % One should note that the environment |{NiceMatrix}| with the option |small| is
-% not composed \emph{exactly} as the environment |{smallmatrix}|. Indeed, all the
-% environments of \pkg{nicematrix} are constructed upon |{array}| (of the
+% not composed \emph{exactly} as the environment |{smallmatrix}|. Indeed, all
+% the environments of \pkg{nicematrix} are constructed upon |{array}| (of the
 % extension \pkg{array}) whereas the environment |{smallmatrix}| is constructed
 % directly with an |\halign| of TeX.
 %
@@ -1516,8 +1523,8 @@ c & c & b & a & e
 % 
 % \label{empty-cells}
 % An instruction like |\Ldots|, |\Cdots|, etc. tries to determine the first
-% non-empty cells on both sides. However, an empty cell is not necessarily a cell
-% with no TeX content (that is to say a cell with no token between the two
+% non-empty cells on both sides. However, an empty cell is not necessarily a
+% cell with no TeX content (that is to say a cell with no token between the two 
 % ampersands~|&|). Indeed, a cell with contents |\hspace*{1cm}| may be
 % considered as empty.
 %
@@ -1558,25 +1565,24 @@ c & c & b & a & e
 % The environment |{array}| inserts an horizontal space equal to |\arraycolsep|
 % before and after each column. In particular, there is a space equal to
 % |\arraycolsep| before and after the array. This feature of the environment
-% |{array}| was probably not a good idea.\footnote{In the documentation of
+% |{array}| was probably not a good idea\footnote{In the documentation of
 % |{amsmath}|, we can read: {\itshape The extra space of |\arraycolsep| that
 % \pkg{array} adds on each side is a waste so we remove it [in |{matrix}|]
 % (perhaps we should instead remove it from array in general, but that's a
 % harder task).} It's possible to suppress these spaces for a given environment
-% |{array}| with a construction like |\begin{array}{@{}ccccc@{}}|.}
-%
-% The environment |{matrix}| and its variants (|{pmatrix}|, |{vmatrix}|, etc.)
-% of \pkg{amsmath} prefer to delete these spaces with explicit instructions
-% |\hskip -\arraycolsep| and |{NiceArray}| does likewise. 
-%
-% However, the user can change this behaviour with the boolean option
-% |exterior-arraycolsep| of the command |\NiceMatrixOptions|. With this option,
-% |{NiceArray}| will insert the same horizontal spaces as the environment
-% |{array}|.  
-%
-% This option is only for ``compatibility'' since the package \pkg{nicematrix}
-% provides a more precise control with the options |left-margin|,
-% |right-margin|, |extra-left-margin| and |extra-right-margin|. 
+% |{array}| with a construction like
+% |\begin{array}{@{}ccccc@{}}...\end{array}|.}. 
+% The environment |{matrix}| of \pkg{amsmath} and its variants (|{pmatrix}|,
+% |{vmatrix}|, etc.) of \pkg{amsmath} prefer to delete these spaces with
+% explicit instructions |\hskip -\arraycolsep|. The extension \pkg{nicematrix}
+% does the same in all its environments, |{NiceArray}| included. However, if the
+% user wants the environment |{NiceArray}| behaving by default like the
+% environment |{array}| of \pkg{array} (for example, when adapting an existing
+% document) it's possible to control this behaviour with the option
+% |exterior-arraycolsep|, set by the command |\NiceMatrixOptions|. With this
+% option, exterior spaces of length |\arraycolsep| will be inserted in the
+% environments |{NiceArray}| (the other environments of \pkg{nicematrix} are not
+% affected). 
 %
 %
 % \subsection{The class option draft}
@@ -1591,7 +1597,9 @@ c & c & b & a & e
 % That's why, when the class option |draft| is used, the dotted lines are not
 % drawn, for a faster compilation. 
 % 
-% \subsection{A technical problem with the argument of \textbackslash\textbackslash}
+% \subsection{A technical problem with the argument of
+% \textbackslash\textbackslash}
+% 
 %
 % For technical, reasons, if you use the optional argument of the command |\\|,
 % the vertical space added will also be added to the ``normal'' node
@@ -1847,7 +1855,8 @@ c & c & b & a & e
 % \end{Verbatim}
 % 
 % \arrayrulecolor{cyan}
-% \[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle}]
+% \[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,
+%       code-for-last-col={\scriptstyle}]
 % 1      & 1 & 1 &\Cdots &   & 1      & 0      & \\
 % 0      & 1 & 0 &\Cdots &   & 0      &        & L_2 \gets L_2-L_1 \\
 % 0      & 0 & 1 &\Ddots &   & \Vdots &        & L_3 \gets L_3-L_1 \\
@@ -1862,8 +1871,9 @@ c & c & b & a & e
 % 
 %
 % \medskip
-% In the following example, we use |{NiceMatrixBlock}| with the option |auto-columns-width| because
-% we want the same automatic width for all the columns of the matrices.
+% In the following example, we use |{NiceMatrixBlock}| with the option
+% |auto-columns-width| because we want the same automatic width for all the
+% columns of the matrices. 
 %
 % \bigskip
 % \begin{BVerbatim}
@@ -1952,7 +1962,8 @@ c & c & b & a & e
 % of the matrix (with the Tikz key ``|name suffix|'', it's easy to use the
 % ``large nodes''). 
 %
-% In order to have the continuity of the lines, we have to set |inner sep = -\pgflinewidth/2|.
+% In order to have the continuity of the lines, we have to set
+%  |inner sep = -\pgflinewidth/2|.
 %
 % \begin{Verbatim}
 % $\begin{pNiceArray}{>{\strut}CCCC}%
@@ -2032,8 +2043,9 @@ c & c & b & a & e
 % 
 %
 % \bigskip
-% This code fails with |latex|-|dvips|-|ps2pdf| because Tikz for |dvips|, as for now, doesn't support blend modes. However, the
-% following code, in the preamble, should activate blend modes in this way of compilation.
+% This code fails with |latex|-|dvips|-|ps2pdf| because Tikz for |dvips|, as for
+% now, doesn't support blend modes. However, the following code, in the
+% preamble, should activate blend modes in this way of compilation. 
 %
 %
 % \begin{scope} \small
@@ -2071,7 +2083,8 @@ c & c & b & a & e
 % \end{pNiceArray}\]
 % 
 % \bigskip
-% If we want to highlight each row of this matrix, we can use the previous technique three times.
+% If we want to highlight each row of this matrix, we can use the previous
+% technique three times. 
 %
 % \begin{Verbatim}
 % \tikzset{myoptions/.style={remember picture, 
@@ -2117,7 +2130,8 @@ c & c & b & a & e
 % \end{pNiceArray}\]
 %
 % \medskip
-% The result may seem disappointing. We can improve it by using the ``medium nodes'' instead of the ``normal nodes''.
+% The result may seem disappointing. We can improve it by using the ``medium
+% nodes'' instead of the ``normal nodes''. 
 %
 % \begin{Verbatim}
 % \begin{tikzpicture}[myoptions, ~emphase#name suffix = -medium@]
@@ -2149,7 +2163,8 @@ c & c & b & a & e
 %                           
 % \vspace{1cm}
 % 
-% In the following example, we use the ``large nodes'' to highlight a zone of the matrix.\par\nobreak
+% In the following example, we use the ``large nodes'' to highlight a zone of
+% the matrix.\par\nobreak 
 % \begin{Verbatim}
 % \begin{pNiceArray}{>{\strut}CCCC}%
 %    [create-extra-nodes,margin,extra-margin=2pt,
@@ -2189,7 +2204,8 @@ c & c & b & a & e
 % 
 % \subsection{Direct utilisation of the Tikz nodes}
 %
-% In the following example, we illustrate the mathematical product of two matrices.
+% In the following example, we illustrate the mathematical product of two
+% matrices. 
 %
 % \medskip
 % The utilisation of |{NiceMatrixBlock}| with the option |auto-columns-width|
@@ -2210,7 +2226,8 @@ c & c & b & a & e
 % & 
 % \end{Verbatim}
 %
-% The matrix $B$ has a ``first row'' (for $C_j$) and that's why we use the key |first-row|.
+% The matrix $B$ has a ``first row'' (for $C_j$) and that's why we use the key
+% |first-row|. 
 % \begin{Verbatim}
 % \begin{bNiceArray}{C>{\strut}CCCC}[name=B,first-row]
 %       &        & C_j \\
@@ -2315,7 +2332,8 @@ c & c & b & a & e
 % Of course, the package \pkg{nicematrix} uses the features of the package
 % \pkg{array}. It tries to be independant of its implementation. Unfortunately,
 % it was not possible to be strictly independant: the package \pkg{nicematrix}
-% relies upon the fact that the package |{array}| uses |\ialign| to begin the |\halign|.
+% relies upon the fact that the package |{array}| uses |\ialign| to begin the
+% |\halign|. 
 % 
 % \smallskip
 % The desire to do no modification to existing code leads to complications in
@@ -2323,9 +2341,10 @@ c & c & b & a & e
 %
 % \subsection{Declaration of the package and extensions loaded}
 %
-% First, \pkg{tikz} and the Tikz library |fit| are loaded before the |\ProvidesExplPackage|.
-% They are loaded this way because |\usetikzlibrary| in |expl3| code fails.\footnote{cf.
-% |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|} 
+% First, \pkg{tikz} and the Tikz library |fit| are loaded before the
+% |\ProvidesExplPackage|. They are loaded this way because |\usetikzlibrary| in
+% |expl3| code fails.\footnote{cf.
+% |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|}  
 % 
 %    \begin{macrocode}
 %<@@=nm>
@@ -2374,8 +2393,8 @@ c & c & b & a & e
 % \bigskip
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_error:n { \msg_error:nn { nicematrix } }
-\cs_new_protected:Npn \@@_error:nn { \msg_error:nn { nicematrix } }
-\cs_new_protected:Npn \@@_error:nnn { \msg_error:nnn { nicematrix } }
+\cs_new_protected:Npn \@@_error:nn { \msg_error:nnn { nicematrix } }
+\cs_new_protected:Npn \@@_error:nnn { \msg_error:nnnn { nicematrix } }
 \cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { nicematrix } }
 \cs_new_protected:Npn \@@_fatal:nn { \msg_fatal:nn { nicematrix } }
 \cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { nicematrix } }
@@ -2546,7 +2565,8 @@ c & c & b & a & e
 \dim_set:Nn \l_@@_inter_dots_dim { 0.45 em }
 %    \end{macrocode}
 % The length |\l_@@_radius_dim| is the radius of the dots for the dotted lines.
-% The default value is 0.34~pt but it will changed if the option |small| is used.
+% The default value is 0.34~pt but it will changed if the option |small| is
+% used. 
 %    \begin{macrocode}
 \dim_new:N \l_@@_radius_dim
 \dim_set:Nn \l_@@_radius_dim { 0.53 pt }
@@ -2699,20 +2719,21 @@ c & c & b & a & e
 % (|\group_begin:|--|\group_end:|) and we extract the two command names which
 % are in the toks |\@temptokena|. However, this extraction can be done only
 % when \pkg{siunitx} is loaded (and it may be loaded after \pkg{nicematrix})
-% and, in fact, after the beginning of the document --- because some instructions of
-% \pkg{siunitx} are executed in a |\AtBeginDocument|). That's why this
-% extraction will be done only at the first utilisation of an environment of
-% \pkg{nicematrix} with the command |\@@_adapt_S_column:|. 
+% and, in fact, after the beginning of the document --- because some
+% instructions of \pkg{siunitx} are executed in a |\AtBeginDocument|). That's
+% why this extraction will be done only at the first utilisation of an
+% environment of \pkg{nicematrix} with the command |\@@_adapt_S_column:|. 
 %    \begin{macrocode}
 \cs_set_protected:Npn \@@_adapt_S_column:
   {
 %    \end{macrocode}
 % In the preamble of the LaTeX document, the boolean |\c_@@_siunitx_loaded_bool|
-% won't be known. That's why we test the existence of |\c_@@_siunitx_loaded_bool|
-% and not its value.\footnote{Indeed, \pkg{nicematrix} may be used
-% in the preamble of the LaTeX document. For example, in this document, we compose a
-% matrix in the box |\ExampleOne| before loading \pkg{arydshln} (because
-% \pkg{arydshln} is not totally compatible with \pkg{nicematrix}).}
+% won't be known. That's why we test the existence of
+% |\c_@@_siunitx_loaded_bool| and not its value.\footnote{Indeed,
+% \pkg{nicematrix} may be used in the preamble of the LaTeX document. For
+% example, in this document, we compose a matrix in the box |\ExampleOne| before
+% loading \pkg{arydshln} (because \pkg{arydshln} is not totally compatible with
+% \pkg{nicematrix}).} 
 %    \begin{macrocode}   
     \bool_if:NT \c_@@_siunitx_loaded_bool
       { 
@@ -2736,8 +2757,8 @@ c & c & b & a & e
         \tl_new:N \c_@@_table_print_tl
         \tl_gset:Nx \c_@@_table_print_tl { \tl_item:Nn \g_tmpa_tl { -1 } }
 %    \end{macrocode}
-% The token lists |\c_@@_table_collect_begin_tl| and |\c_@@_table_print_tl| contain
-% now the two commands of \pkg{siunitx}.
+% The token lists |\c_@@_table_collect_begin_tl| and |\c_@@_table_print_tl|
+% contain now the two commands of \pkg{siunitx}.
 % 
 % \smallskip
 % If the adaptation has been done, the command |\@@_adapt_S_column:| becomes
@@ -3466,7 +3487,6 @@ c & c & b & a & e
 %   \begin{macrocode}
 \cs_new_protected:Npn \@@_pre_array:
   {
-    \tl_clear:N \g_@@_code_after_tl
 %    \end{macrocode}
 % If the option |small| is used, we have to do some tuning. In particular, we
 % change the value of |\arraystretch| (this parameter is used in the
@@ -3494,7 +3514,8 @@ c & c & b & a & e
 % \bigskip
 % The environment |{array}| uses internally the command |\ialign|. We change the
 % definition of |\ialign| for several reasons. In particular, |\ialign| sets
-% |\everycr| to |{ }| and we \emph{need} to have to change the value of |\everycr|.
+% |\everycr| to |{ }| and we \emph{need} to have to change the value of
+% |\everycr|. 
 %    \begin{macrocode}
     \cs_set:Npn \ialign 
       { 
@@ -3536,9 +3557,9 @@ c & c & b & a & e
 %    \end{macrocode}
 % After its first utilisation, the definition of |\ialign| will revert
 % automatically to its default definition. With this programmation, we will
-% have, in the cells of the array, a clean version of |\ialign|.\footnote{The user will
-% probably not employ directly |\ialign| in the array...  but more likely
-% environments that utilize |\ialign| internally (e.g.: |{substack}|).} 
+% have, in the cells of the array, a clean version of |\ialign|.\footnote{The
+% user will probably not employ directly |\ialign| in the array...  but more
+% likely environments that utilize |\ialign| internally (e.g.: |{substack}|).}
 %    \begin{macrocode}
         \cs_set:Npn \ialign 
            { 
@@ -3622,7 +3643,8 @@ c & c & b & a & e
 %    \end{macrocode}
 % We nullify the definitions of the column types |w| and |W| before their
 % redefinition because we want to avoid a warning in the log file for a
-% redefinition of a column type. We must put |\relax| and not |\prg_do_nothing:|.
+% redefinition of a column type. We must put |\relax| and not
+% |\prg_do_nothing:|.
 %    \begin{macrocode}
     \cs_set_eq:NN \NC@find@w \relax
     \cs_set_eq:NN \NC@find@W \relax
@@ -3676,8 +3698,8 @@ c & c & b & a & e
                 \int_gset_eq:NN \g_@@_last_vdotted_col_int \g_@@_col_int
                 \tl_gput_right:Nx \g_@@_code_after_tl
 %    \end{macrocode}
-% The command |\@@_vdottedline:n| is protected, and, therefore, won't be expanded
-% before writing on |\g_@@_code_after_tl|.
+% The command |\@@_vdottedline:n| is protected, and, therefore, won't be
+% expanded before writing on |\g_@@_code_after_tl|.
 %    \begin{macrocode}
                   { \@@_vdottedline:n { \int_use:N \g_@@_col_int } }
               }
@@ -3785,7 +3807,8 @@ c & c & b & a & e
       }
 %    \end{macrocode}
 %
-% The code in |\@@_pre_array:| is common to |{NiceArrayWithDelims}| and |{NiceMatrix}|.
+% The code in |\@@_pre_array:| is common to |{NiceArrayWithDelims}| and
+% |{NiceMatrix}|. 
 %    \begin{macrocode}
     \@@_pre_array:
 %    \end{macrocode}
@@ -3825,8 +3848,7 @@ c & c & b & a & e
 % 
 % \medskip
 % The array will be composed in a box (named |\l_@@_the_array_box|) because we
-% have to do manipulations concerning the potential exterior rows (such
-% construction in a box is not possible for |{NiceMatrix}|).
+% have to do manipulations concerning the potential exterior rows.
 %    \begin{macrocode}
     \box_clear_new:N \l_@@_the_array_box
 %    \end{macrocode}
@@ -3855,8 +3877,8 @@ c & c & b & a & e
       }
 %    \end{macrocode}
 % Here is the beginning of the box which will contain the array. The
-% |\hbox_set_end:| corresponding to this |\hbox_set:Nw| will be in the second part of
-% the environment (and the closing |\c_math_toggle_token| also).
+% |\hbox_set_end:| corresponding to this |\hbox_set:Nw| will be in the second
+% part of the environment (and the closing |\c_math_toggle_token| also).
 %    \begin{macrocode}
     \hbox_set:Nw \l_@@_the_array_box
     \skip_horizontal:n \l_@@_left_margin_dim 
@@ -3875,9 +3897,9 @@ c & c & b & a & e
 % the columns must have the same width (if the user has used the option
 % |columns-width| or the option |auto-column-width| of the environment
 % |{NiceMatrixBlock}|), we add a row in the array to fix the width of the
-% columns and construct the ``|col|'' nodes |nm-|\textsl{a}|-col-|\textsl{j} (these
-% nodes will be used by the horizontal open dotted lines and by the potential
-% commands |\@@_vdottedline:n|).
+% columns and construct the ``|col|'' nodes |nm-|\textsl{a}|-col-|\textsl{j}
+% (these nodes will be used by the horizontal open dotted lines and by the
+% potential commands |\@@_vdottedline:n|).
 % 
 %    \begin{macrocode}
   { 
@@ -3929,7 +3951,7 @@ c & c & b & a & e
           { 
              & 
              \omit
-%    \end{marocode}
+%    \end{macrocode}
 % The incrementation of the counter |\g_tmpa_int| must be done after the |\omit|
 % of the cell.
 %    \begin{macrocode}
@@ -4006,8 +4028,9 @@ c & c & b & a & e
 % \bigskip
 % Now, we begin the real construction in the output flow of TeX. First, we take
 % into account a potential ``first column'' (we remind that this ``first
-% column'' has been constructed in an overlapping position and that we have computed
-% its width in |\g_@@_width_first_col_dim|: see p.~\pageref{overlap-left}).
+% column'' has been constructed in an overlapping position and that we have
+% computed its width in |\g_@@_width_first_col_dim|: see
+% p.~\pageref{overlap-left}). 
 %    \begin{macrocode}
     \int_compare:nNnT \l_@@_first_col_int = \c_zero_int
       { 
@@ -4028,7 +4051,7 @@ c & c & b & a & e
             \str_if_eq:VnTF \l_@@_pos_env_str { t }
               {
                 \box_move_up:nn 
-                  { \l_tmpa_dim - \g_@@_ht_row_zero_dim + \g_@@_ht_row_one_dim  }
+                  { \l_tmpa_dim - \g_@@_ht_row_zero_dim + \g_@@_ht_row_one_dim }
               }
           }
           {
@@ -4098,7 +4121,8 @@ c & c & b & a & e
 %
 % 
 % \interitem
-% Here is the preamble for the ``first column'' (if the user uses the key |first-col|)
+% Here is the preamble for the ``first column'' (if the user uses the key
+% |first-col|) 
 %    \begin{macrocode}
 \tl_const:Nn \c_@@_preamble_first_col_tl
   {
@@ -4173,7 +4197,8 @@ c & c & b & a & e
 %    \end{macrocode}
 %
 %
-% Here is the preamble for the ``last column'' (if the user uses the key |last-col|).
+% Here is the preamble for the ``last column'' (if the user uses the key
+% |last-col|).
 %    \begin{macrocode}
 \tl_const:Nn \c_@@_preamble_last_col_tl
   {
@@ -4258,7 +4283,8 @@ c & c & b & a & e
 % \interitem
 % The environment |{NiceArray}| is constructed upon the environment
 % |{NiceArrayWithDelims}| but, in fact, there is a flag |\l_@@_NiceArray_bool|.
-% In |{NiceArrayWithDelims}|, some special code will be executed if this flag is raised.
+% In |{NiceArrayWithDelims}|, some special code will be executed if this flag is
+% raised. 
 %    \begin{macrocode}
 \NewDocumentEnvironment { NiceArray } { }
   { 
@@ -4377,9 +4403,9 @@ c & c & b & a & e
 % \bigskip
 % \subsection{How to know whether a cell is ``empty''}
 %
-% The conditionnal |\@@_if_not_empty_cell:nnT| tests whether a cell is empty. The
-% first two arguments must be LaTeX3 counters for the row and the column of the
-% considered cell. 
+% The conditionnal |\@@_if_not_empty_cell:nnT| tests whether a cell is empty.
+% The first two arguments must be LaTeX3 counters for the row and the column of
+% the considered cell. 
 %    \begin{macrocode}
 \prg_set_conditional:Npnn \@@_if_not_empty_cell:nn #1 #2 { T , TF }
   { 
@@ -4387,11 +4413,12 @@ c & c & b & a & e
 % First, we want to test whether the cell is in the virtual sequence of
 % ``non-empty'' cells. There are several important remarks:
 % \begin{itemize}
-% \item we don't use a |expl3| sequence for efficiency ;
+% \item we don't use a |expl3| sequence for efficiency;
 % \item the ``non-empty'' cells in this sequence are not, in fact, all the
 % non-empty cells of the array: on the contrary they are only cells declared
 % as non-empty for a special reason (as of now, there are only cells which are
-% on a dotted line which is already drawn or which will be drawn ``just after'') ;
+% on a dotted line which is already drawn or which will be drawn ``just
+% after''); 
 % \item the flag |\l_tmpa_bool| will be raised when the cell is actually on
 % this virtual sequence.
 % \end{itemize}
@@ -4673,8 +4700,8 @@ c & c & b & a & e
 % coordinates of one extremity of the line; 
 % \item |\l_@@_final_i_int| and |\l_@@_final_j_int| which are the coordinates of
 % the other extremity of the line; 
-% \item |\l_@@_initial_open_bool| and |\l_@@_final_open_bool| to indicate whether
-% the extremities are open or not. 
+% \item |\l_@@_initial_open_bool| and |\l_@@_final_open_bool| to indicate
+% whether the extremities are open or not. 
 % \end{itemize}
 %
 %    \begin{macrocode}       
@@ -5219,10 +5246,12 @@ c & c & b & a & e
 % \bigskip
 % \subsection{The actual instructions for drawing the dotted line with Tikz}
 %
-% The command |\@@_draw_tikz_line:| draws the line using four implicit arguments: 
+% The command |\@@_draw_tikz_line:| draws the line using four implicit
+% arguments:  
 %
-% \quad |\g_@@_x_initial_dim|, |\g_@@_y_initial_dim|, |\g_@@_x_final_dim| and |\g_@@_y_final_dim|. 
-% These variables are global for technical reasons: their first affectation was in an instruction |\tikz|.
+% \quad |\g_@@_x_initial_dim|, |\g_@@_y_initial_dim|, |\g_@@_x_final_dim| and
+% |\g_@@_y_final_dim|. These variables are global for technical reasons: their
+% first affectation was in an instruction |\tikz|. 
 %
 %    \begin{macrocode}
 \cs_new_protected:Nn \@@_draw_tikz_line:
@@ -5578,21 +5607,30 @@ c & c & b & a & e
     \dim_zero_new:N \g_@@_y_final_dim
     \bool_set_false:N \l_@@_initial_open_bool
     \bool_set_false:N \l_@@_final_open_bool
-    \begin { tikzpicture }
-       \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
-       \tikz@parse@node \pgfutil@firstofone ( i )
-       \dim_gset:Nn \g_@@_x_initial_dim \pgf@x
-       \dim_gset:Nn \g_@@_y_initial_dim \pgf@y
-       \tikz@parse@node \pgfutil@firstofone ( f )
-       \dim_gset:Nn \g_@@_x_final_dim \pgf@x
-       \dim_gset:Nn \g_@@_y_final_dim \pgf@y
-    \end { tikzpicture }  
-    \@@_draw_tikz_line:
+    \bool_if:nTF
+      {
+        \cs_if_exist_p:c { pgf@sh@ns@nm - \int_use:N \g_@@_env_int - #1 }  
+        && 
+        \cs_if_exist_p:c { pgf@sh@ns@nm - \int_use:N \g_@@_env_int - #2 } 
+      }
+      {
+        \begin { tikzpicture }
+           \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
+           \tikz@parse@node \pgfutil@firstofone ( i )
+           \dim_gset:Nn \g_@@_x_initial_dim \pgf@x
+           \dim_gset:Nn \g_@@_y_initial_dim \pgf@y
+           \tikz@parse@node \pgfutil@firstofone ( f )
+           \dim_gset:Nn \g_@@_x_final_dim \pgf@x
+           \dim_gset:Nn \g_@@_y_final_dim \pgf@y
+        \end { tikzpicture }  
+        \@@_draw_tikz_line:
+      }
+      { \@@_error:nnn { unknown~cell~for~line~in~code-after } { #1 } { #2 } }
   }
 %    \end{macrocode}
 % 
 % The commands |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, and |\Iddots| don't use
-% this command because they have to do other settings (for example, the diagonal 
+% this command because they have to do other settings (for example, the diagonal
 % lines must be parallelized). 
 %
 % \bigskip
@@ -5608,20 +5646,16 @@ c & c & b & a & e
 % We want the horizontal lines at the same position\footnote{In fact, almost the
 % same position because of the width of the line: the width of a dotted line is
 % not the same as the width of a line created by |\hline|.} as the line created
-% by |\hline| (or |\hdashline| of \pkg{arydshln}). To this end, we construct a
-% ``false row'' and, in this row, we create a Tikz node (|\coordinate|) that
-% will be used to have the $y$-value of the line.
-% 
-%    \begin{macrocode}
-\cs_generate_variant:Nn \dim_set:Nn { N v }
-%    \end{macrocode}
+% by |\hline| (or |\hdashline| of \pkg{arydshln}). That's why we use a
+% |\noalign| to insert a box with a |\dotfill|.
 %
 % 
+% 
 % \medskip
-% Some extensions, like the extension \pkg{doc}, do a redefinition of the command
-% |\dotfill| of LaTeX. That's why we define a command |\@@_dotfill:| as we wish.
-% We test whether we are in draft mode because, in this case, we don't draw the
-% dotted lines.
+% Some extensions, like the extension \pkg{doc}, do a redefinition of the
+% command |\dotfill| of LaTeX. That's why we define a command |\@@_dotfill:| as
+% we wish. We test whether we are in draft mode because, in this case, we don't
+% draw the dotted lines.
 %    \begin{macrocode}
 \bool_if:NTF \c_@@_draft_bool
   { \cs_set_eq:NN \@@_dotfill: \prg_do_nothing: }
@@ -5646,7 +5680,6 @@ c & c & b & a & e
             \c_math_toggle_token
           } 
         \hfill 
-        \skip_horizontal:n \c_zero_dim
       }
   }
 %    \end{macrocode}
@@ -5659,10 +5692,19 @@ c & c & b & a & e
       { 
         \bool_gset_true:N \g_@@_extra_nodes_bool
         \cs_if_exist:cTF { @@_width_ \int_use:N \g_@@_env_int }
-          { \dim_set:Nv \l_tmpa_dim { @@_width_ \int_use:N \g_@@_env_int } }
+          { \dim_set_eq:Nc \l_tmpa_dim { @@_width_ \int_use:N \g_@@_env_int } }
           { \dim_set:Nn \l_tmpa_dim { 5 mm } }
         \hbox_overlap_right:n 
-          { 
+          {
+            \bool_if:nT 
+              {
+                \l_@@_NiceArray_bool
+                    &&
+                ! \l_@@_exterior_arraycolsep_bool
+                    &&
+                \int_compare_p:nNn \l_@@_first_col_int > \c_zero_int
+              }
+              { \skip_horizontal:n { - \arraycolsep } } 
             \hbox_to_wd:nn 
               { 
                 \l_tmpa_dim + 2 \arraycolsep 
@@ -5695,7 +5737,8 @@ c & c & b & a & e
             \bool_set_true:N \l_@@_initial_open_bool 
             \bool_set_true:N \l_@@_final_open_bool 
 %    \end{macrocode}
-% In order to have the coordinates of the line to draw, we use the ``large nodes''.
+% In order to have the coordinates of the line to draw, we use the ``large
+% nodes''. 
 %    \begin{macrocode}
             \begin { tikzpicture } [ remember~picture ]
               \tikz@parse@node\pgfutil@firstofone
@@ -5769,8 +5812,8 @@ c & c & b & a & e
 % preamble.
 %
 % Here is the definition of |\@@_vline:|. This definition \emph{must} be
-% protected because you don't want that macro expanded during the construction of
-% the preamble (the tests must be effective in each row and not once when the
+% protected because you don't want that macro expanded during the construction
+% of the preamble (the tests must be effective in each row and not once when the
 % preamble is constructed).
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_vline:
@@ -5999,8 +6042,9 @@ c & c & b & a & e
 % 
 % \bigskip
 % For ``large nodes'', the exterior rows and columns don't interfer.
-% That's why the loop over the rows will start at 1 and the loop over the columns
-% will stop at $|\g_@@_col_int|$ (and not |\g_@@_col_total_int|). Idem for the rows.
+% That's why the loop over the rows will start at 1 and the loop over the
+% columns will stop at $|\g_@@_col_int|$ (and not |\g_@@_col_total_int|). Idem
+% for the rows. 
 %     \begin{macrocode}
       \int_set:Nn \l_@@_first_row_int 1
       \int_set:Nn \l_@@_first_col_int 1
@@ -6189,11 +6233,11 @@ c & c & b & a & e
 % has no direct link with the environment |{NiceMatrixBlock}|.
 % 
 % The following command will be linked to |\Block| in the environments of
-% \pkg{nicematrix}. We define it with |\NewExpandableDocumentCommand| of \pkg{xparse}
-% because it has an optionnal argument between |<| and |>| (for TeX instructions
-% put before the math mode of the label) and because it must be expandable since
-% it reduces (in the case of a block of only one row) to a command
-% |\multicolumn|. 
+% \pkg{nicematrix}. We define it with |\NewExpandableDocumentCommand| of
+% \pkg{xparse} because it has an optionnal argument between |<| and |>| (for TeX
+% instructions put before the math mode of the label) and because it must be
+% expandable since it reduces (in the case of a block of only one row) to a
+% command |\multicolumn|. 
 %    \begin{macrocode}
 \NewExpandableDocumentCommand \@@_Block: { m D < > { } m }
   {
@@ -6202,8 +6246,8 @@ c & c & b & a & e
 %    \end{macrocode}
 % 
 % \medskip
-% The first argument of |\@@_Block:| (which is required) has a special syntax. It
-% must be of the form $i$|-|$j$ where $i$ and $j$ are the size (in rows and
+% The first argument of |\@@_Block:| (which is required) has a special syntax.
+% It must be of the form $i$|-|$j$ where $i$ and $j$ are the size (in rows and 
 % columns) of the block.
 %    \begin{macrocode}
 \cs_new:Npn \@@_Block_i #1-#2 \q_stop
@@ -6238,7 +6282,8 @@ c & c & b & a & e
 %    \end{macrocode}
 %
 % \medskip
-% The command |\@@_Block_iii:nnnn| is for the case of a block of $n$~rows with $n>1$.
+% The command |\@@_Block_iii:nnnn| is for the case of a block of $n$~rows with
+% $n>1$. 
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_Block_iii:nnnn #1 #2 #3 #4
   {
@@ -6264,8 +6309,8 @@ c & c & b & a & e
 %
 % \medskip
 % The command |\@@_gobble_ampersands:n| will gobble $n$ ampersands (and also the
-% spaces) where $n$ is the argument of the command. This command is fully expandable
-% and we need this feature.
+% spaces) where $n$ is the argument of the command. This command is fully
+% expandable and we need this feature.
 %    \begin{macrocode}
 \group_begin:
   \char_set_catcode_letter:N \&
@@ -6362,6 +6407,17 @@ c & c & b & a & e
 %
 % \subsection{Error messages of the package}
 %
+%
+%    \begin{macrocode}
+\@@_msg_new:nn { unknown~cell~for~line~in~code-after }
+  {
+    Your~command~\token_to_str:N\line\{#1\}\{#2\}~in~the~'code-after'~
+    can't~be~executed~because~a~Tikz~node~doesn't~exist.\\
+    If~you~go~on~this~command~will~be~ignored.
+  }
+%    \end{macrocode}
+%
+%
 %    \begin{macrocode}
 \@@_msg_new:nn { last-col~non~empty~for~NiceArray }
   {
@@ -6420,8 +6476,7 @@ c & c & b & a & e
 %    \begin{macrocode}
 \@@_msg_new:nn { Yet~in~env }
   { 
-    Environments~\{NiceArray\}~(or~\{NiceMatrix\},~etc.)~can't~be~
-    nested.\\
+    Environments~\{NiceArray\}~(or~\{NiceMatrix\},~etc.)~can't~be~nested.\\ 
     This~error~is~fatal.
   }
 %    \end{macrocode}
@@ -6902,7 +6957,8 @@ c & c & b & a & e
 % Following a discussion on TeX StackExchange\footnote{cf.
 % |tex.stackexchange.com/questions/510841/nicematrix-and-tikz-external-optimize|}, 
 % optimization of Tikz externalization is disabled in the environments of
-% \pkg{nicematrix} when the class \cls{standalone} or the package \pkg{standalone} is used.
+% \pkg{nicematrix} when the class \cls{standalone} or the package
+% \pkg{standalone} is used. 
 % 
 % 
 % 
-- 
cgit v1.2.3

