summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nicematrix/nicematrix.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-09-18 03:08:21 +0000
committerNorbert Preining <norbert@preining.info>2022-09-18 03:08:21 +0000
commitbaa3e10650110291de10e0e8e6a1e48ac4579afe (patch)
tree8eff974515ba91e538c94002db56558182e59a4e /macros/latex/contrib/nicematrix/nicematrix.dtx
parent9ae94dce28ea17b97ef24019e324353cd6af4dba (diff)
CTAN sync 202209180308
Diffstat (limited to 'macros/latex/contrib/nicematrix/nicematrix.dtx')
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx141
1 files changed, 131 insertions, 10 deletions
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index 1884212f42..659e7fa56a 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -17,8 +17,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{6.13}
-\def\myfiledate{2022/08/24}
+\def\myfileversion{6.13a}
+\def\myfiledate{2022/09/17}
%
%
%<*batchfile>
@@ -1200,7 +1200,7 @@ version 2005/12/01 or later.
% It's also possible to define commands and letters for customized rules with
% the key |custom-line| available in |\NiceMatrixOptions| and in the options of
% individual environments. That key takes in as argument a list of
-% \textsl{key=value} pairs. First, there is two keys to define the tools which
+% \textsl{key=value} pairs. First, there is three keys to define the tools which
% will be used to use that new type of rule.
%
% \begin{itemize}
@@ -1754,7 +1754,6 @@ version 2005/12/01 or later.
% arguments for the colors, this command takes in an argument which is a
% (comma-separated) list of colors. In that list, the symbol |=| represent a
% color identical to the previous one.
-% \end{itemize}
%
% \smallskip
% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
@@ -1784,8 +1783,49 @@ version 2005/12/01 or later.
% Alexandra \\
% \end{NiceTabular}
%
+% \bigskip
+% It's also possible to use in the command |\rowlistcolors| a color series
+% defined by the command |\definecolorseries| of \pkg{xcolor} (and initialized
+% with the command |\resetcolorseries|\footnote{For the initialization, in the
+% following example, you have used the counter |iRow| which, when used in the
+% |\CodeBefore| (and in the |\CodeAfter|) corresponds to the number of rows of
+% the array: cf.~p~\pageref{iRow}. That leads to an adjustement of the gradation
+% of the colors to the size of the tabular.}).
%
-% \medskip
+% \smallskip
+% \begin{BVerbatim}[boxwidth=12cm,baseline=c]
+% \begin{NiceTabular}{c}
+% \CodeBefore
+% ~emphase#\definecolorseries{BlueWhite}{rgb}{last}{blue}{white}@
+% ~emphase#\resetcolorseries{\value{iRow}}{BlueWhite}@
+% ~emphase#\rowlistcolors{1}{BlueWhite!!+}@
+% \Body
+% Peter \\
+% James \\
+% Abigail \\
+% Elisabeth \\
+% Claudius \\
+% Jane \\
+% Alexandra \\
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{c}
+% \CodeBefore
+% \definecolorseries{BlueWhite}{rgb}{last}{blue}{white}
+% \resetcolorseries[\value{iRow}]{BlueWhite}
+% \rowlistcolors{1}{BlueWhite!!+}
+% \Body
+% Peter \\
+% James \\
+% Abigail \\
+% Elisabeth \\
+% Claudius \\
+% Jane \\
+% Alexandra \\
+% \end{NiceTabular}
+% \end{itemize}
+%
+% \vspace{1cm}
% We recall that all the color commands we have described don't color the cells
% which are in the ``corners''. In the following example, we use the key
% |corners| to require the determination of the corner \emph{north east} (NE).
@@ -3876,6 +3916,8 @@ version 2005/12/01 or later.
%
% \subsection{The counters iRow and jCol}
%
+% \label{iRow}
+%
% In the cells of the array, it's possible to use the LaTeX counters |iRow| and
% |jCol| which represent the number of the current row and the number of the
% current column\footnote{We recall that the exterior ``first row'' (if it
@@ -5888,6 +5930,77 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% \subsection*{Security test}
+%
+% Within the package \pkg{nicematrix}, we will have to test whether a cell of a
+% |{NiceTabular}| is empty. For the cells of the columns of type |p|, |b|, |m|,
+% |X| and |V|, we will test whether the cell is syntactically empty (that is to
+% say that there is only spaces between the ampersands |&|). That test will be
+% done with the command |\@@_test_if_empty:| by testing if the two first tokens
+% in the cells are (during the TeX process) are |\ignorespaces| and |\unskip|.
+%
+% However, if, one day, there is a changement in the implementation of
+% \pkg{array}, maybe that this test will be broken (and \pkg{nicematrix} also).
+%
+% That's why, by security, we will take a test in a small |{tabular}| composed
+% in the box |\l_tmpa_box| used as sandbox.
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Internal~error }
+ {
+ A~fatal~internal~error~have~occurred.\\
+ If~you~see~this~message,~contact~the~author~of~the~package~'nicematrix'~
+ because~this~error~should~not~have~occurred.
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\@@_msg_new:nn { mdwtab~loaded }
+ {
+ The~packages~'mdwtab'~and~'nicematrix'~are~incompatible.~
+ This~error~is~fatal.
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_security_test:n #1
+ {
+ \peek_meaning:NTF \ignorespaces
+ { \@@_security_test_i:w }
+ { \@@_fatal:n { Internal~error } }
+ #1
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_security_test_i:w \ignorespaces #1
+ {
+ \peek_meaning:NF \unskip { \@@_fatal:n { Internal~error } }
+ #1
+ }
+% \end{macrocode}
+%
+% \bigskip
+% Here, the box |\l_tmpa_box| will be used as sandbox to take our security test.
+% \begin{macrocode}
+\hook_gput_code:nnn { begindocument } { . }
+ {
+ \@ifpackageloaded { mdwtab }
+ { \@@_fatal:n { mdwtab~loaded } }
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \begin { tabular } { c > { \@@_security_test:n } c c }
+ text & & text
+ \end { tabular }
+ }
+ }
+ }
+% \end{macrocode}
%
% \bigskip
% \subsection*{Technical definitions}
@@ -8497,7 +8610,7 @@ version 2005/12/01 or later.
% we use the following technic:
% \begin{itemize}
% \item for the columns of type |p|, |m|, |b|, |V| (of \pkg{varwidth}) or |X|,
-% we test whether the cell is syntacticly empty with |\@@_test_if_empty:| and
+% we test whether the cell is syntactically empty with |\@@_test_if_empty:| and
% |\@@_test_if_empty_for_S:|
% \item if the width of the box |\l_@@_cell_box| (created with the content of
% the cell) is equal to zero, we consider the cell as empty (however,
@@ -10580,7 +10693,14 @@ version 2005/12/01 or later.
\peek_meaning:NT \unskip
{
\tl_gput_right:Nn \g_@@_cell_after_hook_tl
- { \box_set_wd:Nn \l_@@_cell_box \c_zero_dim }
+ {
+ \box_set_wd:Nn \l_@@_cell_box \c_zero_dim
+% \end{macrocode}
+% We put the following code in order to have a column with the correct width
+% even when all the cells of the column are empty.
+% \begin{macrocode}
+ \skip_horizontal:N \l_@@_col_width_dim
+ }
}
#1
}
@@ -11031,8 +11151,9 @@ version 2005/12/01 or later.
\@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list }
\tl_gclear:N \g_@@_preamble_tl
\exp_after:wN \@@_patch_m_preamble:n \the \@temptokena \q_stop
- \tl_gset_eq:NN #1 \g_@@_preamble_tl
\group_end:
+ \tl_set_eq:NN #1 \g_@@_preamble_tl
+ % \group_end:
}
% \end{macrocode}
%
@@ -12434,7 +12555,7 @@ version 2005/12/01 or later.
\bool_if:NTF \l_@@_in_code_after_bool
{ \@@_error_or_warning:n { TabularNote~in~CodeAfter } }
{
- \tl_if_empty:NF \g_@@_taublarnote_tl
+ \tl_if_empty:NF \g_@@_tabularnote_tl
{ \tl_gput_right:Nn \g_@@_tabularnote_tl { \par } }
\tl_gput_right:Nn \g_@@_tabularnote_tl { ##1 }
}
@@ -17359,7 +17480,7 @@ version 2005/12/01 or later.
{
{ \int_compare_p:nNn { #2 } = 1 }
{ \dim_compare_p:n { \l_@@_col_width_dim >= \c_zero_dim } }
- { ! \l_@@_respect_arraystretch_bool }
+ { ! \g_@@_rotate_bool } % added 2022/09/16
}
% \end{macrocode}
% When the block is mono-column in a column with a fixed width (eg |p{3cm}|).