texlive[52573] Master/texmf-dist: nicematrix (29oct19)
commits+karl at tug.org
commits+karl at tug.org
Tue Oct 29 22:24:28 CET 2019
Revision: 52573
http://tug.org/svn/texlive?view=revision&revision=52573
Author: karl
Date: 2019-10-29 22:24:28 +0100 (Tue, 29 Oct 2019)
Log Message:
-----------
nicematrix (29oct19)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex 2019-10-29 21:24:11 UTC (rev 52572)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex 2019-10-29 21:24:28 UTC (rev 52573)
@@ -11,8 +11,8 @@
\usepackage{array}
\usepackage{colortbl}
\usepackage{nicematrix}
+\usepackage{enumitem}
-
\usepackage{siunitx}
\newbox\ExampleOne
@@ -29,7 +29,7 @@
\usepackage{arydshln}
\usepackage{verbatim}
-% We use \MakeShortVerb of shortvrb and not \DefineShortVrb of fancyvrb
+% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb
% because we don't want the contents of short verbatim colored in gray
\usepackage{shortvrb}
\MakeShortVerb{\|}
@@ -36,7 +36,7 @@
\usepackage{fancyvrb}
-\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
+\fvset{commandchars=\~\#\@,formatcom=\color{gray}}
\usepackage{titlesec}
\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
@@ -45,7 +45,7 @@
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
-\def\interitem{\vskip 7mm plus 2 mm minus 3mm}
+\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}
\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
\usepackage{footnote}
@@ -52,13 +52,15 @@
\usepackage[hyperfootnotes = false]{hyperref}
-\hypersetup{
- pdfinfo = {
- Title = { L’extension nicematrix },
- Subject = { Une extension LaTeX } ,
- Author = { F. Pantigny }
- }
-}
+\hypersetup
+ {
+ pdfinfo =
+ {
+ Title = L’extension nicematrix ,
+ Subject = Une extension LaTeX ,
+ Author = F. Pantigny
+ }
+ }
\NewDocumentEnvironment {scope} {} {} {}
@@ -133,6 +135,8 @@
commande est le groupe TeX courant).
+
+
\bigskip
\textbf{Un exemple d'utilisation pour les lignes en pointillés continues}
@@ -217,6 +221,8 @@
\section{Les lignes en pointillés continues}
+
+
À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies : |\Ldots|,
|\Cdots|, |\Vdots|, |\Ddots|, and |\Iddots|. Ces commandes sont conçues pour être utilisées à la place de |\dots|,
|\cdots|, |\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans \pkg{nicematrix}, est une
@@ -514,7 +520,7 @@
\item L'option |renew-dots|\par\nobreak
Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|, |\iddots|\footnotemark[\thefniddots] et
-|\hdotsfor| sont redéfinies dans les environnements de \pkg{nicematrix} et agissent comme |\Ldots|, |\Cdots|,
+|\hdotsfor| sont redéfinies dans les environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|,
|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de suspension «automatiques» de
|amsmath|) est aussi redéfinie et se comporte comme |\Ldots|.
@@ -747,13 +753,13 @@
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=12cm]
-$\begin{pNiceMatrix}[~emphase#code-after = {\line {1-1} {3-3}}@]
+$\begin{pNiceMatrix}[~emphase#code-after = \line{1-1}{3-3}@]
0 & 0 & 0 \\
0 & & 0 \\
0 & 0 & 0
\end{pNiceMatrix}$
\end{BVerbatim}
-$\begin{pNiceMatrix}[code-after = {\line {1-1} {3-3}}]
+$\begin{pNiceMatrix}[code-after = \line{1-1}{3-3}]
0 & 0 & 0 \\
0 & & 0 \\
0 & 0 & 0
@@ -881,7 +887,7 @@
\bigskip
Il y a plusieurs remarques à formuler.
%
-\begin{itemize}
+\begin{itemize}[beginpenalty=10000]
\item Si on utilise un environnement avec préambule explicite (c'est-à-dire |{NiceArray}| ou l'une de ses
variantes), on ne doit pas mettre dans ce préambule de spécification de colonne pour les éventuelles première et
dernière colonne : la première colonne sera automatiquement (et nécessairement) de type |R| et la dernière de type
@@ -941,7 +947,7 @@
\emph{Remarques}
-\begin{itemize}
+\begin{itemize}[beginpenalty=10000]
\item Comme on peut le voir dans l'exemple précédent, un filet horizontal (tracé avec |\hline|) ne s'étend pas
dans les colonnes extérieures et un filet vertical (spécifié par un caractère «\verb+|+» dans le préambule du
tableau) ne s'étend pas dans les rangées extérieures.\footnote{Ce dernier point n'est pas valable si on a chargé,
@@ -1294,7 +1300,43 @@
\item les caractéristiques des lignes en pointillés sont également modifiées.
\end{itemize}
+\section{Les compteurs iRow et jCol}
+Dans les cases du tableau, il est possible d'utiliser les compteurs LaTeX |iRow| et |jCol| qui représentent le
+numéro de la rangée courante et le numéro de la colonne courante\footnote{On rappelle que la «permière rangée» (si
+ elle existe) est $0$ et que le numéro de la «première colonne» (si elle existe) est $0$ également.}. Bien entendu,
+l'utilisateur ne doit pas modifier les valeurs de ces compteurs qui sont utilisés en interne par \pkg{nicematrix}.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{pNiceMatrix}%
+ [first-row,
+ first-col,
+ code-for-first-row = \mathbf{~emphase#\alph{jCol}@} ,
+ code-for-first-col = \mathbf{~emphase#\arabic{iRow}@} ]
+& & & & \\
+& 1 & 2 & 3 & 4 \\
+& 5 & 6 & 7 & 8 \\
+& 9 & 10 & 11 & 12
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[first-row,
+ first-col,
+ code-for-first-row = \mathbf{\alph{jCol}} ,
+ code-for-first-col = \mathbf{\arabic{iRow}} ]
+& & & & \\
+& 1 & 2 & 3 & 4 \\
+& 5 & 6 & 7 & 8 \\
+& 9 & 10 & 11 & 12
+\end{pNiceMatrix}$
+
+\medskip
+Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par d'autres extensions que
+\pkg{nicematrix} (ou tout simplement par l'utilisateur), ces compteurs sont masqués dans les environnements de
+\pkg{nicematrix}.
+
+
+
\section{L'option hlines}
Dans les environnements de \pkg{nicematrix}, on peut bien entendu ajouter des filets horizontaux entre les lignes
@@ -1319,8 +1361,7 @@
Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes
de type |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement
-aucune macro privée de \pkg{siunitx}. Les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge
-par \pkg{nicematrix}.
+aucune macro privée de \pkg{siunitx}.
\medskip
\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
@@ -1340,6 +1381,8 @@
7.2 & 0 & \Cdots & 0
\end{pNiceArray}$
+\medskip
+En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}.
\section{Remarques techniques}
@@ -1599,15 +1642,18 @@
|{VNiceArrayRC}|.
\end{itemize}
-Ils seront peut-être supprimés dans une version future de \pkg{nicematrix}.
+\medskip
+Une message est affiché dans le fichier |log| à chaque fois que l'un d'entre eux est utilisé. Néanmoins, il faut
+avoir conscience que ces environnements seront sans doute supprimés dans une version future de \pkg{nicematrix}.
+
\section{Exemples}
\subsection{Lignes en pointillés}
\medskip
-Une matrice tridiagonale :
+Une matrice tridiagonale :\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c]
Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx 2019-10-29 21:24:11 UTC (rev 52572)
+++ trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx 2019-10-29 21:24:28 UTC (rev 52573)
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{3.5}
-\def\myfiledate{2019/10/13}
+\def\myfileversion{3.6}
+\def\myfiledate{2019/10/29}
%
%
%<*batchfile>
@@ -67,9 +67,9 @@
\NewDocumentEnvironment {scope} {} {} {}
-\def\interitem{\vskip 7mm plus 2 mm minus 3mm}
+\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}
\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
-\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
+\fvset{commandchars=\~\#\@,formatcom=\color{gray}}
\usepackage{titlesec}
\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}
@@ -92,9 +92,9 @@
% {
% pdfinfo =
% {
-% Title = { The extension 'nicematrix' } ,
-% Subject = { A LaTeX extension } ,
-% Author = { F. Pantigny }
+% Title = The extension 'nicematrix' ,
+% Subject = A LaTeX extension ,
+% Author = F. Pantigny
% }
% }
%
@@ -794,13 +794,13 @@
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=12cm]
-% $\begin{pNiceMatrix}[~emphase#code-after = {\line {1-1} {3-3}}@]
+% $\begin{pNiceMatrix}[~emphase#code-after = \line{1-1}{3-3}@]
% 0 & 0 & 0 \\
% 0 & & 0 \\
% 0 & 0 & 0
% \end{pNiceMatrix}$
% \end{BVerbatim}
-% $\begin{pNiceMatrix}[code-after = {\line {1-1} {3-3}}]
+% $\begin{pNiceMatrix}[code-after = \line{1-1}{3-3}]
% 0 & 0 & 0 \\
% 0 & & 0 \\
% 0 & 0 & 0
@@ -898,7 +898,7 @@
%
%
% \bigskip
-% \section{The exterior row and columns}
+% \section{The exterior rows 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}.
@@ -988,7 +988,7 @@
%
%
% \emph{Remarks}
-% \begin{itemize}
+% \begin{itemize}[beginpenalty=10000]
% \item As shown in the previous example, an horizontal rule (drawn by |\hline|)
% doesn't extend in the exterior columns and a vertical rule (specified by a
% ``\verb+|+'' in the preamble of the array) doesn't extend in the exterior
@@ -1359,6 +1359,43 @@
% \item the characteristics of the dotted lines are also modified.
% \end{itemize}
%
+% \section{The counters iRow and jCol}
+%
+% In the cells of the array, it's possible to use the LaTeX counters |iRow| and
+% |jCol| which represents the number of the current row and the number of the
+% current col\footnote{We recall that the first row (if it exists) has the
+% number~$0$ and that the first col (if it exists) has also the number~$0$).}. Of
+% course, the user must not change the value of the these counters which are
+% used internally by \pkg{nicematrix}.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{pNiceMatrix}% don't forget the %
+% [first-row,
+% first-col,
+% code-for-first-row = \mathbf{~emphase#\alph{jCol}@} ,
+% code-for-first-col = \mathbf{~emphase#\arabic{iRow}@} ]
+% & & & & \\
+% & 1 & 2 & 3 & 4 \\
+% & 5 & 6 & 7 & 8 \\
+% & 9 & 10 & 11 & 12
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}[first-row,
+% first-col,
+% code-for-first-row = \mathbf{\alph{jCol}} ,
+% code-for-first-col = \mathbf{\arabic{iRow}} ]
+% & & & & \\
+% & 1 & 2 & 3 & 4 \\
+% & 5 & 6 & 7 & 8 \\
+% & 9 & 10 & 11 & 12
+% \end{pNiceMatrix}$
+%
+% \smallskip
+% If LaTeX counters called |iRow| and |jCol| are defined in the document by
+% extensions other than \pkg{nicematrix} (or by the user), they are shadowed in
+% the environements of \pkg{nicematrix}.
+%
% \section{The option hlines}
%
% You can add horizontal rules between rows in the environments of
@@ -1385,8 +1422,7 @@
% If the package \pkg{siunitx} is loaded (before or after \pkg{nicematrix}),
% it's possible to use the |S| column type of \pkg{siunitx} in the environments
% of \pkg{nicematrix}. The implementation doesn't use explicitly any private
-% macro of \pkg{siunitx}. The |d| columns of the package \pkg{dcolumn} are not
-% supported by \pkg{nicematrix}.
+% macro of \pkg{siunitx}.
%
%
% \medskip
@@ -1407,6 +1443,8 @@
% 7.2 & 0 & \Cdots & 0
% \end{pNiceArray}$
%
+% On the other hand, the |d| columns of the package \pkg{dcolumn} are not
+% supported by \pkg{nicematrix}.
%
% \section{Technical remarks}
%
@@ -2280,25 +2318,25 @@
% $\begin{array}{cc}
% &
% \begin{bNiceArray}{C>{\strut}CCCC}[name=B,first-row]
-% & & C_j \\
+% & & C_j \\
% b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
-% \Vdots & & \Vdots & & \Vdots \\
-% & & b_{kj} \\
-% & & \Vdots \\
-% b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn}
+% \Vdots & & \Vdots & & \Vdots \\
+% & & b_{kj} \\
+% & & \Vdots \\
+% b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn}
% \end{bNiceArray} \\ \\
% \begin{bNiceArray}{CC>{\strut}CCC}[name=A,first-col]
-% & a_{11} & \Cdots & & & a_{nn} \\
-% & \Vdots & & & & \Vdots \\
+% & a_{11} & \Cdots & & & a_{nn} \\
+% & \Vdots & & & & \Vdots \\
% L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
-% & \Vdots & & & & \Vdots \\
-% & a_{n1} & \Cdots & & & a_{nn} \\
+% & \Vdots & & & & \Vdots \\
+% & a_{n1} & \Cdots & & & a_{nn} \\
% \end{bNiceArray}
% &
% \begin{bNiceArray}{CC>{\strut}CCC}
-% & & & & \\
+% & & & & \\
% & & \Vdots \\
-% \Cdots & & c_{ij} \\
+% \Cdots & & c_{ij} \\
% \\
% \\
% \end{bNiceArray}
@@ -2330,14 +2368,11 @@
%
% \smallskip
% 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}
+% \pkg{array}. It tries to be independent of its implementation. Unfortunately,
+% it was not possible to be strictly independent: the package \pkg{nicematrix}
% 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
-% the code of this extension.
%
% \subsection{Declaration of the package and extensions loaded}
%
@@ -2353,7 +2388,7 @@
% \begin{macrocode}
\RequirePackage{tikz}
\usetikzlibrary{fit}
-\RequirePackage{expl3}[2019/02/15]
+\RequirePackage{expl3}[2019/07/01]
% \end{macrocode}
%
% We give the traditionnal declaration of a package written with |expl3|:
@@ -2387,7 +2422,7 @@
% \begin{macrocode}
\RequirePackage { array }
\RequirePackage { amsmath }
-\RequirePackage { xparse } [ 2018-10-17 ]
+\RequirePackage { xparse } [ 2018-07-01 ]
% \end{macrocode}
%
% \bigskip
@@ -2422,6 +2457,13 @@
{ }
% \end{macrocode}
%
+%
+% The following message must be defined right now because it may be used during
+% the loading of the package.
+% \begin{macrocode}
+\@@_msg_new:nn { Draft~mode }
+ { The~compilation~is~in~draft~mode:~the~dotted~lines~won't~be~drawn. }
+% \end{macrocode}
%
% \begin{macrocode}
\bool_if:NT \c_@@_draft_bool
@@ -2471,7 +2513,7 @@
% The dimension |\l_@@_columns_width_dim| will be used when the options specify
% that all the columns must have the same width (but, if the key |columns-width|
% is used with the special value |auto|, the boolean
-% |l_@@_auto_columns_width_bool| will be raised).
+% |l_@@_auto_columns_width_bool| also will be raised).
% \begin{macrocode}
\dim_new:N \l_@@_columns_width_dim
% \end{macrocode}
@@ -2565,7 +2607,7 @@
\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
+% The default value is 0.34~pt but it will be changed if the option |small| is
% used.
% \begin{macrocode}
\dim_new:N \l_@@_radius_dim
@@ -2582,7 +2624,20 @@
\tl_new:N \g_@@_code_after_tl
% \end{macrocode}
%
+%
% \bigskip
+% The counters |\l_@@_save_iRow_int| and |\l_@@_save_jCol_int| will be used to
+% save the values of the eventual LaTeX counters |iRow| and |jCol|. These LaTeX
+% counters will be restored at the end of the environment.
+% \begin{macrocode}
+\int_new:N \l_@@_save_iRow_int
+\int_new:N \l_@@_save_jCol_int
+% \end{macrocode}
+%
+% The TeX counters |\c at iRow| and |\c at jCol| will be created in the beginning of
+% the environment |{NiceArrayWithDelims}| (if they don't exist previously).
+%
+% \bigskip
% \subsubsection{Variables for the exterior rows and columns}
%
% The keys for the exterior rows and columns are |first-row|, |first-col|,
@@ -2844,7 +2899,7 @@
% \bigskip
% The following flag will be used when the current options specify that all the
% columns of the array must have the same width equal to the largest width of a
-% cell of the array (except the cell of the potential exterior columns).
+% cell of the array (except the cells of the potential exterior columns).
% \begin{macrocode}
\bool_new:N \l_@@_auto_columns_width_bool
% \end{macrocode}
@@ -2918,10 +2973,9 @@
%
% \bigskip
% An option to test whether the extra nodes will be created (these nodes are the
-% ``medium nodes'' and ``large nodes''). In some circonstancies, the extra nodes
-% are created automatically, for example when a dotted line has an ``open''
-% extremity.\footnote{In fact, we should not because, if there is a |w|~node,
-% the |w|~node is used instead of the ``medium'' node.}
+% ``medium nodes'' and the ``large nodes''). In some circonstancies, the extra
+% nodes are created automatically, for example when a dotted line has an
+% ``open'' extremity.
% \begin{macrocode}
create-extra-nodes .bool_set:N = \l_@@_extra_nodes_bool ,
left-margin .dim_set:N = \l_@@_left_margin_dim ,
@@ -2949,11 +3003,13 @@
{ \dim_set:Nn \l_@@_columns_width_dim { #1 } } ,
columns-width .value_required:n = true ,
name .code:n =
- \str_set:Nn \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 }
- \str_set_eq:NN \l_@@_name_str \l_tmpa_str ,
+ \unless \ifmeasuring@
+ \str_set:Nn \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 }
+ \str_set_eq:NN \l_@@_name_str \l_tmpa_str
+ \fi ,
name .value_required:n = true ,
code-after .tl_gset:N = \g_@@_code_after_tl ,
code-after .value_required:n = true ,
@@ -3158,21 +3214,21 @@
\cs_new_protected:Nn \@@_Cell:
{
% \end{macrocode}
-% We increment |\g_@@_col_int|, which is the counter of the columns.
+% We increment |\c at jCol|, which is the counter of the columns.
% \begin{macrocode}
- \int_gincr:N \g_@@_col_int
+ \int_gincr:N \c at jCol
% \end{macrocode}
% Now, we increment the counter of the rows. We don't do this incrementation in
% the |\everycr| because some packages, like \pkg{arydshln}, create special rows
% in the |\halign| that we don't want to take into account.
% \begin{macrocode}
- \int_compare:nNnT \g_@@_col_int = \c_one_int
+ \int_compare:nNnT \c at jCol = \c_one_int
{
\int_compare:nNnT \l_@@_first_col_int = \c_one_int
\@@_begin_of_row:
}
\int_gset:Nn \g_@@_col_total_int
- { \int_max:nn \g_@@_col_total_int \g_@@_col_int }
+ { \int_max:nn \g_@@_col_total_int \c at jCol }
% \end{macrocode}
% The content of the cell is composed in the box |\l_tmpa_box| because we want
% to compute some dimensions of the box. The |\hbox_set_end:| corresponding to
@@ -3182,10 +3238,21 @@
\hbox_set:Nw \l_tmpa_box
\c_math_toggle_token
\bool_if:NT \l_@@_small_bool \scriptstyle
- \int_compare:nNnTF \g_@@_row_int = \c_zero_int
- \l_@@_code_for_first_row_tl
+% \end{macrocode}
+%
+% We will call \emph{corners} of the matrix the cases which are at the
+% intersection of the exterior rows and exterior columns (of course, the four
+% corners doesn't always exist simultaneously). In a corner of the matrix, it
+% would be logical to use none of the codes |\l_@@_code_for_first_row_tl| and
+% \emph{al}. As for now, this result is acheived only for the north-west corner
+% (this allows an automatic numerotation of the rows ans the columns with |iRow|
+% and |jCol| with the first col and the first row --- probably the preferential
+% choice for such a numerotation).
+% \begin{macrocode}
+ \int_compare:nNnTF \c at iRow = \c_zero_int
+ { \int_compare:nNnT \c at jCol > \c_zero_int \l_@@_code_for_first_row_tl }
{
- \int_compare:nNnT \g_@@_row_int = \l_@@_last_row_int
+ \int_compare:nNnT \c at iRow = \l_@@_last_row_int
\l_@@_code_for_last_row_tl
}
}
@@ -3198,7 +3265,7 @@
% \begin{macrocode}
\cs_new_protected:Nn \@@_begin_of_row:
{
- \int_gincr:N \g_@@_row_int
+ \int_gincr:N \c at iRow
\dim_gset_eq:NN \g_@@_dp_ante_last_row_dim \g_@@_dp_last_row_dim
\dim_gzero:N \g_@@_dp_last_row_dim
\dim_gzero:N \g_@@_ht_last_row_dim
@@ -3213,7 +3280,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_actualization_for_first_and_last_row:
{
- \int_compare:nNnT \g_@@_row_int = \c_zero_int
+ \int_compare:nNnT \c at iRow = \c_zero_int
{
\dim_gset:Nn \g_@@_dp_row_zero_dim
{ \dim_max:nn \g_@@_dp_row_zero_dim { \box_dp:N \l_tmpa_box } }
@@ -3220,7 +3287,7 @@
\dim_gset:Nn \g_@@_ht_row_zero_dim
{ \dim_max:nn \g_@@_ht_row_zero_dim { \box_ht:N \l_tmpa_box } }
}
- \int_compare:nNnT \g_@@_row_int = \c_one_int
+ \int_compare:nNnT \c at iRow = \c_one_int
{
\dim_gset:Nn \g_@@_ht_row_one_dim
{ \dim_max:nn \g_@@_ht_row_one_dim { \box_ht:N \l_tmpa_box } }
@@ -3266,14 +3333,14 @@
[
anchor = base ,
name = nm - \int_use:N \g_@@_env_int -
- \int_use:N \g_@@_row_int -
- \int_use:N \g_@@_col_int ,
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol ,
alias =
\str_if_empty:NF \l_@@_name_str
{
\l_@@_name_str -
- \int_use:N \g_@@_row_int -
- \int_use:N \g_@@_col_int
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol
}
]
\bgroup
@@ -3342,14 +3409,14 @@
[
node~contents = { } ,
name = nm - \int_use:N \g_@@_env_int -
- \int_use:N \g_@@_row_int -
- \int_use:N \g_@@_col_int - w,
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol - w,
alias =
\str_if_empty:NF \l_@@_name_str
{
\l_@@_name_str -
- \int_use:N \g_@@_row_int -
- \int_use:N \g_@@_col_int - w
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol - w
} ,
inner~sep = \c_zero_dim ,
fit = (@@~south~west) (@@~north~east)
@@ -3414,8 +3481,8 @@
{ g_@@_ #1 _ lines _ tl }
{
\use:c { @@ _ draw _ #1 : nn }
- { \int_use:N \g_@@_row_int }
- { \int_use:N \g_@@_col_int }
+ { \int_use:N \c at iRow }
+ { \int_use:N \c at jCol }
}
}
}
@@ -3459,17 +3526,17 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_everycr_i:
{
- \int_gzero:N \g_@@_col_int
+ \int_gzero:N \c at jCol
\bool_if:NT \l_@@_hlines_bool
{
% \end{macrocode}
-% The counter |\g_@@_row_int| has the value $-1$ only if there is a ``first
+% The counter |\c at iRow| has the value $-1$ only if there is a ``first
% row'' and that we are before that ``first row'', i.e. just before the
% beginning of the array.
% \begin{macrocode}
- \int_compare:nNnT \g_@@_row_int > { -1 }
+ \int_compare:nNnT \c at iRow > { -1 }
{
- \int_compare:nNnF \g_@@_row_int = \l_@@_last_row_int
+ \int_compare:nNnF \c at iRow = \l_@@_last_row_int
{
\hrule \@height \arrayrulewidth
\skip_vertical:n { - \arrayrulewidth }
@@ -3487,6 +3554,13 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_pre_array:
{
+ \cs_if_exist:NT \theiRow
+ { \int_set_eq:NN \l_@@_save_iRow_int \c at iRow }
+ \int_gzero_new:N \c at iRow
+ \cs_if_exist:NT \thejCol
+ { \int_set_eq:NN \l_@@_save_jCol_int \c at jCol }
+ \int_gzero_new:N \c at jCol
+ \normalbaselines
% \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
@@ -3505,7 +3579,7 @@
% \medskip
% We switch to a global version of the boolean |\g_@@_extra_nodes_bool|,
% because, in some circonstancies, the boolean will be raised from inside a
-% cell of the |\halign| (in particular in a column of type |w|).
+% cell of the |\halign| (in particular in a column of type~|w|).
%
% \begin{macrocode}
\bool_gset_eq:NN \g_@@_extra_nodes_bool \l_@@_extra_nodes_bool
@@ -3614,14 +3688,13 @@
% \end{macrocode}
%
%
-% The counter |\g_@@_row_int| will be used to count the rows of the array (its
+% The counter |\c at iRow| will be used to count the rows of the array (its
% incrementation will be in the first cell of the row).
% \begin{macrocode}
- \int_gzero_new:N \g_@@_row_int
- \int_gset:Nn \g_@@_row_int { \l_@@_first_row_int - 1 }
+ \int_gset:Nn \c at iRow { \l_@@_first_row_int - 1 }
% \end{macrocode}
%
-% At the end of the environment |{array}|, |\g_@@_row_int| will be the total
+% At the end of the environment |{array}|, |\c at iRow| will be the total
% number de rows and |\g_@@_row_total_int| will be the number or rows excepted
% the last row (if |\l_@@_last_row_bool| has been raised with the option
% |last-row|).
@@ -3629,12 +3702,11 @@
\int_gzero_new:N \g_@@_row_total_int
% \end{macrocode}
%
-% The counter |\g_@@_col_int| will be used to count the columns of the array.
+% The counter |\c at jCol| will be used to count the columns of the array.
% Since we want to know the total number of columns of the matrix, we also
% create a counter |\g_@@_col_total_int|. These counters are updated in the
% command |\@@_Cell:| executed at the beginning of each cell.
% \begin{macrocode}
- \int_gzero_new:N \g_@@_col_int
\int_gzero_new:N \g_@@_col_total_int
% \end{macrocode}
%
@@ -3641,6 +3713,7 @@
% \begin{macrocode}
\cs_set_eq:NN \@ifnextchar \new at ifnextchar
% \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
@@ -3670,8 +3743,18 @@
!
{
\skip_horizontal:n { 0.53 pt }
- \bool_gset_true:N \g_@@_extra_nodes_bool
% \end{macrocode}
+% If the array is an array with all the columns of the same width, we don't ask
+% for the creation of the extra nodes because we will use the ``|col|'' nodes
+% for the vertical dotted line.
+% \begin{macrocode}
+ \bool_if:nF
+ {
+ \l_@@_auto_columns_width_bool
+ || \dim_compare_p:nNn \l_@@_columns_width_dim > \c_zero_dim
+ }
+ { \bool_gset_true:N \g_@@_extra_nodes_bool }
+% \end{macrocode}
%
% \medskip
% Consider the following code:
@@ -3693,15 +3776,15 @@
% ``|:|'' encountered during the parsing has already been taken into account in
% the |code-after|.
% \begin{macrocode}
- \int_compare:nNnT \g_@@_col_int > \g_@@_last_vdotted_col_int
+ \int_compare:nNnT \c at jCol > \g_@@_last_vdotted_col_int
{
- \int_gset_eq:NN \g_@@_last_vdotted_col_int \g_@@_col_int
+ \int_gset_eq:NN \g_@@_last_vdotted_col_int \c at jCol
\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|.
% \begin{macrocode}
- { \@@_vdottedline:n { \int_use:N \g_@@_col_int } }
+ { \@@_vdottedline:n { \int_use:N \c at jCol } }
}
}
}
@@ -3899,13 +3982,13 @@
% |{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|).
+% commands |\@@_vdottedline:n|).
%
% \begin{macrocode}
{
\bool_if:nT
{
- ( \l_@@_auto_columns_width_bool && ! \l_@@_block_auto_columns_width_bool)
+ \l_@@_auto_columns_width_bool
|| \dim_compare_p:nNn \l_@@_columns_width_dim > \c_zero_dim
}
{
@@ -3916,11 +3999,13 @@
% First, we put a ``|col|'' node on the left of the first column (of course, we
% have to do that \emph{after} the |\omit|).
% \begin{macrocode}
+ \skip_horizontal:N \arraycolsep
\tikz [ remember~picture , overlay ]
\coordinate [ name = nm - \int_use:N \g_@@_env_int - col - 0 ] ;
+ \skip_horizontal:n { - \arraycolsep }
% \end{macrocode}
% We compute in |\g_tmpa_dim| the common width of the columns. We use a global
-% variable because we are in a cell of an |\halign| and that we have to use this
+% variable because we are in a cell of an |\halign| and because we have to use this
% variable in other cells (of the same row). The affectation of |\g_tmpa_dim|,
% like all the affectations, must be done after the |\omit| of the cell.
% \begin{macrocode}
@@ -3936,18 +4021,20 @@
{
\dim_gset:Nn \g_tmpa_dim
{ \l_@@_columns_width_dim + 2 \arraycolsep }
- }
+ }
\skip_horizontal:N \g_tmpa_dim
+ \tikz [ remember~picture , overlay ]
+ \coordinate [ name = nm - \int_use:N \g_@@_env_int - col - 1 ] ;
% \end{macrocode}
% We begin a loop over the columns. The integer |\g_tmpa_int| will be the
-% number of columns of the current cell. This integer is not used to fix the
+% number of the current column. This integer is not used to fix the
% width of the column (since all the columns have the same width equal to
% |\g_@@_tmpa_dim|) but for the Tikz nodes.
% \begin{macrocode}
\int_gset:Nn \g_tmpa_int 1
\bool_if:nTF \g_@@_last_col_found_bool
+ { \prg_replicate:nn { \g_@@_col_total_int - 3 } }
{ \prg_replicate:nn { \g_@@_col_total_int - 2 } }
- { \prg_replicate:nn { \g_@@_col_total_int - 1 } }
{
&
\omit
@@ -3967,6 +4054,22 @@
col - \int_use:N \g_tmpa_int
] ;
}
+% \end{macrocode}
+% For the last column, we want a special treatment because of the final
+% |\arraycolsep|.
+% \begin{macrocode}
+ &
+ \omit
+ \int_gincr:N \g_tmpa_int
+ \skip_horizontal:N \g_tmpa_dim
+ \skip_horizontal:n { - \arraycolsep }
+ \tikz [ remember~picture , overlay ]
+ \coordinate
+ [
+ name = nm - \int_use:N \g_@@_env_int -
+ col - \int_use:N \g_tmpa_int
+ ] ;
+ \skip_horizontal:N \arraycolsep
}
\endarray
\c_math_toggle_token
@@ -3982,10 +4085,10 @@
{
\bool_if:NF \l_@@_last_row_without_value_bool
{
- \int_compare:nNnF \l_@@_last_row_int = \g_@@_row_int
+ \int_compare:nNnF \l_@@_last_row_int = \c at iRow
{
\@@_error:n { Wrong~last~row }
- \int_gset_eq:NN \l_@@_last_row_int \g_@@_row_int
+ \int_gset_eq:NN \l_@@_last_row_int \c at iRow
}
}
}
@@ -3997,12 +4100,8 @@
% \begin{macrocode}
\int_compare:nNnTF \l_@@_first_row_int = \c_zero_int
{
- \dim_set:Nn \l_tmpa_dim
- {
- \g_@@_ht_row_one_dim + \g_@@_dp_row_zero_dim
- + \lineskip
- + \g_@@_ht_row_zero_dim - \g_@@_ht_row_one_dim
- }
+ \dim_set:Nn \l_tmpa_dim
+ { \g_@@_dp_row_zero_dim + \lineskip + \g_@@_ht_row_zero_dim }
}
{ \dim_zero:N \l_tmpa_dim }
% \end{macrocode}
@@ -4016,11 +4115,7 @@
\int_compare:nNnTF \l_@@_last_row_int > { -2 }
{
\dim_set:Nn \l_tmpb_dim
- {
- \g_@@_ht_last_row_dim + \g_@@_dp_ante_last_row_dim
- + \lineskip
- + \g_@@_dp_last_row_dim - \g_@@_dp_ante_last_row_dim
- }
+ { \g_@@_ht_last_row_dim + \lineskip + \g_@@_dp_last_row_dim }
}
{ \dim_zero:N \l_tmpb_dim }
% \end{macrocode}
@@ -4136,7 +4231,7 @@
\hbox_set:Nw \l_tmpa_box
\c_math_toggle_token
\bool_if:NT \l_@@_small_bool \scriptstyle
- \l_@@_code_for_first_col_tl
+ \int_compare:nNnT \c at iRow > \c_zero_int \l_@@_code_for_first_col_tl
}
l
<
@@ -4173,13 +4268,13 @@
name =
nm -
\int_use:N \g_@@_env_int -
- \int_use:N \g_@@_row_int -
+ \int_use:N \c at iRow -
0 ,
alias =
\str_if_empty:NF \l_@@_name_str
{
\l_@@_name_str -
- \int_use:N \g_@@_row_int -
+ \int_use:N \c at iRow -
0
}
]
@@ -4209,9 +4304,9 @@
% column'' is really used.
% \begin{macrocode}
\bool_gset_true:N \g_@@_last_col_found_bool
- \int_gincr:N \g_@@_col_int
+ \int_gincr:N \c at jCol
\int_gset:Nn \g_@@_col_total_int
- { \int_max:nn \g_@@_col_total_int \g_@@_col_int }
+ { \int_max:nn \g_@@_col_total_int \c at jCol }
% \end{macrocode}
% The contents of the cell is constructed in the box |\l_tmpa_box| because we
% have to compute some dimensions of this box.
@@ -4263,14 +4358,14 @@
name =
nm -
\int_use:N \g_@@_env_int -
- \int_use:N \g_@@_row_int -
- \int_use:N \g_@@_col_int ,
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol ,
alias =
\str_if_empty:NF \l_@@_name_str
{
\l_@@_name_str -
- \int_use:N \g_@@_row_int -
- \int_use:N \g_@@_col_int
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol
}
]
{ \box_use:N \l_tmpa_box } ;
@@ -4395,10 +4490,6 @@
\@@_define_env:n V
% \end{macrocode}
%
-%
-% \bigskip
-% \subsection{Automatic width of the cells}
-%
%
% \bigskip
% \subsection{How to know whether a cell is ``empty''}
@@ -4504,15 +4595,16 @@
%
% \subsection{After the construction of the array}
%
-% The macro |\@@_after_array:| is called (via |\group_insert_after:N|) in
-% |{NiceArrayWithDelims}| and |{NiceMatrix}|.
%
% \begin{macrocode}
\cs_new_protected:Nn \@@_after_array:
{
- \int_compare:nNnTF \g_@@_row_int > \c_zero_int
+ \int_compare:nNnTF \c at iRow > \c_zero_int
\@@_after_array_i:
- { \@@_error:n { Zero~row } }
+ {
+ \@@_error:n { Zero~row }
+ \@@_restore_iRow_jCol:
+ }
}
% \end{macrocode}
%
@@ -4527,22 +4619,22 @@
\cs_if_exist:NT \tikz at library@external at loaded
{ \tikzset { external / export = false } }
% \end{macrocode}
-% Now, the definition of |\g_@@_col_int| and
-% |\g_@@_col_total_int| change: |\g_@@_col_int| will be the number of
+% Now, the definition of |\c at jCol| and
+% |\g_@@_col_total_int| change: |\c at jCol| will be the number of
% columns without the ``last column''; |\g_@@_col_total_int| will be the
% number of columns with this ``last column''.\footnote{We remind that the
% potential ``first column'' has the number~$0$.}
% \begin{macrocode}
- \int_gset_eq:NN \g_@@_col_int \g_@@_col_total_int
- \bool_if:nT \g_@@_last_col_found_bool { \int_gdecr:N \g_@@_col_int }
+ \int_gset_eq:NN \c at jCol \g_@@_col_total_int
+ \bool_if:nT \g_@@_last_col_found_bool { \int_gdecr:N \c at jCol }
% \end{macrocode}
%
-% We fix also the value of |\g_@@_row_int| and |\g_@@_row_total_int| with the
+% We fix also the value of |\c at iRow| and |\g_@@_row_total_int| with the
% same principle.
% \begin{macrocode}
- \int_gset_eq:NN \g_@@_row_total_int \g_@@_row_int
+ \int_gset_eq:NN \g_@@_row_total_int \c at iRow
\int_compare:nNnT \l_@@_last_row_int > { -1 }
- { \int_gsub:Nn \g_@@_row_int \c_one_int }
+ { \int_gsub:Nn \c at iRow \c_one_int }
% \end{macrocode}
%
% In the user has used the option |last-row| without value, we write in the
@@ -4642,11 +4734,11 @@
\tikzset
{
every~picture / .style =
- {
- overlay ,
- remember~picture ,
- name~prefix = nm - \int_use:N \g_@@_env_int -
- }
+ {
+ overlay ,
+ remember~picture ,
+ name~prefix = nm - \int_use:N \g_@@_env_int -
+ }
}
\cs_set_eq:NN \line \@@_line:nn
\g_@@_code_after_tl
@@ -4653,9 +4745,18 @@
\tl_gclear:N \g_@@_code_after_tl
\group_end:
\str_gclear:N \g_@@_type_env_str
+ \@@_restore_iRow_jCol:
}
% \end{macrocode}
%
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_restore_iRow_jCol:
+ {
+ \cs_if_exist:NT \theiRow { \int_gset_eq:NN \c at iRow \l_@@_save_iRow_int }
+ \cs_if_exist:NT \thejCol { \int_gset_eq:NN \c at jCol \l_@@_save_jCol_int }
+ }
+% \end{macrocode}
+%
% \bigskip
% A dotted line will be said \emph{open} in one of its extremities when it stops
% on the edge of the matrix and \emph{closed} otherwise. In the following
@@ -4733,7 +4834,7 @@
% We test if we are still in the matrix.
% \begin{macrocode}
\bool_set_false:N \l_@@_final_open_bool
- \int_compare:nNnTF \l_@@_final_i_int > \g_@@_row_int
+ \int_compare:nNnTF \l_@@_final_i_int > \c at iRow
{
\int_compare:nNnT { #3 } = 1
{ \bool_set_true:N \l_@@_final_open_bool }
@@ -4745,7 +4846,7 @@
{ \bool_set_true:N \l_@@_final_open_bool }
}
{
- \int_compare:nNnT \l_@@_final_j_int > \g_@@_col_int
+ \int_compare:nNnT \l_@@_final_j_int > \c at jCol
{
\int_compare:nNnT { #4 } = 1
{ \bool_set_true:N \l_@@_final_open_bool }
@@ -4837,7 +4938,7 @@
{ \bool_set_true:N \l_@@_initial_open_bool }
}
{
- \int_compare:nNnT \l_@@_initial_j_int > \g_@@_col_int
+ \int_compare:nNnT \l_@@_initial_j_int > \c at jCol
{
\int_compare:nNnT { #4 } = { -1 }
{ \bool_set_true:N \l_@@_initial_open_bool }
@@ -4941,6 +5042,47 @@
\cs_generate_variant:Nn \@@_retrieve_coords:nn { x x }
% \end{macrocode}
%
+% \interitem
+% For the horizontal lines with open extremities, we must take into account the
+% ``|col|'' nodes created in the environments which have a fixed width of the
+% columns. The following command will recompute the $x$-value of the extremities
+% in this case (erasing the value computed in |\@@_retrieve_coords:nn|).
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_adjust_with_col_nodes:
+ {
+ \bool_if:NT \l_@@_initial_open_bool
+ {
+ \cs_if_exist:cT
+ { pgf at sh@ns at nm - \int_use:N \g_@@_env_int - col - 0 }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node \pgfutil at firstofone
+ ( nm - \int_use:N \g_@@_env_int - col - 0 )
+ \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
+ \end { tikzpicture }
+ }
+ }
+ \bool_if:NT \l_@@_final_open_bool
+ {
+ \cs_if_exist:cT
+ {
+ pgf at sh@ns at nm - \int_use:N \g_@@_env_int - col -
+ \int_use:N \c at jCol
+ }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node \pgfutil at firstofone
+ (
+ nm - \int_use:N \g_@@_env_int - col -
+ \int_use:N \c at jCol
+ )
+ \dim_gset:Nn \g_@@_x_final_dim \pgf at x
+ \end { tikzpicture }
+ }
+ }
+ }
+% \end{macrocode}
+%
% \interitem
% \begin{macrocode}
\cs_new_protected:Nn \@@_draw_Ldots:nn
@@ -4996,6 +5138,7 @@
}
{ .base~west }
}
+ \@@_adjust_with_col_nodes:
\bool_if:NT \l_@@_initial_open_bool
{ \dim_gset_eq:NN \g_@@_y_initial_dim \g_@@_y_final_dim }
\bool_if:NT \l_@@_final_open_bool
@@ -5051,6 +5194,7 @@
}
{ .mid~west }
}
+ \@@_adjust_with_col_nodes:
\bool_if:NT \l_@@_initial_open_bool
{ \dim_gset_eq:NN \g_@@_y_initial_dim \g_@@_y_final_dim }
\bool_if:NT \l_@@_final_open_bool
@@ -5365,7 +5509,7 @@
\l_tmpb_int
}
\begin { tikzpicture } [ overlay ]
- \int_step_inline:nnnn 0 1 \l_tmpa_int
+ \int_step_inline:nnn 0 \l_tmpa_int
{
\pgfpathcircle
{ \pgfpoint { \g_@@_x_initial_dim } { \g_@@_y_initial_dim } }
@@ -5400,7 +5544,7 @@
\cs_new_protected:Nn \@@_add_to_empty_cells:
{
\cs_gset:cpx
- { @@ _ empty _ \int_use:N \g_@@_row_int - \int_use:N \g_@@_col_int }
+ { @@ _ empty _ \int_use:N \c at iRow - \int_use:N \c at jCol }
{ \int_use:N \g_@@_env_int }
}
% \end{macrocode}
@@ -5485,10 +5629,10 @@
\int_compare:nNnT #1 > 1
{
\seq_gput_left:Nx \g_@@_multicolumn_cells_seq
- { \int_eval:n \g_@@_row_int - \int_use:N \g_@@_col_int }
+ { \int_eval:n \c at iRow - \int_use:N \c at jCol }
\seq_gput_left:Nn \g_@@_multicolumn_sizes_seq { #1 }
}
- \int_gadd:Nn \g_@@_col_int { #1 - 1 }
+ \int_gadd:Nn \c at jCol { #1 - 1 }
}
% \end{macrocode}
%
@@ -5526,8 +5670,8 @@
\tl_gput_right:Nx \g_@@_Hdotsfor_lines_tl
{
\@@_draw_Hdotsfor:nnn
- { \int_use:N \g_@@_row_int }
- { \int_use:N \g_@@_col_int }
+ { \int_use:N \c at iRow }
+ { \int_use:N \c at jCol }
{ #2 }
}
\prg_replicate:nn { #2 - 1 } { & \multicolumn { 1 } { C } { } }
@@ -5563,7 +5707,7 @@
\bool_set_true:N \l_@@_initial_open_bool
}
}
- \int_compare:nNnTF { #2 + #3 -1 } = \g_@@_col_int
+ \int_compare:nNnTF { #2 + #3 -1 } = \c at jCol
{
\int_set:Nn \l_@@_final_j_int { #2 + #3 - 1 }
\bool_set_true:N \l_@@_final_open_bool
@@ -5601,34 +5745,41 @@
% \begin{macrocode}
\cs_new_protected:Nn \@@_line:nn
{
- \dim_zero_new:N \g_@@_x_initial_dim
- \dim_zero_new:N \g_@@_y_initial_dim
- \dim_zero_new:N \g_@@_x_final_dim
- \dim_zero_new:N \g_@@_y_final_dim
- \bool_set_false:N \l_@@_initial_open_bool
- \bool_set_false:N \l_@@_final_open_bool
- \bool_if:nTF
+ \bool_if:NF \c_@@_draft_bool
{
- \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g_@@_env_int - #1 }
- &&
- \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g_@@_env_int - #2 }
+ \dim_zero_new:N \g_@@_x_initial_dim
+ \dim_zero_new:N \g_@@_y_initial_dim
+ \dim_zero_new:N \g_@@_x_final_dim
+ \dim_zero_new:N \g_@@_y_final_dim
+ \bool_set_false:N \l_@@_initial_open_bool
+ \bool_set_false:N \l_@@_final_open_bool
+ \bool_if:nTF
+ {
+ \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g_@@_env_int - #1 }
+ &&
+ \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g_@@_env_int - #2 }
+ }
+ {
+ \begin { tikzpicture }
+ \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
+ \tikz at parse@node \pgfutil at firstofone ( i )
+ \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
+ \dim_gset:Nn \g_@@_y_initial_dim \pgf at y
+ \tikz at parse@node \pgfutil at firstofone ( f )
+ \dim_gset:Nn \g_@@_x_final_dim \pgf at x
+ \dim_gset:Nn \g_@@_y_final_dim \pgf at y
+ \end { tikzpicture }
+ \@@_draw_tikz_line:
+ }
+ {
+ \@@_error:nnn { unknown~cell~for~line~in~code-after }
+ { #1 } { #2 }
+ }
}
- {
- \begin { tikzpicture }
- \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
- \tikz at parse@node \pgfutil at firstofone ( i )
- \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
- \dim_gset:Nn \g_@@_y_initial_dim \pgf at y
- \tikz at parse@node \pgfutil at firstofone ( f )
- \dim_gset:Nn \g_@@_x_final_dim \pgf at x
- \dim_gset:Nn \g_@@_y_final_dim \pgf at 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
% lines must be parallelized).
@@ -5727,7 +5878,6 @@
\int_compare:nNnTF #1 = \c_zero_int
{ \@@_error:n { Use~of~:~in~first~position } }
{
- \@@_create_extra_nodes:
\bool_if:NF \c_@@_draft_bool
{
\dim_zero_new:N \g_@@_x_initial_dim
@@ -5737,50 +5887,63 @@
\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''.
+% If a ``|col|'' node exists (if the array has been constructed with a fixed
+% width of column), we use it.
% \begin{macrocode}
- \begin { tikzpicture } [ remember~picture ]
- \tikz at parse@node\pgfutil at firstofone
- ( 1 - #1 - large .north~east )
- \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
- \dim_gset:Nn \g_@@_y_initial_dim \pgf at y
- \tikz at parse@node\pgfutil at firstofone
- ( \int_use:N \g_@@_row_int - #1 - large .south~east )
- \dim_gset:Nn \g_@@_x_final_dim \pgf at x
- \dim_gset:Nn \g_@@_y_final_dim \pgf at y
- \end { tikzpicture }
-% \end{macrocode}
-% However, if the previous column was constructed with a letter |w|, we use the
-% |w|-nodes to change the $x$-value of the nodes.
-% \begin{macrocode}
- \cs_if_exist:cT
- { pgf at sh@ns at nm -\int_use:N \g_@@_env_int - 1 - #1 - w }
+ \cs_if_exist:cTF
+ { pgf at sh@ns at nm -\int_use:N \g_@@_env_int - col - #1 }
{
\begin { tikzpicture } [ remember~picture ]
\tikz at parse@node\pgfutil at firstofone
- ( 1 - #1 - w .north~east )
+ ( col - #1 )
\dim_gset:Nn \g_@@_x_initial_dim \pgf at x
- \tikz at parse@node\pgfutil at firstofone
- ( \int_use:N \g_@@_row_int - #1 - w .south~east )
\dim_gset:Nn \g_@@_x_final_dim \pgf at x
+ \dim_gset:Nn \g_@@_y_final_dim \pgf at y
\end { tikzpicture }
- \dim_gadd:Nn \g_@@_x_initial_dim \arraycolsep
- \dim_gadd:Nn \g_@@_x_final_dim \arraycolsep
+ \dim_gset:Nn \g_@@_y_initial_dim { - \c_max_dim }
+ \int_step_inline:nn \c at jCol
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node\pgfutil at firstofone
+ ( 1 - ##1 . north~east )
+ \dim_gset:Nn \g_@@_y_initial_dim
+ { \dim_max:nn \g_@@_y_initial_dim \pgf at y }
+ \end { tikzpicture }
+ }
}
% \end{macrocode}
-% However, if a node of column exists (if the array has been constructed with a
-% fixed width of column), we use it.
+% If not, we use the ``large node''.
% \begin{macrocode}
- \cs_if_exist:cT
- { pgf at sh@ns at nm -\int_use:N \g_@@_env_int - col - #1 }
{
\begin { tikzpicture } [ remember~picture ]
\tikz at parse@node\pgfutil at firstofone
- ( col - #1 )
+ ( 1 - #1 - large .north~east )
\dim_gset:Nn \g_@@_x_initial_dim \pgf at x
+ \dim_gset:Nn \g_@@_y_initial_dim \pgf at y
+ \tikz at parse@node\pgfutil at firstofone
+ ( \int_use:N \c at iRow - #1 - large .south~east )
\dim_gset:Nn \g_@@_x_final_dim \pgf at x
+ \dim_gset:Nn \g_@@_y_final_dim \pgf at y
\end { tikzpicture }
+% \end{macrocode}
+% However, if the previous column was constructed with a letter |w|, we use the
+% |w|-nodes (and we erase the previous computation of the $x$-value of the
+% vertical dotted line).
+% \begin{macrocode}
+ \cs_if_exist:cT
+ { pgf at sh@ns at nm -\int_use:N \g_@@_env_int - 1 - #1 - w }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node\pgfutil at firstofone
+ ( 1 - #1 - w .north~east )
+ \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
+ \tikz at parse@node\pgfutil at firstofone
+ ( \int_use:N \c at iRow - #1 - w .south~east )
+ \dim_gset:Nn \g_@@_x_final_dim \pgf at x
+ \end { tikzpicture }
+ \dim_gadd:Nn \g_@@_x_initial_dim \arraycolsep
+ \dim_gadd:Nn \g_@@_x_final_dim \arraycolsep
+ }
}
\@@_draw_tikz_line:
}
@@ -5789,7 +5952,6 @@
% \end{macrocode}
%
%
-%
% \bigskip
% \subsection{The vertical rules}
%
@@ -5800,7 +5962,7 @@
% with |\newcolumntype|:
% \begin{Verbatim}[commandchars=\~\#\+]
% \newcolumntype { | }
-% { ! { \int_compare:nNnF \g_@@_row_int = \c_zero_int \vline } }
+% { ! { \int_compare:nNnF \c at iRow = \c_zero_int \vline } }
% \end{Verbatim}
%
% However, this code fails is the user uses "\DefineShortVerb{\|}" of
@@ -5820,45 +5982,45 @@
{
\int_compare:nNnTF \l_@@_first_col_int = \c_zero_int
{
- \int_compare:nNnTF \g_@@_col_int = \c_zero_int
+ \int_compare:nNnTF \c at jCol = \c_zero_int
{
\int_compare:nNnTF \l_@@_first_row_int = \c_zero_int
{
- \int_compare:nNnF \g_@@_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g_@@_row_int = \l_@@_last_row_int
+ \int_compare:nNnF \c at iRow = \l_@@_last_row_int
\@@_vline_i:
}
}
{
- \int_compare:nNnF \g_@@_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g_@@_row_int = \l_@@_last_row_int
+ \int_compare:nNnF \c at iRow = \l_@@_last_row_int
\@@_vline_i:
}
}
}
{
- \int_compare:nNnF \g_@@_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g_@@_row_int = \l_@@_last_row_int
+ \int_compare:nNnF \c at iRow = \l_@@_last_row_int
\@@_vline_i:
}
}
}
{
- \int_compare:nNnTF \g_@@_col_int = \c_zero_int
+ \int_compare:nNnTF \c at jCol = \c_zero_int
{
- \int_compare:nNnF \g_@@_row_int = { -1 }
+ \int_compare:nNnF \c at iRow = { -1 }
{
- \int_compare:nNnF \g_@@_row_int = { \l_@@_last_row_int - 1 }
+ \int_compare:nNnF \c at iRow = { \l_@@_last_row_int - 1 }
\@@_vline_i:
}
}
{
- \int_compare:nNnF \g_@@_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g_@@_row_int = \l_@@_last_row_int
+ \int_compare:nNnF \c at iRow = \l_@@_last_row_int
\@@_vline_i:
}
}
@@ -6043,7 +6205,7 @@
% \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
+% columns will stop at $|\c at jCol|$ (and not |\g_@@_col_total_int|). Idem
% for the rows.
% \begin{macrocode}
\int_set:Nn \l_@@_first_row_int 1
@@ -6054,7 +6216,7 @@
% \texttt{l_@@_column_\textsl{j}_min_dim} and
% \texttt{l_@@_column_\textsl{j}_max_dim}.
% \begin{macrocode}
- \int_step_variable:nNn { \g_@@_row_int - 1 } \@@_i:
+ \int_step_variable:nNn { \c at iRow - 1 } \@@_i:
{
\dim_set:cn { l_@@_row _ \@@_i: _ min _ dim }
{
@@ -6067,7 +6229,7 @@
\dim_set_eq:cc { l_@@_row _ \int_eval:n { \@@_i: + 1 } _ max _ dim }
{ l_@@_row_\@@_i: _min_dim }
}
- \int_step_variable:nNn { \g_@@_col_int - 1 } \@@_j:
+ \int_step_variable:nNn { \c at jCol - 1 } \@@_j:
{
\dim_set:cn { l_@@_column _ \@@_j: _ max _ dim }
{
@@ -6086,7 +6248,7 @@
{ l_@@_column _ 1 _ min _ dim }
\l_@@_left_margin_dim
\dim_add:cn
- { l_@@_column _ \int_use:N \g_@@_col_int _ max _ dim }
+ { l_@@_column _ \int_use:N \c at jCol _ max _ dim }
\l_@@_right_margin_dim
% \end{macrocode}
% Now, we can actually create the ``large nodes''.
@@ -6112,7 +6274,7 @@
\dim_gset:Nn \g_tmpa_dim \pgf at x
\tikz at parse@node \pgfutil at firstofone
( nm - \int_use:N \g_@@_env_int - 1 -
- \int_use:N \g_@@_col_int - large .north~east )
+ \int_use:N \c at jCol - large .north~east )
\dim_gset:Nn \g_tmpb_dim \pgf at x
\end { tikzpicture }
\iow_now:Nn \@mainaux \ExplSyntaxOn
@@ -6220,7 +6382,8 @@
inner~sep = \c_zero_dim ,
name = nm - \int_use:N \g_@@_env_int - \@@_i: - \@@_j: ,
alias =
- \str_if_empty:NF \l_@@_name_str { \l_@@_name_str - \@@_i: - \@@_j: }
+ \str_if_empty:NF \l_@@_name_str
+ { \l_@@_name_str - \@@_i: - \@@_j: }
]
;
}
@@ -6298,10 +6461,10 @@
\tl_gput_left:Nx \g_@@_code_after_tl
{
\@@_Block_iv:nnnnn
- { \int_use:N \g_@@_row_int }
- { \int_use:N \g_@@_col_int }
- { \int_eval:n { \g_@@_row_int + #1 - 1 } }
- { \int_eval:n { \g_@@_col_int + #2 - 1 } }
+ { \int_use:N \c at iRow }
+ { \int_use:N \c at jCol }
+ { \int_eval:n { \c at iRow + #1 - 1 } }
+ { \int_eval:n { \c at jCol + #2 - 1 } }
\exp_not:n { { #3 $ #4 $ } }
}
}
@@ -6335,8 +6498,8 @@
{
\bool_if:nTF
{
- \int_compare_p:nNn { #3 } > \g_@@_row_int
- || \int_compare_p:nNn { #4 } > \g_@@_col_int
+ \int_compare_p:nNn { #3 } > \c at iRow
+ || \int_compare_p:nNn { #4 } > \c at jCol
}
{ \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
{
@@ -6461,17 +6624,13 @@
\@@_msg_new:nn { Wrong~last~row }
{
You~have~used~'last-row=\int_use:N \l_@@_last_row_int'~but~your~environment~
- \{\g_@@_type_env_str\}~seems~to~have~\int_use:N \g_@@_row_int\
- rows.~If~you~go~on,~the~value~of~\int_use:N \g_@@_row_int\
+ \{\g_@@_type_env_str\}~seems~to~have~\int_use:N \c at iRow
+ rows.~If~you~go~on,~the~value~of~\int_use:N \c at iRow
will~be~used~for~last~row.~You~can~avoid~this~problem~by~using~'last-row'~
without~value~(more~compilations~might~be~necessary).
}
% \end{macrocode}
%
-% \begin{macrocode}
-\@@_msg_new:nn { Draft~mode }
- { The~compilation~is~in~draft~mode:~the~dotted~lines~won't~be~drawn. }
-% \end{macrocode}
%
% \begin{macrocode}
\@@_msg_new:nn { Yet~in~env }
@@ -6616,6 +6775,8 @@
}
% \end{macrocode}
%
+% The following message should be changed because, normally, there can be any
+% longer artefact in the environments of \pkg{amsmath}.
% \begin{macrocode}
\@@_msg_new:nnn { Duplicate~name }
{
@@ -6623,7 +6784,7 @@
the~same~environment~name~twice.~You~can~go~on,~but,~
maybe,~you~will~have~incorrect~results~especially~
if~you~use~'columns-width=auto'.~If~you~use~nicematrix~inside~some~
- environments~of~amsmath,~this~error~may~be~an~artefact.~In~this~case,
+ environments~of~amsmath,~this~error~may~be~an~artefact.~In~this~case,~
use~the~option~'allow-duplicate-names'.\\
For~a~list~of~the~names~already~used,~type~H~<return>. \\
}
@@ -6658,14 +6819,24 @@
first~position~of~the~preamble~of~the~environment~\{\g_@@_type_env_str\}. \\
If~you~go~on,~this~dotted~line~will~be~ignored.
}
-% \end{macrocode}
+% \end{macrocode}
%
%
% \subsection{Obsolete environments}
%
+% \begin{macrocode}
+\@@_msg_new:nn { Obsolete~environment }
+ {
+ The~environment~\{\@currenvir\}~is~obsolete.~
+ We~should~use~#1~instead.
+ }
+% \end{macrocode}
+%
% \begin{macrocode}
\NewDocumentEnvironment { pNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\pNiceArray
}
@@ -6675,6 +6846,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { bNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\bNiceArray
}
@@ -6684,6 +6857,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { BNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\BNiceArray
}
@@ -6693,6 +6868,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { vNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\vNiceArray
}
@@ -6702,6 +6879,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { VNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\VNiceArray
}
@@ -6711,6 +6890,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { pNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\pNiceArray
@@ -6721,6 +6902,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { bNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\bNiceArray
@@ -6731,6 +6914,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { BNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\BNiceArray
@@ -6741,6 +6926,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { vNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\bool_set_true:N \l_@@_last_col_bool
\int_set:Nn \l_@@_first_row_int \c_zero_int
\vNiceArray
@@ -6751,6 +6938,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { VNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\VNiceArray
@@ -6761,6 +6950,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { NiceArrayCwithDelims } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\NiceArrayWithDelims
}
@@ -6770,6 +6961,8 @@
% \begin{macrocode}
\NewDocumentEnvironment { NiceArrayRCwithDelims } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\NiceArrayWithDelims
@@ -6778,7 +6971,7 @@
% \end{macrocode}
%
%
-%
+% \vspace{1cm}
% \section{History}
%
% \subsection*{Changes between versions 1.0 and 1.1}
@@ -6850,15 +7043,15 @@
% \subsection*{Changes between version 2.1.2 and 2.1.3}
%
% When searching the end of a dotted line from a command like |\Cdots| issued in
-% the ``main matrix'' (not in the column |C|), the cells in the column |C| are
-% considered as outside the matrix. That means that it's possible to do the
-% following matrix with only a |\Cdots| command (and a single |\Vdots|).
-% \[\begin{pNiceArrayRC}{Wc{5mm}CWc{5mm}}
+% the ``main matrix'' (not in the exterior column), the cells in the exterior
+% column are considered as outside the matrix. That means that it's possible to
+% do the following matrix with only a |\Cdots| command (and a single |\Vdots|).
+% \[\begin{pNiceArray}{Wc{5mm}CWc{5mm}}[first-row,last-col]
% & C_j & \\
% \mbox{\Large $0$} & \Vdots & \mbox{\Large $0$} \\
% & \strut a & \Cdots & L_i \\
% \mbox{\Large $0$} & & \mbox{\Large $0$} \\
-% \end{pNiceArrayRC}\]
+% \end{pNiceArray}\]
%
% \subsection*{Changes between version 2.1.3 and 2.1.4}
%
@@ -6907,7 +7100,7 @@
% Modification of |\Hdotsfor|. Now |\Hdotsfor| erases the |\vlines| (of ``"|"'')
% as |\hdotsfor| does.
%
-% Composition of exterior rows and columns of the four sides of the matrix (and
+% Composition of exterior rows and columns on the four sides of the matrix (and
% not only on two sides) with the options |first-row|, |last-row|, |first-col|
% and |last-col|.
%
@@ -6918,8 +7111,8 @@
% Error message when the user gives an incorrect value for |last-row|.
%
% A dotted line can no longer cross another dotted line (except the dotted lines
-% drawn by |\cdottedline|, |:| (in the preamble of the array) and |\line| in
-% |code-after|.
+% drawn by |\cdottedline|, the symbol |:| (in the preamble of the array) and
+% |\line| in |code-after|.
%
% The starred versions of |\Cdots|, |\Ldots|, etc. are now deprecated because,
% with the new implementation, they become pointless. These starred versions
@@ -6960,8 +7153,24 @@
% \pkg{nicematrix} when the class \cls{standalone} or the package
% \pkg{standalone} is used.
%
+% \subsection*{Changes between version 3.4 and 3.5}
+%
+% Correction on a bug on the two previous versions where the |code-after| was
+% not executed.
%
+% \subsection*{Changes between version 3.5 and 3.6}
+%
+% LaTeX counters |iRow| and |jCol| available in the cells of the array.
%
+% Addition of |\normalbaselines| before the construction of the array: in
+% environments like |{align}| of \pkg{amsmath} the value of |\baselineskip| is
+% changed and if the options |first-row| and |last-row| were used in an
+% environment of \pkg{nicematrix}, the position of the delimiters was wrong.
+%
+% A warning is written in the |.log| file if an obsolete environment is used.
+%
+% There is no longer artificial errors |Duplicate~name| in the environments of
+% \pkg{amsmath}.
% \PrintIndex
%
% \tableofcontents
@@ -6970,6 +7179,7 @@
% Local Variables:
% TeX-fold-mode: t
% TeX-fold-preserve-comments: nil
+% ispell-local-dictionary: english
% fill-column: 80
% End:
Modified: trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty 2019-10-29 21:24:11 UTC (rev 52572)
+++ trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty 2019-10-29 21:24:28 UTC (rev 52573)
@@ -18,11 +18,11 @@
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%%
-\def\myfileversion{3.5}
-\def\myfiledate{2019/10/13}
+\def\myfileversion{3.6}
+\def\myfiledate{2019/10/29}
\RequirePackage{tikz}
\usetikzlibrary{fit}
-\RequirePackage{expl3}[2019/02/15]
+\RequirePackage{expl3}[2019/07/01]
\RequirePackage{l3keys2e}
\ProvidesExplPackage
{nicematrix}
@@ -35,7 +35,7 @@
\ProcessOptions \relax
\RequirePackage { array }
\RequirePackage { amsmath }
-\RequirePackage { xparse } [ 2018-10-17 ]
+\RequirePackage { xparse } [ 2018-07-01 ]
\cs_new_protected:Npn \__nm_error:n { \msg_error:nn { nicematrix } }
\cs_new_protected:Npn \__nm_error:nn { \msg_error:nnn { nicematrix } }
\cs_new_protected:Npn \__nm_error:nnn { \msg_error:nnnn { nicematrix } }
@@ -52,6 +52,8 @@
\@ifclassloaded { revtex4-2 }
{ \bool_set_true:N \c__nm_revtex_bool }
{ }
+\__nm_msg_new:nn { Draft~mode }
+ { The~compilation~is~in~draft~mode:~the~dotted~lines~won't~be~drawn. }
\bool_if:NT \c__nm_draft_bool
{ \msg_warning:nn { nicematrix } { Draft~mode } }
\ProvideDocumentCommand \iddots { }
@@ -96,6 +98,8 @@
\dim_set:Nn \l__nm_radius_dim { 0.53 pt }
\str_new:N \g__nm_type_env_str
\tl_new:N \g__nm_code_after_tl
+\int_new:N \l__nm_save_iRow_int
+\int_new:N \l__nm_save_jCol_int
\int_new:N \l__nm_first_row_int
\int_set:Nn \l__nm_first_row_int 1
\int_new:N \l__nm_first_col_int
@@ -198,11 +202,13 @@
{ \dim_set:Nn \l__nm_columns_width_dim { #1 } } ,
columns-width .value_required:n = true ,
name .code:n =
- \str_set:Nn \l_tmpa_str { #1 }
- \seq_if_in:NVTF \g__nm_names_seq \l_tmpa_str
- { \__nm_error:nn { Duplicate~name } { #1 } }
- { \seq_gput_left:NV \g__nm_names_seq \l_tmpa_str }
- \str_set_eq:NN \l__nm_name_str \l_tmpa_str ,
+ \unless \ifmeasuring@
+ \str_set:Nn \l_tmpa_str { #1 }
+ \seq_if_in:NVTF \g__nm_names_seq \l_tmpa_str
+ { \__nm_error:nn { Duplicate~name } { #1 } }
+ { \seq_gput_left:NV \g__nm_names_seq \l_tmpa_str }
+ \str_set_eq:NN \l__nm_name_str \l_tmpa_str
+ \fi ,
name .value_required:n = true ,
code-after .tl_gset:N = \g__nm_code_after_tl ,
code-after .value_required:n = true ,
@@ -295,27 +301,27 @@
}
\cs_new_protected:Nn \__nm_Cell:
{
- \int_gincr:N \g__nm_col_int
- \int_compare:nNnT \g__nm_col_int = \c_one_int
+ \int_gincr:N \c at jCol
+ \int_compare:nNnT \c at jCol = \c_one_int
{
\int_compare:nNnT \l__nm_first_col_int = \c_one_int
\__nm_begin_of_row:
}
\int_gset:Nn \g__nm_col_total_int
- { \int_max:nn \g__nm_col_total_int \g__nm_col_int }
+ { \int_max:nn \g__nm_col_total_int \c at jCol }
\hbox_set:Nw \l_tmpa_box
\c_math_toggle_token
\bool_if:NT \l__nm_small_bool \scriptstyle
- \int_compare:nNnTF \g__nm_row_int = \c_zero_int
- \l__nm_code_for_first_row_tl
+ \int_compare:nNnTF \c at iRow = \c_zero_int
+ { \int_compare:nNnT \c at jCol > \c_zero_int \l__nm_code_for_first_row_tl }
{
- \int_compare:nNnT \g__nm_row_int = \l__nm_last_row_int
+ \int_compare:nNnT \c at iRow = \l__nm_last_row_int
\l__nm_code_for_last_row_tl
}
}
\cs_new_protected:Nn \__nm_begin_of_row:
{
- \int_gincr:N \g__nm_row_int
+ \int_gincr:N \c at iRow
\dim_gset_eq:NN \g__nm_dp_ante_last_row_dim \g__nm_dp_last_row_dim
\dim_gzero:N \g__nm_dp_last_row_dim
\dim_gzero:N \g__nm_ht_last_row_dim
@@ -322,7 +328,7 @@
}
\cs_new_protected:Npn \__nm_actualization_for_first_and_last_row:
{
- \int_compare:nNnT \g__nm_row_int = \c_zero_int
+ \int_compare:nNnT \c at iRow = \c_zero_int
{
\dim_gset:Nn \g__nm_dp_row_zero_dim
{ \dim_max:nn \g__nm_dp_row_zero_dim { \box_dp:N \l_tmpa_box } }
@@ -329,7 +335,7 @@
\dim_gset:Nn \g__nm_ht_row_zero_dim
{ \dim_max:nn \g__nm_ht_row_zero_dim { \box_ht:N \l_tmpa_box } }
}
- \int_compare:nNnT \g__nm_row_int = \c_one_int
+ \int_compare:nNnT \c at iRow = \c_one_int
{
\dim_gset:Nn \g__nm_ht_row_one_dim
{ \dim_max:nn \g__nm_ht_row_one_dim { \box_ht:N \l_tmpa_box } }
@@ -357,14 +363,14 @@
[
anchor = base ,
name = nm - \int_use:N \g__nm_env_int -
- \int_use:N \g__nm_row_int -
- \int_use:N \g__nm_col_int ,
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol ,
alias =
\str_if_empty:NF \l__nm_name_str
{
\l__nm_name_str -
- \int_use:N \g__nm_row_int -
- \int_use:N \g__nm_col_int
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol
}
]
\bgroup
@@ -411,14 +417,14 @@
[
node~contents = { } ,
name = nm - \int_use:N \g__nm_env_int -
- \int_use:N \g__nm_row_int -
- \int_use:N \g__nm_col_int - w,
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol - w,
alias =
\str_if_empty:NF \l__nm_name_str
{
\l__nm_name_str -
- \int_use:N \g__nm_row_int -
- \int_use:N \g__nm_col_int - w
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol - w
} ,
inner~sep = \c_zero_dim ,
fit = (__nm~south~west) (__nm~north~east)
@@ -436,8 +442,8 @@
{ g__nm_ #1 _ lines _ tl }
{
\use:c { __nm _ draw _ #1 : nn }
- { \int_use:N \g__nm_row_int }
- { \int_use:N \g__nm_col_int }
+ { \int_use:N \c at iRow }
+ { \int_use:N \c at jCol }
}
}
}
@@ -458,12 +464,12 @@
{ \noalign { \__nm_everycr_i: } }
\cs_new_protected:Npn \__nm_everycr_i:
{
- \int_gzero:N \g__nm_col_int
+ \int_gzero:N \c at jCol
\bool_if:NT \l__nm_hlines_bool
{
- \int_compare:nNnT \g__nm_row_int > { -1 }
+ \int_compare:nNnT \c at iRow > { -1 }
{
- \int_compare:nNnF \g__nm_row_int = \l__nm_last_row_int
+ \int_compare:nNnF \c at iRow = \l__nm_last_row_int
{
\hrule \@height \arrayrulewidth
\skip_vertical:n { - \arrayrulewidth }
@@ -473,6 +479,13 @@
}
\cs_new_protected:Npn \__nm_pre_array:
{
+ \cs_if_exist:NT \theiRow
+ { \int_set_eq:NN \l__nm_save_iRow_int \c at iRow }
+ \int_gzero_new:N \c at iRow
+ \cs_if_exist:NT \thejCol
+ { \int_set_eq:NN \l__nm_save_jCol_int \c at jCol }
+ \int_gzero_new:N \c at jCol
+ \normalbaselines
\bool_if:NT \l__nm_small_bool
{
\cs_set:Npn \arraystretch { 0.47 }
@@ -536,10 +549,8 @@
}
\seq_gclear_new:N \g__nm_multicolumn_cells_seq
\seq_gclear_new:N \g__nm_multicolumn_sizes_seq
- \int_gzero_new:N \g__nm_row_int
- \int_gset:Nn \g__nm_row_int { \l__nm_first_row_int - 1 }
+ \int_gset:Nn \c at iRow { \l__nm_first_row_int - 1 }
\int_gzero_new:N \g__nm_row_total_int
- \int_gzero_new:N \g__nm_col_int
\int_gzero_new:N \g__nm_col_total_int
\cs_set_eq:NN \@ifnextchar \new at ifnextchar
\cs_set_eq:NN \NC at find@w \relax
@@ -553,12 +564,17 @@
!
{
\skip_horizontal:n { 0.53 pt }
- \bool_gset_true:N \g__nm_extra_nodes_bool
- \int_compare:nNnT \g__nm_col_int > \g__nm_last_vdotted_col_int
+ \bool_if:nF
{
- \int_gset_eq:NN \g__nm_last_vdotted_col_int \g__nm_col_int
+ \l__nm_auto_columns_width_bool
+ || \dim_compare_p:nNn \l__nm_columns_width_dim > \c_zero_dim
+ }
+ { \bool_gset_true:N \g__nm_extra_nodes_bool }
+ \int_compare:nNnT \c at jCol > \g__nm_last_vdotted_col_int
+ {
+ \int_gset_eq:NN \g__nm_last_vdotted_col_int \c at jCol
\tl_gput_right:Nx \g__nm_code_after_tl
- { \__nm_vdottedline:n { \int_use:N \g__nm_col_int } }
+ { \__nm_vdottedline:n { \int_use:N \c at jCol } }
}
}
}
@@ -672,7 +688,7 @@
{
\bool_if:nT
{
- ( \l__nm_auto_columns_width_bool && ! \l__nm_block_auto_columns_width_bool)
+ \l__nm_auto_columns_width_bool
|| \dim_compare_p:nNn \l__nm_columns_width_dim > \c_zero_dim
}
{
@@ -679,8 +695,10 @@
\crcr
\int_compare:nNnT \l__nm_first_col_int = 0 { \omit & }
\omit
+ \skip_horizontal:N \arraycolsep
\tikz [ remember~picture , overlay ]
\coordinate [ name = nm - \int_use:N \g__nm_env_int - col - 0 ] ;
+ \skip_horizontal:n { - \arraycolsep }
\bool_if:nTF
{
\l__nm_auto_columns_width_bool
@@ -693,12 +711,14 @@
{
\dim_gset:Nn \g_tmpa_dim
{ \l__nm_columns_width_dim + 2 \arraycolsep }
- }
+ }
\skip_horizontal:N \g_tmpa_dim
+ \tikz [ remember~picture , overlay ]
+ \coordinate [ name = nm - \int_use:N \g__nm_env_int - col - 1 ] ;
\int_gset:Nn \g_tmpa_int 1
\bool_if:nTF \g__nm_last_col_found_bool
+ { \prg_replicate:nn { \g__nm_col_total_int - 3 } }
{ \prg_replicate:nn { \g__nm_col_total_int - 2 } }
- { \prg_replicate:nn { \g__nm_col_total_int - 1 } }
{
&
\omit
@@ -711,6 +731,18 @@
col - \int_use:N \g_tmpa_int
] ;
}
+ &
+ \omit
+ \int_gincr:N \g_tmpa_int
+ \skip_horizontal:N \g_tmpa_dim
+ \skip_horizontal:n { - \arraycolsep }
+ \tikz [ remember~picture , overlay ]
+ \coordinate
+ [
+ name = nm - \int_use:N \g__nm_env_int -
+ col - \int_use:N \g_tmpa_int
+ ] ;
+ \skip_horizontal:N \arraycolsep
}
\endarray
\c_math_toggle_token
@@ -721,10 +753,10 @@
{
\bool_if:NF \l__nm_last_row_without_value_bool
{
- \int_compare:nNnF \l__nm_last_row_int = \g__nm_row_int
+ \int_compare:nNnF \l__nm_last_row_int = \c at iRow
{
\__nm_error:n { Wrong~last~row }
- \int_gset_eq:NN \l__nm_last_row_int \g__nm_row_int
+ \int_gset_eq:NN \l__nm_last_row_int \c at iRow
}
}
}
@@ -731,21 +763,13 @@
\int_compare:nNnTF \l__nm_first_row_int = \c_zero_int
{
\dim_set:Nn \l_tmpa_dim
- {
- \g__nm_ht_row_one_dim + \g__nm_dp_row_zero_dim
- + \lineskip
- + \g__nm_ht_row_zero_dim - \g__nm_ht_row_one_dim
- }
+ { \g__nm_dp_row_zero_dim + \lineskip + \g__nm_ht_row_zero_dim }
}
{ \dim_zero:N \l_tmpa_dim }
\int_compare:nNnTF \l__nm_last_row_int > { -2 }
{
\dim_set:Nn \l_tmpb_dim
- {
- \g__nm_ht_last_row_dim + \g__nm_dp_ante_last_row_dim
- + \lineskip
- + \g__nm_dp_last_row_dim - \g__nm_dp_ante_last_row_dim
- }
+ { \g__nm_ht_last_row_dim + \lineskip + \g__nm_dp_last_row_dim }
}
{ \dim_zero:N \l_tmpb_dim }
\int_compare:nNnT \l__nm_first_col_int = \c_zero_int
@@ -816,7 +840,7 @@
\hbox_set:Nw \l_tmpa_box
\c_math_toggle_token
\bool_if:NT \l__nm_small_bool \scriptstyle
- \l__nm_code_for_first_col_tl
+ \int_compare:nNnT \c at iRow > \c_zero_int \l__nm_code_for_first_col_tl
}
l
<
@@ -845,13 +869,13 @@
name =
nm -
\int_use:N \g__nm_env_int -
- \int_use:N \g__nm_row_int -
+ \int_use:N \c at iRow -
0 ,
alias =
\str_if_empty:NF \l__nm_name_str
{
\l__nm_name_str -
- \int_use:N \g__nm_row_int -
+ \int_use:N \c at iRow -
0
}
]
@@ -871,9 +895,9 @@
>
{
\bool_gset_true:N \g__nm_last_col_found_bool
- \int_gincr:N \g__nm_col_int
+ \int_gincr:N \c at jCol
\int_gset:Nn \g__nm_col_total_int
- { \int_max:nn \g__nm_col_total_int \g__nm_col_int }
+ { \int_max:nn \g__nm_col_total_int \c at jCol }
\hbox_set:Nw \l_tmpa_box
\c_math_toggle_token
\bool_if:NT \l__nm_small_bool \scriptstyle
@@ -913,14 +937,14 @@
name =
nm -
\int_use:N \g__nm_env_int -
- \int_use:N \g__nm_row_int -
- \int_use:N \g__nm_col_int ,
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol ,
alias =
\str_if_empty:NF \l__nm_name_str
{
\l__nm_name_str -
- \int_use:N \g__nm_row_int -
- \int_use:N \g__nm_col_int
+ \int_use:N \c at iRow -
+ \int_use:N \c at jCol
}
]
{ \box_use:N \l_tmpa_box } ;
@@ -1052,9 +1076,12 @@
}
\cs_new_protected:Nn \__nm_after_array:
{
- \int_compare:nNnTF \g__nm_row_int > \c_zero_int
+ \int_compare:nNnTF \c at iRow > \c_zero_int
\__nm_after_array_i:
- { \__nm_error:n { Zero~row } }
+ {
+ \__nm_error:n { Zero~row }
+ \__nm_restore_iRow_jCol:
+ }
}
\cs_new_protected:Nn \__nm_after_array_i:
{
@@ -1061,11 +1088,11 @@
\group_begin:
\cs_if_exist:NT \tikz at library@external at loaded
{ \tikzset { external / export = false } }
- \int_gset_eq:NN \g__nm_col_int \g__nm_col_total_int
- \bool_if:nT \g__nm_last_col_found_bool { \int_gdecr:N \g__nm_col_int }
- \int_gset_eq:NN \g__nm_row_total_int \g__nm_row_int
+ \int_gset_eq:NN \c at jCol \g__nm_col_total_int
+ \bool_if:nT \g__nm_last_col_found_bool { \int_gdecr:N \c at jCol }
+ \int_gset_eq:NN \g__nm_row_total_int \c at iRow
\int_compare:nNnT \l__nm_last_row_int > { -1 }
- { \int_gsub:Nn \g__nm_row_int \c_one_int }
+ { \int_gsub:Nn \c at iRow \c_one_int }
\bool_if:NT \l__nm_last_row_without_value_bool
{
\iow_now:Nn \@mainaux \ExplSyntaxOn
@@ -1114,11 +1141,11 @@
\tikzset
{
every~picture / .style =
- {
- overlay ,
- remember~picture ,
- name~prefix = nm - \int_use:N \g__nm_env_int -
- }
+ {
+ overlay ,
+ remember~picture ,
+ name~prefix = nm - \int_use:N \g__nm_env_int -
+ }
}
\cs_set_eq:NN \line \__nm_line:nn
\g__nm_code_after_tl
@@ -1125,7 +1152,13 @@
\tl_gclear:N \g__nm_code_after_tl
\group_end:
\str_gclear:N \g__nm_type_env_str
+ \__nm_restore_iRow_jCol:
}
+\cs_new_protected:Nn \__nm_restore_iRow_jCol:
+ {
+ \cs_if_exist:NT \theiRow { \int_gset_eq:NN \c at iRow \l__nm_save_iRow_int }
+ \cs_if_exist:NT \thejCol { \int_gset_eq:NN \c at jCol \l__nm_save_jCol_int }
+ }
\cs_new_protected:Nn \__nm_find_extremities_of_line:nnnn
{
\cs_set:cpn { __nm _ dotted _ #1 - #2 } { }
@@ -1139,7 +1172,7 @@
\int_add:Nn \l__nm_final_i_int { #3 }
\int_add:Nn \l__nm_final_j_int { #4 }
\bool_set_false:N \l__nm_final_open_bool
- \int_compare:nNnTF \l__nm_final_i_int > \g__nm_row_int
+ \int_compare:nNnTF \l__nm_final_i_int > \c at iRow
{
\int_compare:nNnT { #3 } = 1
{ \bool_set_true:N \l__nm_final_open_bool }
@@ -1151,7 +1184,7 @@
{ \bool_set_true:N \l__nm_final_open_bool }
}
{
- \int_compare:nNnT \l__nm_final_j_int > \g__nm_col_int
+ \int_compare:nNnT \l__nm_final_j_int > \c at jCol
{
\int_compare:nNnT { #4 } = 1
{ \bool_set_true:N \l__nm_final_open_bool }
@@ -1211,7 +1244,7 @@
{ \bool_set_true:N \l__nm_initial_open_bool }
}
{
- \int_compare:nNnT \l__nm_initial_j_int > \g__nm_col_int
+ \int_compare:nNnT \l__nm_initial_j_int > \c at jCol
{
\int_compare:nNnT { #4 } = { -1 }
{ \bool_set_true:N \l__nm_initial_open_bool }
@@ -1279,6 +1312,39 @@
\end { tikzpicture }
}
\cs_generate_variant:Nn \__nm_retrieve_coords:nn { x x }
+\cs_new_protected:Nn \__nm_adjust_with_col_nodes:
+ {
+ \bool_if:NT \l__nm_initial_open_bool
+ {
+ \cs_if_exist:cT
+ { pgf at sh@ns at nm - \int_use:N \g__nm_env_int - col - 0 }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node \pgfutil at firstofone
+ ( nm - \int_use:N \g__nm_env_int - col - 0 )
+ \dim_gset:Nn \g__nm_x_initial_dim \pgf at x
+ \end { tikzpicture }
+ }
+ }
+ \bool_if:NT \l__nm_final_open_bool
+ {
+ \cs_if_exist:cT
+ {
+ pgf at sh@ns at nm - \int_use:N \g__nm_env_int - col -
+ \int_use:N \c at jCol
+ }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node \pgfutil at firstofone
+ (
+ nm - \int_use:N \g__nm_env_int - col -
+ \int_use:N \c at jCol
+ )
+ \dim_gset:Nn \g__nm_x_final_dim \pgf at x
+ \end { tikzpicture }
+ }
+ }
+ }
\cs_new_protected:Nn \__nm_draw_Ldots:nn
{
\cs_if_free:cT { __nm _ dotted _ #1 - #2 }
@@ -1321,6 +1387,7 @@
}
{ .base~west }
}
+ \__nm_adjust_with_col_nodes:
\bool_if:NT \l__nm_initial_open_bool
{ \dim_gset_eq:NN \g__nm_y_initial_dim \g__nm_y_final_dim }
\bool_if:NT \l__nm_final_open_bool
@@ -1368,6 +1435,7 @@
}
{ .mid~west }
}
+ \__nm_adjust_with_col_nodes:
\bool_if:NT \l__nm_initial_open_bool
{ \dim_gset_eq:NN \g__nm_y_initial_dim \g__nm_y_final_dim }
\bool_if:NT \l__nm_final_open_bool
@@ -1584,7 +1652,7 @@
\l_tmpb_int
}
\begin { tikzpicture } [ overlay ]
- \int_step_inline:nnnn 0 1 \l_tmpa_int
+ \int_step_inline:nnn 0 \l_tmpa_int
{
\pgfpathcircle
{ \pgfpoint { \g__nm_x_initial_dim } { \g__nm_y_initial_dim } }
@@ -1604,7 +1672,7 @@
\cs_new_protected:Nn \__nm_add_to_empty_cells:
{
\cs_gset:cpx
- { __nm _ empty _ \int_use:N \g__nm_row_int - \int_use:N \g__nm_col_int }
+ { __nm _ empty _ \int_use:N \c at iRow - \int_use:N \c at jCol }
{ \int_use:N \g__nm_env_int }
}
\NewDocumentCommand \__nm_Ldots { s }
@@ -1649,10 +1717,10 @@
\int_compare:nNnT #1 > 1
{
\seq_gput_left:Nx \g__nm_multicolumn_cells_seq
- { \int_eval:n \g__nm_row_int - \int_use:N \g__nm_col_int }
+ { \int_eval:n \c at iRow - \int_use:N \c at jCol }
\seq_gput_left:Nn \g__nm_multicolumn_sizes_seq { #1 }
}
- \int_gadd:Nn \g__nm_col_int { #1 - 1 }
+ \int_gadd:Nn \c at jCol { #1 - 1 }
}
\cs_new:Npn \__nm_Hdotsfor:
{
@@ -1670,8 +1738,8 @@
\tl_gput_right:Nx \g__nm_Hdotsfor_lines_tl
{
\__nm_draw_Hdotsfor:nnn
- { \int_use:N \g__nm_row_int }
- { \int_use:N \g__nm_col_int }
+ { \int_use:N \c at iRow }
+ { \int_use:N \c at jCol }
{ #2 }
}
\prg_replicate:nn { #2 - 1 } { & \multicolumn { 1 } { C } { } }
@@ -1697,7 +1765,7 @@
\bool_set_true:N \l__nm_initial_open_bool
}
}
- \int_compare:nNnTF { #2 + #3 -1 } = \g__nm_col_int
+ \int_compare:nNnTF { #2 + #3 -1 } = \c at jCol
{
\int_set:Nn \l__nm_final_j_int { #2 + #3 - 1 }
\bool_set_true:N \l__nm_final_open_bool
@@ -1719,31 +1787,37 @@
}
\cs_new_protected:Nn \__nm_line:nn
{
- \dim_zero_new:N \g__nm_x_initial_dim
- \dim_zero_new:N \g__nm_y_initial_dim
- \dim_zero_new:N \g__nm_x_final_dim
- \dim_zero_new:N \g__nm_y_final_dim
- \bool_set_false:N \l__nm_initial_open_bool
- \bool_set_false:N \l__nm_final_open_bool
- \bool_if:nTF
+ \bool_if:NF \c__nm_draft_bool
{
- \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g__nm_env_int - #1 }
- &&
- \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g__nm_env_int - #2 }
+ \dim_zero_new:N \g__nm_x_initial_dim
+ \dim_zero_new:N \g__nm_y_initial_dim
+ \dim_zero_new:N \g__nm_x_final_dim
+ \dim_zero_new:N \g__nm_y_final_dim
+ \bool_set_false:N \l__nm_initial_open_bool
+ \bool_set_false:N \l__nm_final_open_bool
+ \bool_if:nTF
+ {
+ \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g__nm_env_int - #1 }
+ &&
+ \cs_if_exist_p:c { pgf at sh@ns at nm - \int_use:N \g__nm_env_int - #2 }
+ }
+ {
+ \begin { tikzpicture }
+ \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
+ \tikz at parse@node \pgfutil at firstofone ( i )
+ \dim_gset:Nn \g__nm_x_initial_dim \pgf at x
+ \dim_gset:Nn \g__nm_y_initial_dim \pgf at y
+ \tikz at parse@node \pgfutil at firstofone ( f )
+ \dim_gset:Nn \g__nm_x_final_dim \pgf at x
+ \dim_gset:Nn \g__nm_y_final_dim \pgf at y
+ \end { tikzpicture }
+ \__nm_draw_tikz_line:
+ }
+ {
+ \__nm_error:nnn { unknown~cell~for~line~in~code-after }
+ { #1 } { #2 }
+ }
}
- {
- \begin { tikzpicture }
- \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
- \tikz at parse@node \pgfutil at firstofone ( i )
- \dim_gset:Nn \g__nm_x_initial_dim \pgf at x
- \dim_gset:Nn \g__nm_y_initial_dim \pgf at y
- \tikz at parse@node \pgfutil at firstofone ( f )
- \dim_gset:Nn \g__nm_x_final_dim \pgf at x
- \dim_gset:Nn \g__nm_y_final_dim \pgf at y
- \end { tikzpicture }
- \__nm_draw_tikz_line:
- }
- { \__nm_error:nnn { unknown~cell~for~line~in~code-after } { #1 } { #2 } }
}
\bool_if:NTF \c__nm_draft_bool
{ \cs_set_eq:NN \__nm_dotfill: \prg_do_nothing: }
@@ -1797,7 +1871,6 @@
\int_compare:nNnTF #1 = \c_zero_int
{ \__nm_error:n { Use~of~:~in~first~position } }
{
- \__nm_create_extra_nodes:
\bool_if:NF \c__nm_draft_bool
{
\dim_zero_new:N \g__nm_x_initial_dim
@@ -1806,39 +1879,52 @@
\dim_zero_new:N \g__nm_y_final_dim
\bool_set_true:N \l__nm_initial_open_bool
\bool_set_true:N \l__nm_final_open_bool
- \begin { tikzpicture } [ remember~picture ]
- \tikz at parse@node\pgfutil at firstofone
- ( 1 - #1 - large .north~east )
- \dim_gset:Nn \g__nm_x_initial_dim \pgf at x
- \dim_gset:Nn \g__nm_y_initial_dim \pgf at y
- \tikz at parse@node\pgfutil at firstofone
- ( \int_use:N \g__nm_row_int - #1 - large .south~east )
- \dim_gset:Nn \g__nm_x_final_dim \pgf at x
- \dim_gset:Nn \g__nm_y_final_dim \pgf at y
- \end { tikzpicture }
- \cs_if_exist:cT
- { pgf at sh@ns at nm -\int_use:N \g__nm_env_int - 1 - #1 - w }
+ \cs_if_exist:cTF
+ { pgf at sh@ns at nm -\int_use:N \g__nm_env_int - col - #1 }
{
\begin { tikzpicture } [ remember~picture ]
\tikz at parse@node\pgfutil at firstofone
- ( 1 - #1 - w .north~east )
+ ( col - #1 )
\dim_gset:Nn \g__nm_x_initial_dim \pgf at x
- \tikz at parse@node\pgfutil at firstofone
- ( \int_use:N \g__nm_row_int - #1 - w .south~east )
\dim_gset:Nn \g__nm_x_final_dim \pgf at x
+ \dim_gset:Nn \g__nm_y_final_dim \pgf at y
\end { tikzpicture }
- \dim_gadd:Nn \g__nm_x_initial_dim \arraycolsep
- \dim_gadd:Nn \g__nm_x_final_dim \arraycolsep
+ \dim_gset:Nn \g__nm_y_initial_dim { - \c_max_dim }
+ \int_step_inline:nn \c at jCol
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node\pgfutil at firstofone
+ ( 1 - ##1 . north~east )
+ \dim_gset:Nn \g__nm_y_initial_dim
+ { \dim_max:nn \g__nm_y_initial_dim \pgf at y }
+ \end { tikzpicture }
+ }
}
- \cs_if_exist:cT
- { pgf at sh@ns at nm -\int_use:N \g__nm_env_int - col - #1 }
{
\begin { tikzpicture } [ remember~picture ]
\tikz at parse@node\pgfutil at firstofone
- ( col - #1 )
+ ( 1 - #1 - large .north~east )
\dim_gset:Nn \g__nm_x_initial_dim \pgf at x
+ \dim_gset:Nn \g__nm_y_initial_dim \pgf at y
+ \tikz at parse@node\pgfutil at firstofone
+ ( \int_use:N \c at iRow - #1 - large .south~east )
\dim_gset:Nn \g__nm_x_final_dim \pgf at x
+ \dim_gset:Nn \g__nm_y_final_dim \pgf at y
\end { tikzpicture }
+ \cs_if_exist:cT
+ { pgf at sh@ns at nm -\int_use:N \g__nm_env_int - 1 - #1 - w }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz at parse@node\pgfutil at firstofone
+ ( 1 - #1 - w .north~east )
+ \dim_gset:Nn \g__nm_x_initial_dim \pgf at x
+ \tikz at parse@node\pgfutil at firstofone
+ ( \int_use:N \c at iRow - #1 - w .south~east )
+ \dim_gset:Nn \g__nm_x_final_dim \pgf at x
+ \end { tikzpicture }
+ \dim_gadd:Nn \g__nm_x_initial_dim \arraycolsep
+ \dim_gadd:Nn \g__nm_x_final_dim \arraycolsep
+ }
}
\__nm_draw_tikz_line:
}
@@ -1848,45 +1934,45 @@
{
\int_compare:nNnTF \l__nm_first_col_int = \c_zero_int
{
- \int_compare:nNnTF \g__nm_col_int = \c_zero_int
+ \int_compare:nNnTF \c at jCol = \c_zero_int
{
\int_compare:nNnTF \l__nm_first_row_int = \c_zero_int
{
- \int_compare:nNnF \g__nm_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g__nm_row_int = \l__nm_last_row_int
+ \int_compare:nNnF \c at iRow = \l__nm_last_row_int
\__nm_vline_i:
}
}
{
- \int_compare:nNnF \g__nm_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g__nm_row_int = \l__nm_last_row_int
+ \int_compare:nNnF \c at iRow = \l__nm_last_row_int
\__nm_vline_i:
}
}
}
{
- \int_compare:nNnF \g__nm_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g__nm_row_int = \l__nm_last_row_int
+ \int_compare:nNnF \c at iRow = \l__nm_last_row_int
\__nm_vline_i:
}
}
}
{
- \int_compare:nNnTF \g__nm_col_int = \c_zero_int
+ \int_compare:nNnTF \c at jCol = \c_zero_int
{
- \int_compare:nNnF \g__nm_row_int = { -1 }
+ \int_compare:nNnF \c at iRow = { -1 }
{
- \int_compare:nNnF \g__nm_row_int = { \l__nm_last_row_int - 1 }
+ \int_compare:nNnF \c at iRow = { \l__nm_last_row_int - 1 }
\__nm_vline_i:
}
}
{
- \int_compare:nNnF \g__nm_row_int = \c_zero_int
+ \int_compare:nNnF \c at iRow = \c_zero_int
{
- \int_compare:nNnF \g__nm_row_int = \l__nm_last_row_int
+ \int_compare:nNnF \c at iRow = \l__nm_last_row_int
\__nm_vline_i:
}
}
@@ -1982,7 +2068,7 @@
\__nm_create_nodes:
\int_set:Nn \l__nm_first_row_int 1
\int_set:Nn \l__nm_first_col_int 1
- \int_step_variable:nNn { \g__nm_row_int - 1 } \__nm_i:
+ \int_step_variable:nNn { \c at iRow - 1 } \__nm_i:
{
\dim_set:cn { l__nm_row _ \__nm_i: _ min _ dim }
{
@@ -1995,7 +2081,7 @@
\dim_set_eq:cc { l__nm_row _ \int_eval:n { \__nm_i: + 1 } _ max _ dim }
{ l__nm_row_\__nm_i: _min_dim }
}
- \int_step_variable:nNn { \g__nm_col_int - 1 } \__nm_j:
+ \int_step_variable:nNn { \c at jCol - 1 } \__nm_j:
{
\dim_set:cn { l__nm_column _ \__nm_j: _ max _ dim }
{
@@ -2014,7 +2100,7 @@
{ l__nm_column _ 1 _ min _ dim }
\l__nm_left_margin_dim
\dim_add:cn
- { l__nm_column _ \int_use:N \g__nm_col_int _ max _ dim }
+ { l__nm_column _ \int_use:N \c at jCol _ max _ dim }
\l__nm_right_margin_dim
\tikzset { name~suffix = -large }
\__nm_create_nodes:
@@ -2026,7 +2112,7 @@
\dim_gset:Nn \g_tmpa_dim \pgf at x
\tikz at parse@node \pgfutil at firstofone
( nm - \int_use:N \g__nm_env_int - 1 -
- \int_use:N \g__nm_col_int - large .north~east )
+ \int_use:N \c at jCol - large .north~east )
\dim_gset:Nn \g_tmpb_dim \pgf at x
\end { tikzpicture }
\iow_now:Nn \@mainaux \ExplSyntaxOn
@@ -2092,7 +2178,8 @@
inner~sep = \c_zero_dim ,
name = nm - \int_use:N \g__nm_env_int - \__nm_i: - \__nm_j: ,
alias =
- \str_if_empty:NF \l__nm_name_str { \l__nm_name_str - \__nm_i: - \__nm_j: }
+ \str_if_empty:NF \l__nm_name_str
+ { \l__nm_name_str - \__nm_i: - \__nm_j: }
]
;
}
@@ -2119,10 +2206,10 @@
\tl_gput_left:Nx \g__nm_code_after_tl
{
\__nm_Block_iv:nnnnn
- { \int_use:N \g__nm_row_int }
- { \int_use:N \g__nm_col_int }
- { \int_eval:n { \g__nm_row_int + #1 - 1 } }
- { \int_eval:n { \g__nm_col_int + #2 - 1 } }
+ { \int_use:N \c at iRow }
+ { \int_use:N \c at jCol }
+ { \int_eval:n { \c at iRow + #1 - 1 } }
+ { \int_eval:n { \c at jCol + #2 - 1 } }
\exp_not:n { { #3 $ #4 $ } }
}
}
@@ -2141,8 +2228,8 @@
{
\bool_if:nTF
{
- \int_compare_p:nNn { #3 } > \g__nm_row_int
- || \int_compare_p:nNn { #4 } > \g__nm_col_int
+ \int_compare_p:nNn { #3 } > \c at iRow
+ || \int_compare_p:nNn { #4 } > \c at jCol
}
{ \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
{
@@ -2221,13 +2308,11 @@
\__nm_msg_new:nn { Wrong~last~row }
{
You~have~used~'last-row=\int_use:N \l__nm_last_row_int'~but~your~environment~
- \{\g__nm_type_env_str\}~seems~to~have~\int_use:N \g__nm_row_int\
- rows.~If~you~go~on,~the~value~of~\int_use:N \g__nm_row_int\
+ \{\g__nm_type_env_str\}~seems~to~have~\int_use:N \c at iRow
+ rows.~If~you~go~on,~the~value~of~\int_use:N \c at iRow
will~be~used~for~last~row.~You~can~avoid~this~problem~by~using~'last-row'~
without~value~(more~compilations~might~be~necessary).
}
-\__nm_msg_new:nn { Draft~mode }
- { The~compilation~is~in~draft~mode:~the~dotted~lines~won't~be~drawn. }
\__nm_msg_new:nn { Yet~in~env }
{
Environments~\{NiceArray\}~(or~\{NiceMatrix\},~etc.)~can't~be~nested.\\
@@ -2351,7 +2436,7 @@
the~same~environment~name~twice.~You~can~go~on,~but,~
maybe,~you~will~have~incorrect~results~especially~
if~you~use~'columns-width=auto'.~If~you~use~nicematrix~inside~some~
- environments~of~amsmath,~this~error~may~be~an~artefact.~In~this~case,
+ environments~of~amsmath,~this~error~may~be~an~artefact.~In~this~case,~
use~the~option~'allow-duplicate-names'.\\
For~a~list~of~the~names~already~used,~type~H~<return>. \\
}
@@ -2377,8 +2462,15 @@
first~position~of~the~preamble~of~the~environment~\{\g__nm_type_env_str\}. \\
If~you~go~on,~this~dotted~line~will~be~ignored.
}
+\__nm_msg_new:nn { Obsolete~environment }
+ {
+ The~environment~\{\@currenvir\}~is~obsolete.~
+ We~should~use~#1~instead.
+ }
\NewDocumentEnvironment { pNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\pNiceArray
}
@@ -2385,6 +2477,8 @@
{ \endpNiceArray }
\NewDocumentEnvironment { bNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\bNiceArray
}
@@ -2391,6 +2485,8 @@
{ \endbNiceArray }
\NewDocumentEnvironment { BNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\BNiceArray
}
@@ -2397,6 +2493,8 @@
{ \endBNiceArray }
\NewDocumentEnvironment { vNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\vNiceArray
}
@@ -2403,6 +2501,8 @@
{ \endvNiceArray }
\NewDocumentEnvironment { VNiceArrayC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\VNiceArray
}
@@ -2409,6 +2509,8 @@
{ \endVNiceArray }
\NewDocumentEnvironment { pNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\int_set:Nn \l__nm_first_row_int \c_zero_int
\pNiceArray
@@ -2416,6 +2518,8 @@
{ \endpNiceArray }
\NewDocumentEnvironment { bNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\int_set:Nn \l__nm_first_row_int \c_zero_int
\bNiceArray
@@ -2423,6 +2527,8 @@
{ \endbNiceArray }
\NewDocumentEnvironment { BNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\int_set:Nn \l__nm_first_row_int \c_zero_int
\BNiceArray
@@ -2430,6 +2536,8 @@
{ \endBNiceArray }
\NewDocumentEnvironment { vNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\bool_set_true:N \l__nm_last_col_bool
\int_set:Nn \l__nm_first_row_int \c_zero_int
\vNiceArray
@@ -2437,6 +2545,8 @@
{ \endvNiceArray }
\NewDocumentEnvironment { VNiceArrayRC } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\int_set:Nn \l__nm_first_row_int \c_zero_int
\VNiceArray
@@ -2444,6 +2554,8 @@
{ \endVNiceArray }
\NewDocumentEnvironment { NiceArrayCwithDelims } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~option~'last-col' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\NiceArrayWithDelims
}
@@ -2450,6 +2562,8 @@
{ \endNiceArrayWithDelims }
\NewDocumentEnvironment { NiceArrayRCwithDelims } { }
{
+ \msg_info:nnn { nicematrix } { Obsolete~environment }
+ { the~options~'last-col'~and~'first-row' }
\int_set:Nn \l__nm_last_col_int \c_zero_dim
\int_set:Nn \l__nm_first_row_int \c_zero_int
\NiceArrayWithDelims
More information about the tex-live-commits
mailing list