From 7e1a772944cf3d35b15db92cf639c702d1acf053 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 8 Jun 2020 03:02:56 +0000 Subject: CTAN sync 202006080302 --- macros/latex/contrib/abnt/abnt-doc.pdf | Bin 119879 -> 119766 bytes macros/latex/contrib/abnt/abnt-doc.tex | 2 +- macros/latex/contrib/abnt/abnt.sty | 5 +- .../beamer-contrib/beamerappendixnote/README.md | 2 +- .../beamerappendixnote/beamerappendixnote.dtx | 46 +- .../beamerappendixnote/beamerappendixnote.pdf | Bin 53574 -> 56311 bytes .../beamerappendixnote/example-basic.pdf | Bin 10737 -> 9924 bytes .../beamerappendixnote/example-basic.tex | 4 +- macros/latex/contrib/cellprops/LICENSE | 4 +- macros/latex/contrib/cellprops/README.md | 2 +- macros/latex/contrib/cellprops/cellprops.dtx | 528 ++++++++++++++------- macros/latex/contrib/cellprops/cellprops.ins | 2 +- macros/latex/contrib/cellprops/cellprops.pdf | Bin 557254 -> 564606 bytes macros/latex/contrib/nicematrix/README.md | 4 +- .../latex/contrib/nicematrix/nicematrix-french.pdf | Bin 355393 -> 355481 bytes macros/latex/contrib/nicematrix/nicematrix.dtx | 117 ++--- macros/latex/contrib/nicematrix/nicematrix.pdf | Bin 875835 -> 873835 bytes 17 files changed, 436 insertions(+), 280 deletions(-) (limited to 'macros/latex') diff --git a/macros/latex/contrib/abnt/abnt-doc.pdf b/macros/latex/contrib/abnt/abnt-doc.pdf index 3b82b51321..ff44543ede 100644 Binary files a/macros/latex/contrib/abnt/abnt-doc.pdf and b/macros/latex/contrib/abnt/abnt-doc.pdf differ diff --git a/macros/latex/contrib/abnt/abnt-doc.tex b/macros/latex/contrib/abnt/abnt-doc.tex index 389bd6c5ea..ac8cb3461a 100644 --- a/macros/latex/contrib/abnt/abnt-doc.tex +++ b/macros/latex/contrib/abnt/abnt-doc.tex @@ -36,7 +36,7 @@ \begin{center} \tikz\node[diamond,shape aspect=1.2,%draw=green,ultra thick, remember picture,overlay,%minimum size=0.6\textwidth, - left color=SpringGreen,shading angle=45,align=center] at (0,0){\includegraphics[height=3cm,width=0.4\textwidth,keepaspectratio]{icone}\\{\Large O pacote <<\texttt{abnt}>>}\\[10pt]\large Youssef Cherem\\[6pt]2019}; + left color=SpringGreen,shading angle=45,align=center] at (0,0){\includegraphics[height=3cm,width=0.4\textwidth,keepaspectratio]{icone}\\{\Large O pacote <<\texttt{abnt}>>}\\[10pt]\large Youssef Cherem\\[6pt]2020}; \end{center} \vspace{4cm} diff --git a/macros/latex/contrib/abnt/abnt.sty b/macros/latex/contrib/abnt/abnt.sty index a29009e1ad..d2a637d008 100644 --- a/macros/latex/contrib/abnt/abnt.sty +++ b/macros/latex/contrib/abnt/abnt.sty @@ -14,9 +14,10 @@ % The Current Maintainer of this work is Youssef Cherem. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{abnt}[2020/04/14] +\ProvidesPackage{abnt}[2020/06/06] \RequirePackage[left=3cm,top=3cm,right=2cm,bottom=2cm]{geometry} \RequirePackage{setspace} +\onehalfspacing \RequirePackage[automark,markcase=used]{scrlayer-scrpage} \newcommand{\pretextual}{\clearpairofpagestyles} @@ -256,7 +257,7 @@ tocentrynumsep=0pt% <- added \newenvironment{citacao}{\vskip -4pt \singlespacing\setlength{\parindent}{0pt} - \leftskip=6cm\footnotesize}{\medskip} + \leftskip=6cm\footnotesize}{\par\medskip} \RequirePackage{enumerate} diff --git a/macros/latex/contrib/beamer-contrib/beamerappendixnote/README.md b/macros/latex/contrib/beamer-contrib/beamerappendixnote/README.md index 48321f6dc4..b75eb9c94f 100644 --- a/macros/latex/contrib/beamer-contrib/beamerappendixnote/README.md +++ b/macros/latex/contrib/beamer-contrib/beamerappendixnote/README.md @@ -1,4 +1,4 @@ -Beamer appendix note introduces the `\beamerappxnote` command, which puts the note's content on a separate beamer frame, shown by the command `\printappxnotes`. It also creates interactive buttons to move back and forth between the two frames. +Beamer appendix note introduces the `\appxnote` command, which puts the note's content on a separate beamer frame, shown by the command `\printappxnotes`. It also creates interactive buttons to move back and forth between the two frames. # Licence diff --git a/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.dtx b/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.dtx index 05445b6b65..206897ec5d 100644 --- a/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.dtx +++ b/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.dtx @@ -23,23 +23,35 @@ % % \ProvidesPackage{beamerappendixnote} %<*package> - [2020/05/13 v1.0 initial version] + [2020/06/07 v1.0.1 updated documentation] % %<*driver> \documentclass{l3doc} -\usepackage{beamerappendixnote} -\usepackage{listings} +%% Packages +% This package +\usepackage{beamerappendixnote} +% Unicode +\usepackage{fontspec,unicode-math} +% Auxiliary +\usepackage{listings,graphicx} + +%% Layout +% Font +\setmainfont{TeX Gyre Pagella} +% Listings \lstset{ basicstyle=\ttfamily, columns=fullflexible, keepspaces=true, } -\usepackage{graphicx} +% Links +\hypersetup{colorlinks,citecolor=blue,linkcolor=blue,urlcolor=blue} -\begin{document} +%% Definitions +\newcommand\fnurl[2]{\href{#1}{#2}\footnote{\url{#1}}} -\changes{v1.0}{2020/05/13}{Initial version} +\begin{document} \GetFileInfo{beamerappendixnote.dtx} @@ -58,29 +70,33 @@ \begin{documentation} -\noindent Beamer appendix note introduces the \cs{beamerappxnote} command, which puts the note's content on a separate beamer frame, shown by the command \cs{printappxnotes}. It also creates interactive buttons to move back and forth between the two frames: +\noindent Beamer appendix note introduces the \cs{appxnote} command, which puts the note's content on a separate beamer frame, shown by the command \cs{printappxnotes}. It also creates interactive buttons to move back and forth between the two frames: \lstinputlisting{example-basic.tex} \includegraphics[page=1,width=.49\linewidth]{example-basic.pdf} \includegraphics[page=2,width=.49\linewidth]{example-basic.pdf} \clearpage +\section{Installation} + +The \pkg{beamerappendixnote} package is available on \fnurl{https://ctan.org/pkg/beamerappendixnote}{CTAN}. The easiest way to install it is through a package manager. For help, see the \fnurl{https://miktex.org/howto/miktex-console}{MiKTeX} or \fnurl{https://www.tug.org/texlive/doc/texlive-en/texlive-en.html\#x1-430005}{TeX Live} manual. To build \pkg{beamerappendixnote} from the source code, follow the instructions in the \verb|README.md| file. + \section{Usage} \begin{function}{\appxnote} - \begin{syntax} + \begin{syntax} \cs{appxnote}\marg{title}\marg{content} - \end{syntax} - - Create a new appendix note. Inserts a \cs{beamergotobutton} to a frame that contains \marg{content}. The appendix frame is created using \cs{printappxnotes}. The button’s text and the title of the appendix frame are both set to \marg{title}. + \end{syntax} + + Create a new appendix note. Inserts a \cs{beamergotobutton} to a frame that contains \marg{content}. The appendix frame is created using \cs{printappxnotes}. The button’s text and the title of the appendix frame are both set to \marg{title}. \end{function} \begin{function}{\printappxnotes} - \begin{syntax} + \begin{syntax} \cs{printappxnotes} - \end{syntax} - - Prints appendix notes in the order they are created using \cs{appxnote}. Has to be used after the last appendix note. Uses one frame per note. Inserts a \cs{beamerreturnbutton} button to the frame where \cs{appxnote} was called, followed by the content, separated by a \cs{vfill}. + \end{syntax} + + Prints appendix notes in the order they are created using \cs{appxnote}. Has to be used after the last appendix note. Uses one frame per note. Inserts a \cs{beamerreturnbutton} button to the frame where \cs{appxnote} was called, followed by the content, separated by a \cs{vfill}. \end{function} \end{documentation} diff --git a/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.pdf b/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.pdf index cc3d4de9e8..c6160f5186 100644 Binary files a/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.pdf and b/macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.pdf b/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.pdf index 1e560098a0..6f96ecb4f2 100644 Binary files a/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.pdf and b/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.tex b/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.tex index e0eb2b68b8..e2349546c7 100644 --- a/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.tex +++ b/macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.tex @@ -1,9 +1,9 @@ \documentclass[20pt]{beamer} \usepackage{beamerappendixnote} \begin{document} -\begin{frame}{Main frame} +\begin{frame}{Main title} Main content \vfill - \appxnote{Appendix note}{Note content} + \appxnote{Note title}{Note content} \end{frame} \printappxnotes \end{document} \ No newline at end of file diff --git a/macros/latex/contrib/cellprops/LICENSE b/macros/latex/contrib/cellprops/LICENSE index 82ae7cd1eb..19e0cc42ed 100644 --- a/macros/latex/contrib/cellprops/LICENSE +++ b/macros/latex/contrib/cellprops/LICENSE @@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. cellprops - Copyright (C) 2016-2019 Julien "_FrnchFrgg_" RIVAUD + Copyright (C) 2016-2020 Julien "_FrnchFrgg_" RIVAUD This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - cellprops Copyright (C) 2016-2019 Julien "_FrnchFrgg_" RIVAUD + cellprops Copyright (C) 2016-2020 Julien "_FrnchFrgg_" RIVAUD This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. diff --git a/macros/latex/contrib/cellprops/README.md b/macros/latex/contrib/cellprops/README.md index 740e9561b3..5378701f8e 100644 --- a/macros/latex/contrib/cellprops/README.md +++ b/macros/latex/contrib/cellprops/README.md @@ -13,7 +13,7 @@ Look at the PDF documentation to see examples and detailed usage. -Copyright (C) 2016-2019 Julien "_FrnchFrgg_" RIVAUD +Copyright (C) 2016-2020 Julien "_FrnchFrgg_" RIVAUD This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/macros/latex/contrib/cellprops/cellprops.dtx b/macros/latex/contrib/cellprops/cellprops.dtx index 67b4dc8cd2..86c1d8ef2c 100644 --- a/macros/latex/contrib/cellprops/cellprops.dtx +++ b/macros/latex/contrib/cellprops/cellprops.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % vim: tw=80 spl=en % -%% File: cellprops.dtx (C) Copyright 2016-2019 RIVAUD Julien +%% File: cellprops.dtx (C) Copyright 2016-2020 RIVAUD Julien %% %% It may be distributed and/or modified under the conditions of the %% General Public License (GPL), either version 3 of this @@ -14,8 +14,8 @@ \RequirePackage{expl3}[2018/06/19] \def\ExplFileName{cellprops} \def\ExplFileDescription{CSS-like cell and table properties} -\def\ExplFileDate{2019/09/29} -\def\ExplFileVersion{1.6} +\def\ExplFileDate{2020/06/07} +\def\ExplFileVersion{1.7a} % %<*driver> \documentclass[full]{l3doc} @@ -159,6 +159,8 @@ % %\cellprops{ % td { border: thin solid black; } +% tr:nth-child(-n+3) { background-color: black!10; } +% tr:nth-child(n+8) { background-color: blue!10; } % tr:nth-child(4n) td:first-child, % tr:nth-child(4n+1) td:nth-child(2), % tr:nth-child(4n+2) td:nth-child(3), @@ -200,6 +202,8 @@ %\begin{verbatim} %\cellprops{ % td { border: thin solid black; } +% tr:nth-child(-n+3) { background-color: black!10; } +% tr:nth-child(n+8) { background-color: blue!10; } % tr:nth-child(4n) td:first-child, % tr:nth-child(4n+1) td:nth-child(2), % tr:nth-child(4n+2) td:nth-child(3), @@ -312,16 +316,13 @@ % "td:nth-child()" to select a column. Currently, cells spanning several % columns actually increase the child count by the number of column they % span, so that nth-child can still be used to select columns. -% This is not consistent with the CSS specification. -% \item Any ":nth-child("$A$"n+"$B$")" or ":nth-child("$A$"n)" -% or ":nth-child("$B$")" is supported, with arbitrary $A$~and~$B$. The -% performance will slowly degrade the more different~$A$ are active -% (but if in a \TeX\ group, they will become inactive again when leaving -% the group). \emph{A big difference} with the CSS specification is that -% currently $n$ is not enforced non-negative. In particular -% ":nth-child(2n+8)" \emph{will} match for the second element. This also -% prevents tricks like ":nth-child(-n+3)". I am investigating how to -% handle those without slowing down the general case. +% This is not consistent with the HTML specification of tables, but acts +% as if a cell spanning multiple columns was implicitly creating +% "display: none" empty cell siblings following it. +% \item Any ":nth-child("$A$"n+"$B$")" or ":nth-child("$A$"n)" or +% ":nth-child("$B$")" is supported, with arbitrary $A$~and~$B$, including +% nothing for~$A$ (standing for~$A = 1$) or just a minus sign (standing +% for~$A = -1$). % \end{itemize} % % \subsection{Compatibility} @@ -338,8 +339,7 @@ % % Add a test suite with compatibility tests. Improve % the documentation, and test more \LaTeX\ table constructs and preamble column -% types. Enforce $n\ge0$ in ":nth-child" selectors to match the CSS -% specification. +% types. % % \end{documentation} % @@ -452,6 +452,12 @@ % % \end{macro} % +% \begin{macro}{\@@_parse_properties:nn} +% Now we can parse the block of properties for a given selector. The first +% argument is the token list variable which will ultimately hold the expanded +% code setting internal variables from the properties. That code will be +% called when recalling the computed values in a specific context. +% % \begin{macrocode} \cs_new_protected:Nn \@@_parse_properties:Nn { \tl_clear:N #1 @@ -477,7 +483,20 @@ } } } - +% \end{macrocode} +% \end{macro} +% +% \subsection{Defining new properties} +% +% \subsubsection{Some helpers} +% +% \begin{macro}{\@@_fourval_setter:nnnnnn} +% \begin{macro}{\@@_define_fourval_properties:nnnnnn} +% We first define helpers to parse and define compound properties like +% "padding" where you can give one to four different values and the missing +% values are copied from the given ones. +% +% \begin{macrocode} \cs_new:Nn \@@_fourval_setter:nnnnnn { \@@_fourval_setter_aux:w {#1}{#2}{#3}{#4}#6~{\q_no_value}~{\q_no_value}~{\q_no_value}~\q_stop @@ -510,7 +529,14 @@ #2 } } - +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_color_setter:nn} +% This macro is used to parse color definitions, either named, rgb, or hsl. +% +% \begin{macrocode} \tl_const:Nn \c_@@_inherit_color_tl { \q_nil } \cs_new_nopar:Nn \@@_color_setter:nn { @@ -533,6 +559,13 @@ } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_bgcolor_setter:nn} +% For background colors, we support "transparent" as an alias for "inherit". +% +% \begin{macrocode} \cs_new_nopar:Nn \@@_bgcolor_setter:nn { \str_if_eq:nnTF {#2} {transparent} { \@@_color_setter:nn {#1} {inherit} @@ -540,7 +573,13 @@ \@@_color_setter:nn {#1} {#2} } } - +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_linewidth_setter:nn} +% A setter for line widths that supports common keywords: +% +% \begin{macrocode} \cs_new_nopar:Nn \@@_linewidth_setter:nn { \str_case:nnF {#2} { {thin} { \@@_generic_setter:nnn \exp_not:n {#1} { \fboxrule} } @@ -550,7 +589,16 @@ \@@_generic_setter:nnn \exp_not:n {#1} {#2} } } - +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_border_setter:nn } +% "border" and "border-" are compound properties that can define the +% width, the style and the color. As per the specification, the "border" +% property always sets all four sides at the same time instead of being a +% four-valued property. +% +% \begin{macrocode} \cs_new_nopar:Nn \@@_border_setter:nn { \@@_border_setter_aux:nw {#1}#2~{\q_no_value}~{\q_no_value}~\q_stop @@ -586,13 +634,22 @@ \@@_delegate_setter:nn {#1-color} {#4} } } + \cs_new:Npn \@@_border_setter_isstyle:nTF #1 { \str_case:nnTF {#1} { {none}{} {hidden}{} {dotted}{} {dashed}{} {solid}{} {double}{} {groove}{} {ridge}{} {inset}{} {outset}{} } } - +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Actual definitions of properties} +% +% First some simple-valued properties where we just store the value +% unexpanded. +% +% \begin{macrocode} \@@_define_properties:nn { \@@_generic_setter:nnn \exp_not:n }{ @@ -600,19 +657,32 @@ min-depth, min-width, } - +% \end{macrocode} +% +% "padding" is a compound property for "padding-" which store their +% value unexpanded. +% +% \begin{macrocode} \@@_define_fourval_properties:nnnnnn { \@@_generic_setter:nnn \exp_not:n } {padding} {padding-top}{padding-right}{padding-bottom}{padding-left} - +% \end{macrocode} +% +% Simple-valued properties that store a str value. +% +% \begin{macrocode} \@@_define_properties:nn { \@@_generic_setter:nnn \tl_to_str:n }{ text-align, math-mode, } - +% \end{macrocode} +% +% Some simple-valued color properties, using the dedicated parser. +% +% \begin{macrocode} \@@_define_properties:nn { \@@_color_setter:nn }{ @@ -624,31 +694,54 @@ }{ background-color, } - +% \end{macrocode} +% +% A compound property whose individual sides use the linewidth setter for +% keyword recognition. +% +% \begin{macrocode} \@@_define_fourval_properties:nnnnnn { \@@_linewidth_setter:nn } {border-width} {border-top-width}{border-right-width} {border-bottom-width}{border-left-width} - +% \end{macrocode} +% +% A compound property whose individual sides are str values. They could be +% checked against the list of valid values, but any non-existing one will be +% ignored anyway due to the way they are implemented. +% +% \begin{macrocode} \@@_define_fourval_properties:nnnnnn { \@@_generic_setter:nnn \tl_to_str:n } {border-style} {border-top-style}{border-right-style} {border-bottom-style}{border-left-style} - +% \end{macrocode} +% +% A compound property whose individual sides are colors. +% +% \begin{macrocode} \@@_define_fourval_properties:nnnnnn { \@@_color_setter:nn } {border-color} {border-top-color}{border-right-color} {border-bottom-color}{border-left-color} - +% \end{macrocode} +% +% The five border-specific compound properties are defined here. +% +% \begin{macrocode} \@@_define_properties:nn { \@@_border_setter:nn }{ border, border-top, border-right, border-bottom, border-left } - +% \end{macrocode} +% +% \subsection{Parsing a CSS stylesheet} +% +% \begin{macrocode} \NewDocumentCommand \cellprops { m } { \@@_parse_css:n {#1} } @@ -656,135 +749,235 @@ \cs_new_protected:Nn \@@_parse_css:n { \@@_parse_css:w #1 \q_mark {\q_nil} \q_stop } - -\tl_new:N \l_@@_parse_tmp_tl +% \end{macrocode} +% +% Grab the content up to the first opening brace. That content will be the +% comma-separated selector list, and the braced content is a block of +% properties. We can loop until there is no such block remaining. +% +% \begin{macrocode} +\tl_new:N \l_@@_parse_properties_tl \NewDocumentCommand \@@_parse_css:w { lmu{\q_stop} } { \quark_if_nil:nF {#2} { - \@@_parse_properties:Nn \l_@@_parse_tmp_tl {#2} + \@@_parse_properties:Nn \l_@@_parse_properties_tl {#2} \clist_map_inline:nn {#1} { - \@@_parse_css_addprops:nV {##1} \l_@@_parse_tmp_tl + \@@_parse_css_addprops:n {##1} } \@@_parse_css:w #3 \q_stop } } - - -\seq_new:N \l_@@_parse_selector_seq -\tl_new:N \l_@@_parse_desc_tl - -\str_const:Nn \c_@@_parse_nthchild_str { :nth-child( } -\prop_new:N \c_@@_parse_replace_prop -\prop_put:Nnn \c_@@_parse_replace_prop { :first-child } { :nth-child(1) } - -\cs_new_protected:Nn \@@_parse_selector:Nn { - \str_set:Nx \l_tmpa_str {#2} % \end{macrocode} % -% Replace some aliases with their meaning: +% Some pseudo-classes generate conditional code for the properties to be +% applied. Check if such code exists, and wrap the parsed property setters +% in a \cs{bool_if:nT}. % % \begin{macrocode} - \prop_map_inline:Nn \c_@@_parse_replace_prop { - \use:x { - \exp_not:n { \tl_replace_all:Nnn \l_tmpa_str } - { \tl_to_str:n { ##1 } } { \tl_to_str:n { ##2 } } +\tl_new:N \l_@@_current_selector_tl +\tl_new:N \l_@@_current_selector_check_tl +\cs_new_protected:Nn \@@_parse_css_addprops:n { + \@@_parse_selector:n {#1} + \tl_set:Nx \l_tmpa_tl { l_@@_property_group_\l_@@_current_selector_tl _tl } + \tl_if_exist:cF { \l_tmpa_tl } { \tl_clear:c { \l_tmpa_tl } } + \tl_if_empty:NTF \l_@@_current_selector_check_tl { + \tl_put_right:cV { \l_tmpa_tl } \l_@@_parse_properties_tl + }{ + \tl_put_right:cx { \l_tmpa_tl } { + \exp_not:N \bool_if:nT { + \exp_not:V \l_@@_current_selector_check_tl + }{ + \exp_not:V \l_@@_parse_properties_tl + } } } +} % \end{macrocode} % -% Replace all spaces by \cs{q_stop} to defeat the space removal feature of -% \cs{seq_set_split:Nnn}. +% Here we parse a selector. These are naturally space-separated, but we first +% need to detect and normalize constructs like ":nth-child(argument)". We +% replace them by ":nth-child{argument}" where the braces will procect any +% space that can legitimately occur within "argument". % % \begin{macrocode} - \tl_replace_all:Nnn \l_tmpa_str {~} {\q_stop} - \exp_args:NNVV - \seq_set_split:Nnn \l_tmpa_seq \c_@@_parse_nthchild_str \l_tmpa_str - \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl +\cs_new_protected:Nn \@@_parse_selector_sanitize:n { + \exp_args:Nx \@@_parse_selector_sanitize_aux:n + { \tl_to_str:n{#1} } +} +\cs_new_protected:Nn \@@_parse_selector_sanitize_aux:n { + \cs_set:Npn \@@_parse_selector_sanitize:w ##1:#1(##2)##3\q_stop + { + \quark_if_nil:nTF {##3} { + ##1 + }{ + ##1:#1{##2}\@@_parse_selector_sanitize:w ##3\q_stop + } + } + \tl_set:Nx \l_@@_current_selector_tl { + \exp_last_unbraced:NV + \@@_parse_selector_sanitize:w + \l_@@_current_selector_tl + :#1()\q_nil\q_stop + } +} % \end{macrocode} % -% And replace them back. +% Now that we can sanitize pseudo-classes, parsing the selector is safe. The +% only construct to protect is currently ":nth-child()". % % \begin{macrocode} - \tl_replace_all:Nnn \l_tmpa_tl {\q_stop} {~} - \seq_clear:N \l_@@_parse_selector_seq - \seq_put_right:NV \l_@@_parse_selector_seq \l_tmpa_tl - \seq_map_inline:Nn \l_tmpa_seq { - \tl_set:Nn \l_tmpa_tl { ##1 } +\seq_new:N \l_@@_current_selector_seq +\seq_new:N \l_@@_pseudoclasses_seq +\tl_new:N \l_@@_current_element_tl +\cs_new_protected:Nn \@@_parse_selector:n { + \tl_set:Nx \l_@@_current_selector_tl { \tl_to_str:n {#1} } % \end{macrocode} % -% And replace them back again. +% The sanitize code is more readable with Expl category colon, so replace it +% now, instead of defining the method with expand or lccode tricks. % % \begin{macrocode} - \tl_replace_all:Nnn \l_tmpa_tl {\q_stop} {~} + \exp_args:NNV \tl_replace_all:Nnn + \l_@@_current_selector_tl \c_colon_str {:} + \@@_parse_selector_sanitize:n {nth-child} + \seq_set_split:NnV \l_@@_current_selector_seq {~} \l_@@_current_selector_tl + \tl_clear:N \l_@@_current_selector_tl + \tl_clear:N \l_@@_current_selector_check_tl + \seq_map_inline:Nn \l_@@_current_selector_seq { % \end{macrocode} % -% Now replace the first closing parenthesis by \cs{q_stop}\cs{prg_do_nothing:} -% to use \cs{q_stop} as a delimiter for \cs{seq_set_split:Nnn} and thus split -% at most once. Note that here the space trimming feature is desired for the -% left part, but not just at the right of the parenthesis, so -% \cs{prg_do_nothing:} will act as a guard and will be removed afterwards. +% Split the current selector item on ":" to get the base element and the +% pseudo-classes. % % \begin{macrocode} - \tl_replace_once:Nnn \l_tmpa_tl { ) } { \q_stop\prg_do_nothing: } - \seq_set_split:NnV \l_tmpa_seq { \q_stop } \l_tmpa_tl - \seq_pop_right:NN \l_tmpa_seq \l_@@_parse_desc_tl - \tl_replace_once:Nnn \l_@@_parse_desc_tl { \prg_do_nothing: } {} - \seq_get_left:NNT \l_tmpa_seq \l_tmpa_tl { - \exp_args:NNV \@@_parse_nth:Nn \l_tmpa_tl \l_tmpa_tl - \tl_put_left:Nn \l_@@_parse_desc_tl { ) } - \tl_put_left:NV \l_@@_parse_desc_tl \l_tmpa_tl + \seq_set_split:Nnn \l_@@_pseudoclasses_seq {:} {##1} + \seq_pop_left:NN \l_@@_pseudoclasses_seq \l_@@_current_element_tl + \tl_put_right:Nn \l_@@_current_selector_tl {~} + \tl_put_right:NV \l_@@_current_selector_tl \l_@@_current_element_tl + \seq_map_inline:Nn \l_@@_pseudoclasses_seq { + \@@_parse_pseudoclass:w ####1{}\q_stop } - \seq_put_right:NV \l_@@_parse_selector_seq \l_@@_parse_desc_tl } - \tl_set:Nx #1 { - \exp_args:NNV \seq_use:Nn - \l_@@_parse_selector_seq \c_@@_parse_nthchild_str +} +% \end{macrocode} +% +% The first argument is the complete pseudo-class up to the opening argument +% brace (if any), and the second argument is the braced content (if any). +% The third argument gobbles any trailing garbage. +% +% \begin{macrocode} +\NewDocumentCommand \@@_parse_pseudoclass:w { lmu{\q_stop} } { + \exp_args:Nx \str_case:nn { #1 } { + {first-child} { \@@_parse_selector_nth:n {1} } + {nth-child} { \@@_parse_selector_nth:n {#2} } } } \str_const:Nn \c_@@_parse_n_str {n} -\seq_new:N \l_@@_used_nth_factors_seq -\cs_new_protected:Nn \@@_parse_nth:Nn { - \str_case:nnF {#2} { +\int_new:N \l_@@_nth_coeff_int +\int_new:N \l_@@_nth_offset_int +\cs_new_protected:Nn \@@_parse_selector_nth:n { +% \end{macrocode} +% +% Put something in the selector token list, for specificity ordering +% of declarations. +% +% \begin{macrocode} + \tl_put_right:Nn \l_@@_current_selector_tl { :nth-child } +% \end{macrocode} +% +% Now parse the nth-child argument: +% +% \begin{macrocode} + \str_case:nnF {#1} { {even} { \str_set:Nn \l_tmpa_str {2n} } {odd} { \str_set:Nn \l_tmpa_str {2n+1} } }{ - \str_set:Nn \l_tmpa_str {#2} + \str_set:Nn \l_tmpa_str {#1} } - \exp_args:NNVV - \seq_set_split:Nnn \l_tmpa_seq \c_@@_parse_n_str \l_tmpa_str + \exp_args:NNV + \seq_set_split:NnV \l_tmpa_seq \c_@@_parse_n_str \l_tmpa_str \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl - \int_set:Nn \l_tmpb_int { 0\l_tmpa_tl } - \seq_get_left:NNTF \l_tmpa_seq \l_tmpa_tl { - \int_set:Nn \l_tmpa_int { 0\l_tmpa_tl } + \tl_if_empty:NTF \l_tmpa_tl { + \int_zero:N \l_@@_nth_offset_int }{ - \int_zero:N \l_tmpa_int + \int_set:Nn \l_@@_nth_offset_int { \l_tmpa_tl } } - \int_compare:nNnTF \l_tmpa_int = { 0 } { - \tl_set:Nx #1 { \int_use:N \l_tmpb_int } + \seq_get_left:NNTF \l_tmpa_seq \l_tmpa_tl { + \tl_if_empty:NTF \l_tmpa_tl { + \int_set:Nn \l_@@_nth_coeff_int {1} + }{ + \exp_args:NV \tl_if_eq:nnTF \l_tmpa_tl {-} { + \int_set:Nn \l_@@_nth_coeff_int {-1} + }{ + \int_set:Nn \l_@@_nth_coeff_int { \l_tmpa_tl } + } + } }{ - \int_set:Nn \l_tmpb_int { \int_mod:nn {\l_tmpb_int} {\l_tmpa_int} } - \tl_set:Nx #1 { - \int_use:N \l_tmpa_int \exp_not:V \c_@@_parse_n_str - + \int_use:N \l_tmpb_int } - \seq_put_right:Nx - \l_@@_used_nth_factors_seq { \int_use:N \l_tmpa_int } + \int_zero:N \l_@@_nth_coeff_int + } +% \end{macrocode} +% +% At last, generate the condition code. +% +% \begin{macrocode} + \exp_args:NV \str_case:nn \l_@@_current_element_tl { + {tr} { \@@_generate_check_nth:n {\g_@@_row_int} } + {td} { \@@_generate_check_nth:n {\g_@@_col_int} } } } -\cs_new_protected:Npn \@@_parse_css_addprops:nV #1 #2 { - \@@_parse_selector:Nn \l_tmpa_tl {#1} - \tl_set:Nx \l_tmpa_tl { l_@@_property_group_\l_tmpa_tl _tl } - \tl_if_exist:cF { \l_tmpa_tl } { \tl_clear:c { \l_tmpa_tl } } - \tl_put_right:cV { \l_tmpa_tl } #2 +\cs_new_protected_nopar:Nn \@@_generate_check_nth:n { + \int_compare:nNnTF \l_@@_nth_coeff_int = { 0 } { + \tl_set:Nx \l_tmpa_tl { + \exp_not:n { \int_compare_p:nNn #1 = } + \exp_not:V \l_@@_nth_offset_int + } + }{ + \tl_set:Nx \l_tmpb_tl { + { + \exp_not:n { #1 - } + \exp_not:V \l_@@_nth_offset_int + }{ + \exp_not:V \l_@@_nth_coeff_int + } + } + \tl_set:Nx \l_tmpa_tl { + \exp_not:N \bool_lazy_and_p:nn { + \exp_not:n { \int_compare_p:nNn 0 = } + { + \exp_not:N \int_mod:nn + \exp_not:V \l_tmpb_tl + } + }{ + \exp_not:n { \int_compare_p:nNn 0 < } + { + \exp_not:N \int_div_truncate:nn + \exp_not:V \l_tmpb_tl + \exp_not:n { + 1 } + } + } + } + } + \tl_if_empty:NTF \l_@@_current_selector_check_tl { + \tl_set_eq:NN \l_@@_current_selector_check_tl \l_tmpa_tl + }{ + \tl_set:Nx \l_@@_current_selector_check_tl { + \exp_not:N \bool_lazy_and_p:nn { + \exp_not:V \l_@@_current_selector_check_tl + }{ + \exp_not:V \l_tmpa_tl + } + } + } } \cs_set_protected:Nn \@@_recall_properties:n { - \tl_if_exist:cT { l_@@_property_group_#1_tl } { - \tl_use:c { l_@@_property_group_#1_tl } + \tl_if_exist:cT { l_@@_property_group_~#1_tl } { + \tl_use:c { l_@@_property_group_~#1_tl } } \clist_map_inline:nn { \@currenvir } { - \tl_if_exist:cT { l_@@_property_group_##1~#1_tl } { - \tl_use:c { l_@@_property_group_##1~#1_tl } + \tl_if_exist:cT { l_@@_property_group_~##1~#1_tl } { + \tl_use:c { l_@@_property_group_~##1~#1_tl } } } } @@ -897,13 +1090,46 @@ \hlx{s[\l_@@_tablepadding_top_dim]} } +\cs_new_protected_nopar:Nn \@@_maybe_startrow: { + \bool_if:NF \g_@@_inrow_bool { + \bool_gset_true:N \g_@@_inrow_bool + \int_gincr:N \g_@@_row_int + \int_gset_eq:NN \g_@@_col_int \c_one_int + \dim_gzero:N \g_@@_ht_dim + \dim_gzero:N \g_@@_dp_dim + } +} + +\cs_new_protected_nopar:Nn \@@_maybe_endrow: { + \bool_if:NT \g_@@_inrow_bool { + \@@_every_cell_end: + \bool_gset_false:N \g_@@_inrow_bool + } +} + +\cs_new_protected_nopar:Nn \@@_every_cell_end: { + \int_gincr:N \g_@@_col_int +} + \cs_set_protected_nopar:Nn \@@_readpreamble:n { \cs_set_eq:NN \tab@readpreamble \@@_orig_tab@readpreamble:n - \tl_put_left:Nn \tab@multicol {\@@_startrow:} - \tl_put_left:Nn \tab@tabtext {\int_gincr:N \g_@@_col_int} +% \end{macrocode} +% +% \cs{tab@multicol} is inserted at the beginning of a each row, and by +% \cs{multicolumn} after its \cs{omit}. We use it to ensure that the row is +% initialized correctly however it starts (normally or with a +% \cs{multicolumn}). +% +% \cs{tab@tabtext} is inserted at the end of every cell but the last one, so +% we should ensure that its effect is applied at the end of the row; +% \cs{@@_maybe_endrow} will take care of that. +% +% \begin{macrocode} + \tl_put_left:Nn \tab@multicol {\@@_maybe_startrow:} + \tl_put_left:Nn \tab@tabtext {\@@_every_cell_end:} \tab@readpreamble{#1} \exp_args:Nx \tab@preamble - { \exp_not:N\@@_startrow: \the\tab@preamble \exp_not:N\@@_endrow: } + { \the\tab@preamble \exp_not:N\@@_maybe_endrow: } } % \end{macrocode} % @@ -976,24 +1202,8 @@ \@@_end_array:n { \@@_orig_endLT: } } -\cs_new_protected_nopar:Nn \@@_startrow: { - \bool_if:NF \g_@@_inrow_bool { - \bool_gset_true:N \g_@@_inrow_bool - \int_gincr:N \g_@@_row_int - \int_gset_eq:NN \g_@@_col_int \c_one_int - \dim_gzero:N \g_@@_ht_dim - \dim_gzero:N \g_@@_dp_dim - } -} - -\cs_new_protected_nopar:Nn \@@_endrow: { - \bool_if:NT \g_@@_inrow_bool { - \bool_gset_false:N \g_@@_inrow_bool - } -} - \cs_new_protected_nopar:Nn \@@_cr:n { - \@@_endrow: + \@@_maybe_endrow: \tl_if_empty:NF \g_@@_borders_tl { \cr \noalign{\nobreak} @@ -1016,10 +1226,12 @@ \cs_set_eq:NN \@@_orig_multicolumn:w \multicolumn \cs_set:Npn \multicolumn#1#2#3 { - \@@_orig_multicolumn:w {#1}{#2}{ - #3 - \int_gadd:Nn \g_@@_col_int {#1} + \@@_orig_multicolumn:w {#1}{#2}{#3} + \int_gadd:Nn \g_@@_col_int {#1} + \tl_gput_right:Nx \g_@@_borders_tl { + \prg_replicate:nn {#1 - 1} {\span\omit} } + \ignorespaces } } @@ -1110,20 +1322,6 @@ \colpop -% \end{macrocode} -% -% Handle various \verb|:nth-child()| forms. -% -% \begin{macrocode} -\cs_new_protected_nopar:Nn \@@_seq_nthchild:Nn { - \seq_clear:N #1 - \seq_map_inline:Nn \l_@@_used_nth_factors_seq { - \seq_put_right:Nx #1 { - ##1 n + \int_eval:n{\int_mod:nn{#2}{##1}} - } - } - \seq_put_right:Nx #1 { \int_eval:n{#2} } -} \cs_new_protected_nopar:Nn \@@_begincell:n { \@@_begin_raw_cell:n { @@ -1162,25 +1360,13 @@ \global\@minipagefalse \everypar{} } - \@@_seq_nthchild:Nn \l_tmpa_seq { \g_@@_row_int } - \@@_seq_nthchild:Nn \l_tmpb_seq { \g_@@_col_int } \@@_recall_properties:n {td~p} - \seq_map_inline:Nn \l_tmpa_seq { - \@@_recall_properties:n {tr:nth-child(##1)~p} - } - \seq_map_inline:Nn \l_tmpb_seq { - \@@_recall_properties:n {td:nth-child(##1)~p} - } \@@_recall_properties:n {tr~td~p} - \seq_map_inline:Nn \l_tmpa_seq { - \@@_recall_properties:n {tr:nth-child(##1)~td~p} - } - \seq_map_inline:Nn \l_tmpa_seq { - \seq_map_inline:Nn \l_tmpb_seq { - \@@_recall_properties:n {tr:nth-child(##1)~ - td:nth-child(####1)~p} - } - } + \@@_recall_properties:n {tr:nth-child~p} + \@@_recall_properties:n {td:nth-child~p} + \@@_recall_properties:n {tr:nth-child~td~p} + \@@_recall_properties:n {tr~td:nth-child~p} + \@@_recall_properties:n {tr:nth-child~td:nth-child~p} } } \cs_new_protected_nopar:Nn \@@_end_par_cell:n { @@ -1195,26 +1381,14 @@ \cs_new_protected_nopar:Nn \@@_begin_raw_cell:n { \group_begin: - \@@_seq_nthchild:Nn \l_tmpa_seq { \g_@@_row_int } - \@@_seq_nthchild:Nn \l_tmpb_seq { \g_@@_col_int } - \seq_map_inline:Nn \l_tmpa_seq { - \@@_recall_properties:n {tr:nth-child(##1)} - } + \@@_recall_properties:n {tr:nth-child} \@@_update_colors: \@@_recall_properties:n {td} \@@_recall_properties:n {tr~td} - \seq_map_inline:Nn \l_tmpb_seq { - \@@_recall_properties:n {td:nth-child(##1)} - } - \seq_map_inline:Nn \l_tmpa_seq { - \@@_recall_properties:n {tr:nth-child(##1)~td} - } - \seq_map_inline:Nn \l_tmpa_seq { - \seq_map_inline:Nn \l_tmpb_seq { - \@@_recall_properties:n {tr:nth-child(##1)~ - td:nth-child(####1)} - } - } + \@@_recall_properties:n {td:nth-child} + \@@_recall_properties:n {tr:nth-child~td} + \@@_recall_properties:n {tr~td:nth-child} + \@@_recall_properties:n {tr:nth-child~td:nth-child} \@@_update_colors: % Additional init code #1 diff --git a/macros/latex/contrib/cellprops/cellprops.ins b/macros/latex/contrib/cellprops/cellprops.ins index 195394a7e7..3619d87296 100644 --- a/macros/latex/contrib/cellprops/cellprops.ins +++ b/macros/latex/contrib/cellprops/cellprops.ins @@ -1,6 +1,6 @@ \iffalse meta-comment -File cellprops.ins (C) Copyright 2016-2019 RIVAUD Julien +File cellprops.ins (C) Copyright 2016-2020 RIVAUD Julien It may be distributed and/or modified under the conditions of the General Public License (GPL), either version 3 of this diff --git a/macros/latex/contrib/cellprops/cellprops.pdf b/macros/latex/contrib/cellprops/cellprops.pdf index 18aba7b5e7..f315384a17 100644 Binary files a/macros/latex/contrib/cellprops/cellprops.pdf and b/macros/latex/contrib/cellprops/cellprops.pdf differ diff --git a/macros/latex/contrib/nicematrix/README.md b/macros/latex/contrib/nicematrix/README.md index f3183a5cfc..d55ad61352 100644 --- a/macros/latex/contrib/nicematrix/README.md +++ b/macros/latex/contrib/nicematrix/README.md @@ -10,9 +10,7 @@ The LaTeX extension `nicematrix` is distributed under the LPPL 1.3 license. ## Presentation The LaTeX package `nicematrix` provides new environments similar to the classical environments -`{array}` and `{matrix}` but with some additional features. Among these features are the -possibilities to fix the width of the columns, to draw continuous ellipsis dots between the cells -of the array and to add exterior rows and columns (so called *border matrices*). +`{tabular}`, `{array}` and `{matrix}` but with some additional features. The extension `nicematrix` creates PGF/Tikz nodes corresponding to the cells of the array and uses them to provide new functionalities. ## Installation diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf index 6acb7b9f28..c5d481ad72 100644 Binary files a/macros/latex/contrib/nicematrix/nicematrix-french.pdf and b/macros/latex/contrib/nicematrix/nicematrix-french.pdf differ diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx index 7e22066769..e957be5dc9 100644 --- a/macros/latex/contrib/nicematrix/nicematrix.dtx +++ b/macros/latex/contrib/nicematrix/nicematrix.dtx @@ -15,8 +15,8 @@ % % \fi % \iffalse -\def\myfileversion{4.1} -\def\myfiledate{2020/05/27} +\def\myfileversion{4.2} +\def\myfiledate{2020/06/07} % % %<*batchfile> @@ -825,7 +825,7 @@ version 2005/12/01 or later. % h & i & j \\ \hline % \end{NiceTabular} % \end{BVerbatim} -% \begin{NiceTabular}{|C|C|C|}[hvlines, code-before = +% \begin{NiceTabular}{|C|C|C|}[code-before = % \cellcolor{red!15}{3-1,2-2,1-3}] % \hline % a & b & c \\ \hline @@ -851,7 +851,7 @@ version 2005/12/01 or later. % h & i & j \\ \hline % \end{NiceTabular} % \end{BVerbatim} -% \begin{NiceTabular}{|C|C|C|}[hvlines, code-before = +% \begin{NiceTabular}{|C|C|C|}[code-before = % \rectanglecolor{blue!15}{2-2}{3-3}] % \hline % a & b & c \\ \hline @@ -2346,7 +2346,7 @@ version 2005/12/01 or later. % % \bigskip % \begin{minipage}[c]{7.6cm} -% Here is a array composed with the following code: +% Here is an array composed with the following code: % % \medskip % \begin{BVerbatim} @@ -3424,23 +3424,6 @@ version 2005/12/01 or later. % \end{macrocode} % % -% \medskip -% The version of 2020/02/08 of \pkg{expl3} has replaced |\l_keys_key_tl| by -% |\l_keys_key_str|. We have immediately changed in this file. Now, you test the -% existence of |\l_keys_key_str| in order to detect whether the version of LaTeX -% used by the final user is up to date. -% \begin{macrocode} -\msg_new:nnn { nicematrix } { expl3~too~old } - { - Your~version~of~LaTeX~(especially~expl3)~is~too~old.~ - You~can~go~on~but~you~will~probably~have~other~errors~ - if~you~use~the~functionalities~of~nicematrix. - } -\cs_if_exist:NF \l_keys_key_str - { \msg_error:nn { nicematrix } { expl3~too~old } } -% \end{macrocode} -% -% % \bigskip % The command for the treatment of the options of |\usepackage| is at the end of % this package for technical reasons. @@ -3571,8 +3554,7 @@ version 2005/12/01 or later. % \begin{macrocode} \cs_set_protected:Npn \pgfutil@check@rerun ##1 ##2 { - \str_set:Nx \l_tmpa_str { \tl_range:nnn { ##1 } 1 3 } - \str_if_eq:VnF \l_tmpa_str { nm- } + \str_if_eq:eeF { nm- } { \tl_range:nnn { ##1 } 1 3 } { \@@_old_pgfutil@check@rerun { ##1 } { ##2 } } } } @@ -3646,9 +3628,9 @@ version 2005/12/01 or later. \cs_set:Npn \@@_cline % \end{macrocode} % We have to act in a fully expandable way since there may be |\noalign| (in the -% |\multispan|) to detect. That's why we use |\exp_arg:Ne| and not |\exp_arg:Nx|. +% |\multispan|) to detect. That's why we use |\@@_cline_i:en|. % \begin{macrocode} - { \exp_args:Ne \@@_cline_i:nn \l_@@_first_col_int } + { \@@_cline_i:en \l_@@_first_col_int } % \end{macrocode} % The command |\cline_i:nn| has two arguments. The first is the number of the % current column (it \emph{must} be used in that column). The second is a @@ -3670,11 +3652,10 @@ version 2005/12/01 or later. % several |\cline|). % \begin{macrocode} \peek_meaning_remove_ignore_spaces:NTF \cline - { & \exp_args:Ne \@@_cline_i:nn { \@@_succ:n { #3 } } } + { & \@@_cline_i:en { \@@_succ:n { #3 } } } { \everycr { } \cr } } - - +\cs_generate_variant:Nn \@@_cline_i:nn { e n } % \end{macrocode} % % \bigskip @@ -5561,6 +5542,12 @@ version 2005/12/01 or later. % \begin{macrocode} \NewDocumentEnvironment { NiceArrayWithDelims } { m m O { } m ! O { } } { +% \end{macrocode} +% The aim of the following |\bgroup| (the corresponding |\egroup| is, of course, +% at the end of the environment) is to be able to put an exposant to a matrix in +% a mathematical formula. +% \begin{macrocode} + \bgroup \tl_set:Nn \l_@@_left_delim_tl { #1 } \tl_set:Nn \l_@@_right_delim_tl { #2 } \bool_gset_false:N \g_@@_row_of_col_done_bool @@ -6111,7 +6098,7 @@ version 2005/12/01 or later. % \begin{macrocode} \bool_if:NTF \l_@@_max_delimiter_width_bool { \@@_put_box_in_flow_bis:nn { #1 } { #2 } } - \@@_put_box_in_flow: + \@@_put_box_in_flow: } % \end{macrocode} % @@ -6125,6 +6112,7 @@ version 2005/12/01 or later. \skip_horizontal:N \arraycolsep } \@@_after_array: + \egroup } % \end{macrocode} % This is the end of the environment |{NiceArrayWithDelims}|. @@ -6142,7 +6130,7 @@ version 2005/12/01 or later. \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + \l_tmpa_dim } \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + \l_tmpb_dim } \str_if_eq:VnTF \l_@@_baseline_str { c } - { \box_use_drop:N \l_tmpa_box } + { \box_use_drop:N \l_tmpa_box } \@@_put_box_in_flow_i: } % \end{macrocode} @@ -9002,7 +8990,7 @@ version 2005/12/01 or later. % \end{macrocode} % % The command |\CT@arc@| is a command of \pkg{colortbl} which sets the color of -% the rules in the array. The package \pkg{nicematrix} uses it even if +% the rules in the array. The package \pkg{nicematrix} uses it even when % \pkg{colortbl} is not loaded. % \begin{macrocode} \CT@arc@ @@ -9010,48 +8998,23 @@ version 2005/12/01 or later. \pgfrememberpicturepositiononpagetrue \pgf@relevantforpicturesizefalse \pgfsetlinewidth \arrayrulewidth -% \end{macrocode} -% First, we compute in |\l_tmpa_dim| the height of the rules we have to draw. -% \begin{macrocode} + \pgfsetrectcap \@@_qpoint:n { row - 1 } \dim_set_eq:NN \l_tmpa_dim \pgf@y - \@@_qpoint:n { row - \@@_succ:n \c@iRow } - \dim_sub:Nn \l_tmpa_dim \pgf@y -% \end{macrocode} -% We translate vertically to take into account the potential ``last row''. -% \begin{macrocode} - \dim_zero:N \l_tmpb_dim - \int_compare:nNnT \l_@@_last_row_int > { -1 } - { - \dim_set_eq:NN \l_tmpb_dim \g_@@_dp_last_row_dim - \dim_add:Nn \l_tmpb_dim \g_@@_ht_last_row_dim -% \end{macrocode} -% We adjust the value of |\l_tmpa_dim| by the width of the horizontal rule just -% before the ``last row''. -% \begin{macrocode} - \@@_qpoint:n { row - \@@_succ:n \c@iRow } - \dim_add:Nn \l_tmpa_dim \pgf@y - \@@_qpoint:n { row - \@@_succ:n \g_@@_row_total_int } - \dim_sub:Nn \l_tmpa_dim \pgf@y - \dim_sub:Nn \l_tmpa_dim \l_tmpb_dim - } - \dim_add:Nn \l_tmpa_dim \arrayrulewidth + \@@_qpoint:n { row - \@@_succ:n \c@iRow } + \dim_set_eq:NN \l_tmpb_dim \pgf@y % \end{macrocode} % -% % Now, we can draw the vertical rules with a loop. % \begin{macrocode} \int_step_inline:nnn { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@jCol } \c@jCol } { - \pgfpathmoveto { \@@_qpoint:n { col - ##1 } } - \pgfpathlineto - { - \pgfpointadd - { \@@_qpoint:n { col - ##1 } } - { \pgfpoint \c_zero_dim { \l_tmpb_dim + \l_tmpa_dim } } - } + \@@_qpoint:n { col - ##1 } + \dim_set_eq:NN \l_tmpc_dim \pgf@x + \pgfpathmoveto { \pgfpoint \l_tmpc_dim \l_tmpa_dim } + \pgfpathlineto { \pgfpoint \l_tmpc_dim \l_tmpb_dim } } \pgfusepathqstroke \endpgfpicture @@ -9059,7 +9022,7 @@ version 2005/12/01 or later. } % \end{macrocode} % -%% +% % \subsection*{The key hvlines} % % @@ -9149,7 +9112,7 @@ version 2005/12/01 or later. } % \end{macrocode} % -% First, the horizontal rules in the interior of the array. +% Now, the horizontal rules in the interior of the array. % \begin{macrocode} \int_step_variable:nnNn 2 \c@iRow \l_tmpa_tl { @@ -9996,7 +9959,7 @@ version 2005/12/01 or later. % \begin{macrocode} \cs_new_protected:Npn \@@_draw_blocks: { \seq_map_inline:Nn \g_@@_blocks_seq { \@@_Block_iii:nnnnnn ##1 } } -% \end{macrocode} +% \end{macrocode} % % \begin{macrocode} \cs_new_protected:Npn \@@_Block_iii:nnnnnn #1 #2 #3 #4 #5 #6 @@ -10320,8 +10283,7 @@ version 2005/12/01 or later. % If this is really the end of the current environment (of \pkg{nicematrix}), we % put back the command |\end| and its argument in the TeX flow. % \begin{macrocode} - \str_set:NV \l_tmpa_str \@currenvir - \bool_if:NTF { \str_if_eq_p:Vn \l_tmpa_str { #1 } } + \str_if_eq:eeTF \@currenvir { #1 } { \end { #1 } } % \end{macrocode} % It this is not the |\end| we are looking for, we put those tokens in @@ -10520,7 +10482,7 @@ version 2005/12/01 or later. \@@_msg_new:nn { Unknown~option~for~xdots } { As~for~now~there~is~only~three~options~available~here:~'color',~'line-style'~ - and~'shorten'~(and~you~try~to~use~'\l_keys_key_str').~If~you~go~on,~ + and~'shorten'~(and~you~try~to~use~'\l_keys_key_tl').~If~you~go~on,~ this~option~will~be~ignored. } % \end{macrocode} @@ -10641,7 +10603,7 @@ version 2005/12/01 or later. % \begin{macrocode} \@@_msg_new:nn { Bad~value~for~letter~for~dotted~lines } { - The~value~of~key~'\tl_use:N\l_keys_key_str'~must~be~of~length~1.\\ + The~value~of~key~'\tl_use:N\l_keys_key_tl'~must~be~of~length~1.\\ If~you~go~on,~it~will~be~ignored. } % \end{macrocode} @@ -10650,7 +10612,7 @@ version 2005/12/01 or later. % \begin{macrocode} \@@_msg_new:nnn { Unknown~key~for~NiceMatrixOptions } { - The~key~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~command~ + The~key~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~command~ \token_to_str:N \NiceMatrixOptions. \\ If~you~go~on,~it~will~be~ignored. \\ For~a~list~of~the~*principal*~available~keys,~type~H~. @@ -10693,7 +10655,7 @@ version 2005/12/01 or later. % \begin{macrocode} \@@_msg_new:nnn { Unknown~option~for~NiceArray } { - The~option~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~environment~ + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~ \{NiceArray\}. \\ If~you~go~on,~it~will~be~ignored. \\ For~a~list~of~the~*principal*~available~options,~type~H~. @@ -10746,7 +10708,7 @@ version 2005/12/01 or later. % \begin{macrocode} \@@_msg_new:nnn { Unknown~option~for~NiceMatrix } { - The~option~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~ + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~ \@@_full_name_env:. \\ If~you~go~on,~it~will~be~ignored. \\ For~a~list~of~the~*principal*~available~options,~type~H~. @@ -10798,7 +10760,7 @@ version 2005/12/01 or later. % \begin{macrocode} \@@_msg_new:nnn { Unknown~option~for~NiceTabular } { - The~option~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~environment~ + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~ \{NiceTabular\}. \\ If~you~go~on,~it~will~be~ignored. \\ For~a~list~of~the~*principal*~available~options,~type~H~. @@ -11184,6 +11146,11 @@ version 2005/12/01 or later. % The key |hvline| don't draw rules in the blocks (commands |\Block|) and in the % virtual blocks corresponding to the dotted lines. % +% \subsection*{Changes between versions 4.1 and 4.2} +% +% It's now possible to write |\begin{pNiceMatrix}a&b\\c&d\end{pNiceMatrix}^2| +% with the expected result. +% % \PrintIndex % % \tableofcontents diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf index 0004ec61cd..184e8e4a59 100644 Binary files a/macros/latex/contrib/nicematrix/nicematrix.pdf and b/macros/latex/contrib/nicematrix/nicematrix.pdf differ -- cgit v1.2.3