From 370853b6ba0be6e880b2f320268d4fefbd6aeef6 Mon Sep 17 00:00:00 2001 From: Norbert Preining 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. % % %<*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