summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-10-02 03:01:29 +0000
committerNorbert Preining <norbert@preining.info>2019-10-02 03:01:29 +0000
commitd94b7a8c132734a1bc4046d54a75c7882c4c2619 (patch)
tree7326afd537da7739f5e5127da75d0766835e3c3e /macros/latex
parent31d84cec65917cfc6ef446f1bf6031cff7c6dc7b (diff)
CTAN sync 201910020301
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/embrac/README4
-rw-r--r--macros/latex/contrib/embrac/embrac.sty181
-rw-r--r--macros/latex/contrib/embrac/embrac_en.pdfbin462479 -> 456745 bytes
-rw-r--r--macros/latex/contrib/embrac/embrac_en.tex42
-rw-r--r--macros/latex/contrib/embrac/embrac_kerning_test.tex8
-rw-r--r--macros/latex/contrib/gindex/README.md30
-rw-r--r--macros/latex/contrib/gindex/gindex.ist42
-rw-r--r--macros/latex/contrib/gindex/gindex.pdfbin0 -> 26534 bytes
-rw-r--r--macros/latex/contrib/gindex/gindex.sty99
-rw-r--r--macros/latex/contrib/gindex/gindex.tex184
-rw-r--r--macros/latex/contrib/nicematrix/README.md2
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin316720 -> 313809 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex133
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx958
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin671681 -> 654887 bytes
-rw-r--r--macros/latex/contrib/practicalreports/practicalreports.pdfbin182466 -> 183898 bytes
-rw-r--r--macros/latex/contrib/practicalreports/practicalreports.sty11
-rw-r--r--macros/latex/contrib/practicalreports/practicalreports.tex13
-rw-r--r--macros/latex/contrib/scratch3/README4
-rw-r--r--macros/latex/contrib/scratch3/scratch3-fr.pdfbin501093 -> 507928 bytes
-rw-r--r--macros/latex/contrib/scratch3/scratch3-fr.tex24
-rw-r--r--macros/latex/contrib/scratch3/scratch3.sty388
22 files changed, 1371 insertions, 752 deletions
diff --git a/macros/latex/contrib/embrac/README b/macros/latex/contrib/embrac/README
index 477c644cbe..e07d2f2340 100644
--- a/macros/latex/contrib/embrac/README
+++ b/macros/latex/contrib/embrac/README
@@ -3,13 +3,13 @@ the EMBRAC package
Upright Brackets in Emphasized Text
-2017/07/04 v0.7
+2019/10/01 v0.8
--------------------------------------------------------------------------
Clemens Niederberger
Web: https://bitbucket.org/cgnieder/embrac/
E-Mail: contact@mychemistry.eu
--------------------------------------------------------------------------
-Copyright 2012--2017 Clemens Niederberger
+Copyright 2012--2019 Clemens Niederberger
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/embrac/embrac.sty b/macros/latex/contrib/embrac/embrac.sty
index 2a5d12675b..279291a553 100644
--- a/macros/latex/contrib/embrac/embrac.sty
+++ b/macros/latex/contrib/embrac/embrac.sty
@@ -8,7 +8,7 @@
% Web: https://bitbucket.org/cgnieder/embrac/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
-% Copyright 2012--2017 Clemens Niederberger
+% Copyright 2012--2019 Clemens Niederberger
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -34,14 +34,17 @@
\RequirePackage { expl3 , xparse , l3keys2e }
\ProvidesExplPackage
{embrac}
- {2017/07/04}
- {0.7}
+ {2019/10/01}
+ {0.8}
{Upright Brackets in Emphasized Text}
% --------------------------------------------------------------------------
\bool_new:N \l__embrac_treat_biblatex_bool
-\tl_new:N \l__embrac_tmpa_tl
-\tl_new:N \l__embrac_treat_biblatex_tl
+
+\tl_new:N \l__embrac_tmpa_tl
+\tl_new:N \l__embrac_treat_biblatex_tl
+
+\int_new:N \l__embrac_penalty_int
\keys_define:nn {embrac}
{
@@ -85,56 +88,102 @@
}
}
-\cs_new:Npn \embrac_nobreak:
- { \tex_penalty:D \c_ten_thousand }
+\cs_new_protected:Npn \embrac_nobreak:
+ { \embrac_allow_break:n {10000} }
+
+\cs_new_protected:Npn \embrac_allow_break:n #1
+ { \tex_penalty:D #1 \scan_stop: }
+
+\cs_new_protected:Npn \embrac_save_penalty:
+ { \int_set:Nn \l__embrac_penalty_int { \lastpenalty } }
% --------------------------------------------------------------------------
% THE MAIN PART:
% storage of the tokens to be replaced:
-\prop_new:N \l__embrac_emph_obrackets_symp_prop
-\prop_new:N \l__embrac_emph_obrackets_prop
-\prop_new:N \l__embrac_emph_obrackets_before_prop
-\prop_new:N \l__embrac_emph_cbrackets_symp_prop
-\prop_new:N \l__embrac_emph_cbrackets_prop
-\prop_new:N \l__embrac_emph_cbrackets_after_prop
-
-\cs_new_protected:Npn \__embrac_replace:Nnnn #1#2#3#4
- {
- \tl_replace_all:Nnn #1 {#3}
+\prop_new:N \l__embrac_emph_obrackets_symbol_prop
+\prop_new:N \l__embrac_emph_obrackets_inner_prop
+\prop_new:N \l__embrac_emph_obrackets_outer_prop
+\prop_new:N \l__embrac_emph_cbrackets_symbol_prop
+\prop_new:N \l__embrac_emph_cbrackets_inner_prop
+\prop_new:N \l__embrac_emph_cbrackets_outer_prop
+
+\bool_new:N \l__embrac_opening_bool
+
+% #1: tl macro
+% #2: code before
+% #3: kerning before
+% #4: symbol
+% #5: kerning after
+% #6: code after
+\cs_new_protected:Npn \__embrac_replace:Nnnnnn #1#2#3#4#5#6
+ {
+ \tl_replace_all:Nnn #1 {#4}
{
\mode_if_math:TF
- {#3}
+ {#4}
{
- \embrac_kern:n {#2}
+ #2
+ \embrac_kern:n {#3}
\embrac_nobreak:
- \embrac_braces_format:n {#3}
- \embrac_nobreak:
- \embrac_kern:n {#4}
+ \embrac_braces_format:n {#4}
\embrac_nobreak:
+ \embrac_kern:n {#5}
+ #6
}
}
}
-\cs_generate_variant:Nn \__embrac_replace:Nnnn {Nxx,Nnxx}
+\cs_generate_variant:Nn \__embrac_replace:Nnnnnn {Nnxx,Nnnxx}
% do the replacing:
+% #1: tl macro
\cs_new_protected:Npn \embrac_replace_brackets:N #1
{
- \prop_map_inline:Nn \l__embrac_emph_obrackets_prop
+ \prop_map_inline:Nn \l__embrac_emph_obrackets_inner_prop
{
- \__embrac_replace:Nxxn #1
- { \prop_item:Nn \l__embrac_emph_obrackets_before_prop {##1} }
- { \prop_item:Nn \l__embrac_emph_obrackets_symp_prop {##1} }
+ \__embrac_replace:Nnxxnn #1
+ { \embrac_allow_break:n { \lastpenalty } }
+ { \prop_item:Nn \l__embrac_emph_obrackets_outer_prop {##1} }
+ { \prop_item:Nn \l__embrac_emph_obrackets_symbol_prop {##1} }
{##2}
+ { \embrac_nobreak: }
}
- \prop_map_inline:Nn \l__embrac_emph_cbrackets_prop
+ \prop_map_inline:Nn \l__embrac_emph_cbrackets_inner_prop
{
- \__embrac_replace:Nnxx #1
+ \__embrac_replace:Nnnxxn #1
+ { \embrac_save_penalty: \embrac_nobreak: }
{##2}
- { \prop_item:Nn \l__embrac_emph_cbrackets_symp_prop {##1} }
- { \prop_item:Nn \l__embrac_emph_cbrackets_after_prop {##1} }
+ { \prop_item:Nn \l__embrac_emph_cbrackets_symbol_prop {##1} }
+ { \prop_item:Nn \l__embrac_emph_cbrackets_outer_prop {##1} }
+ { \embrac_allow_break:n { \l__embrac_penalty_int } }
}
}
+\cs_new_protected:Npn \embrac_enparen:nnn #1#2#3
+ {
+ \group_begin:
+ \embrac_allow_break:n { \lastpenalty }
+ \embrac_kern:n
+ { \prop_item:Nn \l__embrac_emph_obrackets_outer_prop {#1} }
+ \embrac_nobreak:
+ \embrac_braces_format:n
+ { \prop_item:Nn \l__embrac_emph_obrackets_symbol_prop {#1} }
+ \embrac_nobreak:
+ \embrac_kern:n
+ { \prop_item:Nn \l__embrac_emph_obrackets_inner_prop {#1} }
+ #3
+ \embrac_save_penalty: \embrac_nobreak:
+ \embrac_kern:n
+ { \prop_item:Nn \l__embrac_emph_cbrackets_inner_prop {#2} }
+ \embrac_nobreak:
+ \embrac_braces_format:n
+ { \prop_item:Nn \l__embrac_emph_cbrackets_symbol_prop {#2} }
+ \embrac_nobreak:
+ \embrac_kern:n
+ { \prop_item:Nn \l__embrac_emph_cbrackets_outer_prop {#2} }
+ \embrac_allow_break:n { \l__embrac_penalty_int }
+ \group_end:
+ }
+
% --------------------------------------------------------------------------
% biblatex compatibility:
\cs_new_protected:Npn \embrac_treat_bibparens:
@@ -165,6 +214,7 @@
% redefine \emph and friends:
\seq_new:N \l__embrac_changed_macros_seq
+% #1: name of macro to be treated
\cs_new_protected:Npn \embrac_new_replacement_macro:n #1
{
\seq_put_right:Nn \l__embrac_changed_macros_seq {#1}
@@ -230,24 +280,24 @@
% internal add commands:
\cs_new_protected:Npn \embrac_add_op_to_emph:nnn #1#2#3
{
- \prop_put:Nnn \l__embrac_emph_obrackets_symp_prop {#1} {#1}
+ \prop_put:Nnn \l__embrac_emph_obrackets_symbol_prop {#1} {#1}
\embrac_empty_or_no_value:nTF {#2}
- { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_prop {#1} {0pt} }
- { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_prop {#1} {#2} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_inner_prop {#1} {0pt} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_inner_prop {#1} {#2} }
\embrac_empty_or_no_value:nTF {#3}
- { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_before_prop {#1} {0pt} }
- { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_before_prop {#1} {#3} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_outer_prop {#1} {0pt} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_obrackets_outer_prop {#1} {#3} }
}
\cs_new_protected:Npn \embrac_add_cl_to_emph:nnn #1#2#3
{
- \prop_put:Nnn \l__embrac_emph_cbrackets_symp_prop {#1} {#1}
+ \prop_put:Nnn \l__embrac_emph_cbrackets_symbol_prop {#1} {#1}
\embrac_empty_or_no_value:nTF {#2}
- { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_prop {#1} {0pt} }
- { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_prop {#1} {#2} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_inner_prop {#1} {0pt} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_inner_prop {#1} {#2} }
\embrac_empty_or_no_value:nTF {#3}
- { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_after_prop {#1} {0pt} }
- { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_after_prop {#1} {#3} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_outer_prop {#1} {0pt} }
+ { \prop_put_if_new:Nnn \l__embrac_emph_cbrackets_outer_prop {#1} {#3} }
}
\cs_new_protected:Npn \embrac_add_to_emph:nnnnnn #1#2#3#4#5#6
@@ -259,14 +309,14 @@
% internal delete commands:
\cs_new_protected:Npn \embrac_remove_op_from_emph:n #1
{
- \prop_remove:Nn \l__embrac_emph_obrackets_prop {#1}
- \prop_remove:Nn \l__embrac_emph_obrackets_before_prop {#1}
+ \prop_remove:Nn \l__embrac_emph_obrackets_inner_prop {#1}
+ \prop_remove:Nn \l__embrac_emph_obrackets_outer_prop {#1}
}
\cs_new_protected:Npn \embrac_remove_cl_from_emph:n #1
{
- \prop_remove:Nn \l__embrac_emph_cbrackets_prop {#1}
- \prop_remove:Nn \l__embrac_emph_cbrackets_after_prop {#1}
+ \prop_remove:Nn \l__embrac_emph_cbrackets_inner_prop {#1}
+ \prop_remove:Nn \l__embrac_emph_cbrackets_outer_prop {#1}
}
\cs_new_protected:Npn \embrac_remove_from_emph:nn #1#2
@@ -279,21 +329,21 @@
\cs_new_protected:Npn \embrac_renew_op_emph:nnn #1#2#3
{
\embrac_empty_or_no_value:nTF {#2}
- { \prop_put:Nnn \l__embrac_emph_obrackets_prop {#1} {0pt} }
- { \prop_put:Nnn \l__embrac_emph_obrackets_prop {#1} {#2} }
+ { \prop_put:Nnn \l__embrac_emph_obrackets_inner_prop {#1} {0pt} }
+ { \prop_put:Nnn \l__embrac_emph_obrackets_inner_prop {#1} {#2} }
\embrac_empty_or_no_value:nTF {#3}
- { \prop_put:Nnn \l__embrac_emph_obrackets_before_prop {#1} {0pt} }
- { \prop_put:Nnn \l__embrac_emph_obrackets_before_prop {#1} {#3} }
+ { \prop_put:Nnn \l__embrac_emph_obrackets_outer_prop {#1} {0pt} }
+ { \prop_put:Nnn \l__embrac_emph_obrackets_outer_prop {#1} {#3} }
}
\cs_new_protected:Npn \embrac_renew_cl_emph:nnn #1#2#3
{
\embrac_empty_or_no_value:nTF {#2}
- { \prop_put:Nnn \l__embrac_emph_cbrackets_prop {#1} {0pt} }
- { \prop_put:Nnn \l__embrac_emph_cbrackets_prop {#1} {#2} }
+ { \prop_put:Nnn \l__embrac_emph_cbrackets_inner_prop {#1} {0pt} }
+ { \prop_put:Nnn \l__embrac_emph_cbrackets_inner_prop {#1} {#2} }
\embrac_empty_or_no_value:nTF {#3}
- { \prop_put:Nnn \l__embrac_emph_cbrackets_after_prop {#1} {0pt} }
- { \prop_put:Nnn \l__embrac_emph_cbrackets_after_prop {#1} {#3} }
+ { \prop_put:Nnn \l__embrac_emph_cbrackets_outer_prop {#1} {0pt} }
+ { \prop_put:Nnn \l__embrac_emph_cbrackets_outer_prop {#1} {#3} }
}
\cs_new_protected:Npn \embrac_renew_emph:nnnnnn #1#2#3#4#5#6
@@ -305,23 +355,23 @@
% internal change commands:
\cs_new_protected:Npn \embrac_change_op_emph:nnn #1#2#3
{
- \prop_if_in:NnT \l__embrac_emph_obrackets_prop {#1}
+ \prop_if_in:NnT \l__embrac_emph_obrackets_inner_prop {#1}
{
\embrac_empty_or_no_value:nF {#2}
- { \prop_put:Nnn \l__embrac_emph_obrackets_prop {#1} {#2} }
+ { \prop_put:Nnn \l__embrac_emph_obrackets_inner_prop {#1} {#2} }
\embrac_empty_or_no_value:nF {#3}
- { \prop_put:Nnn \l__embrac_emph_obrackets_before_prop {#1} {#3} }
+ { \prop_put:Nnn \l__embrac_emph_obrackets_outer_prop {#1} {#3} }
}
}
\cs_new_protected:Npn \embrac_change_cl_emph:nnn #1#2#3
{
- \prop_if_in:NnT \l__embrac_emph_cbrackets_prop {#1}
+ \prop_if_in:NnT \l__embrac_emph_cbrackets_inner_prop {#1}
{
\embrac_empty_or_no_value:nF {#2}
- { \prop_put:Nnn \l__embrac_emph_cbrackets_prop {#1} {#2} }
+ { \prop_put:Nnn \l__embrac_emph_cbrackets_inner_prop {#1} {#2} }
\embrac_empty_or_no_value:nF {#3}
- { \prop_put:Nnn \l__embrac_emph_cbrackets_after_prop {#1} {#3} }
+ { \prop_put:Nnn \l__embrac_emph_cbrackets_outer_prop {#1} {#3} }
}
}
@@ -423,6 +473,15 @@
\ignorespaces
}
+\NewDocumentCommand \embparen {+m}
+ { \embrac_enparen:nnn {(} {)} {#1} }
+
+\NewDocumentCommand \embbracket {+m}
+ { \embrac_enparen:nnn {[} {]} {#1} }
+
+\NewDocumentCommand \emb {mm+m}
+ { \embrac_enparen:nnn {#1} {#2} {#3} }
+
% --------------------------------------------------------------------------
% add some defaults and finalize package:
\AddEmph{[}{]}[.04em,-.12em]
@@ -432,7 +491,7 @@
\AtBeginDocument { \embrac_treat_bibemph: }
-\tex_endinput:D
+\file_input_stop:
% --------------------------------------------------------------------------
% HISTORY
@@ -457,3 +516,5 @@
2016/01/07 - v0.6d - \prop_get:Nn => \prop_item:Nn
2017/07/04 - v0.7 - implement issue #8 (now treatment of symbols with catcode
other than 12 is possible)
+2019/10/01 - v0.8 - fix issue #9
+ - new macros \embparen, \embbracket and \emb
diff --git a/macros/latex/contrib/embrac/embrac_en.pdf b/macros/latex/contrib/embrac/embrac_en.pdf
index 457f76889f..41adfcec3b 100644
--- a/macros/latex/contrib/embrac/embrac_en.pdf
+++ b/macros/latex/contrib/embrac/embrac_en.pdf
Binary files differ
diff --git a/macros/latex/contrib/embrac/embrac_en.tex b/macros/latex/contrib/embrac/embrac_en.tex
index ec1bfb379e..635475e443 100644
--- a/macros/latex/contrib/embrac/embrac_en.tex
+++ b/macros/latex/contrib/embrac/embrac_en.tex
@@ -12,7 +12,7 @@
% Web: https://bitbucket.org/cgnieder/embrac/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
-% Copyright 2012--2017 Clemens Niederberger
+% Copyright 2012--2019 Clemens Niederberger
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -40,6 +40,7 @@
AddEmph,
ChangeEmph,
DeleteEmph,
+ emb,embbracket,embparen,
EmbracOff,
EmbracOn,
printbibliography,
@@ -97,17 +98,6 @@ I like to thank both Dominik Waßenhoven for inspiration~\cite{dtk12-dw} and
Bruno Le Floch for providing code~\cite{lefloch11}. Without either of them this
package probably wouldn't exist.
-\section{New}
-\begin{description}
- \item[v0.1a] The command \cs{RenewEmph} has been renamed into
- \cs{ChangeEmph} and a new slightly different \cs{RenewEmph} has been added.
- \item[v0.2] Improved interaction with \pkg{biblatex}.
- \item[v0.3] Added support for \pkg*{fontspec}'s \cs{textsi}.
- \item[v0.5] Don't replace brackets in math mode.
- \item[v0.6] Added support for \cs{textsl}.
- \item[v0.7] Added support for symbols with a catcode other than~12.
-\end{description}
-
\section{About}\label{sec:about}
\begin{cnltxquote}[{\cite[85]{bringhurst04}}]
Parentheses and brackets are not letters, and it makes little sense to speak
@@ -127,7 +117,6 @@ package probably wouldn't exist.
from my [sic] bed}.\kern.05em}
\end{cnltxquote}
-\noindent
Both this quote from~\citetitle{bringhurst04} by Robert Bringhurst and the
article \citetitle{dtk12-dw} by Dominik Waßenhoven~\cite{dtk12-dw} inspired
this package. Indeed, \embrac\ heavily borrows from the code
@@ -341,5 +330,32 @@ Please be aware that \embrac\ does not affect \cs{itshape} nor \cs{em} (nor
\begin{example}
\itshape This is italic [sic] text.
\end{example}
+In cases like this one of the following commands could be used:
+\begin{commands}
+ \command{emb}[\marg{op}\marg{cl}\marg{text}]
+ Encloses\sinceversion{v0.8} \meta{text} with \meta{op} and \meta{cl}. Both
+ \meta{op} and \meta{cl} must be brackets known to \embrac.
+ \command{embparen}[\marg{text}]
+ Encloses\sinceversion{v0.8} \meta{text} with upright parentheses. This is
+ the same as \cs{emb}\Marg{(}\Marg{)}\marg{text}.
+ \command{embbracket}[\marg{text}]
+ Encloses\sinceversion{v0.8} \meta{text} with upright brackets. This is
+ the same as \cs{emb}\Marg{[}\Marg{]}\marg{text}.
+\end{commands}
+\begin{example}
+ \itshape This is italic \embbracket{sic} text.
+\end{example}
+
+\section{Version History}
+\begin{description}
+ \item[v0.1a] The command \cs{RenewEmph} has been renamed into
+ \cs{ChangeEmph} and a new slightly different \cs{RenewEmph} has been added.
+ \item[v0.2] Improved interaction with \pkg{biblatex}.
+ \item[v0.3] Added support for \pkg*{fontspec}'s \cs{textsi}.
+ \item[v0.5] Don't replace brackets in math mode.
+ \item[v0.6] Added support for \cs{textsl}.
+ \item[v0.7] Added support for symbols with a catcode other than~12.
+ \item[v0.8] Added \cs{embparen}, \cs{embbracket} and \cs{emb}.
+\end{description}
\end{document}
diff --git a/macros/latex/contrib/embrac/embrac_kerning_test.tex b/macros/latex/contrib/embrac/embrac_kerning_test.tex
index ec1425c169..dbd52af477 100644
--- a/macros/latex/contrib/embrac/embrac_kerning_test.tex
+++ b/macros/latex/contrib/embrac/embrac_kerning_test.tex
@@ -1,4 +1,4 @@
-% arara: pdflatex
+% arara: lualatex: { interaction: nonstopmode }
% --------------------------------------------------------------------------
% the EMBRAC package
%
@@ -35,8 +35,8 @@
\usepackage{fontspec}
% load desired font, for example:
-% \usepackage{libertine}
-\setmainfont{Minion Pro}
+\usepackage{libertine}
+% \setmainfont{Minion Pro}
\usepackage{embrac}
@@ -76,4 +76,4 @@
\emph{This is emphasized text (as you can see).}
-\end{document} \ No newline at end of file
+\end{document}
diff --git a/macros/latex/contrib/gindex/README.md b/macros/latex/contrib/gindex/README.md
new file mode 100644
index 0000000000..ab045e6f42
--- /dev/null
+++ b/macros/latex/contrib/gindex/README.md
@@ -0,0 +1,30 @@
+## gindex
+
+This package provides a way to generate the format of index entries from within LaTeX.
+
+What it does is to generate blocks like this for each first-level entry:
+```
+\setcounter{indexsubitems}{2}%
+\indexitem{blah1}{1}%
+ \indexsubitem{subblah1}{3}%
+ \indexsubitem{subblah2}{5}%
+\indexnoitem{}{}%
+```
+
+Then you can define `\indexitem` and the like to whatever you want.
+
+### Recent changes
+
+```
+0.1 2019-10-01
+ - First released version, with the most basic tools.
+```
+
+License: MIT
+________
+Javier Bezos --- http://www.texnia.com
+
+
+
+
+
diff --git a/macros/latex/contrib/gindex/gindex.ist b/macros/latex/contrib/gindex/gindex.ist
new file mode 100644
index 0000000000..9200efe193
--- /dev/null
+++ b/macros/latex/contrib/gindex/gindex.ist
@@ -0,0 +1,42 @@
+%
+% Copyright (C) 2019 Javier Bezos http://www.texnia.com
+%
+% 2019/10/01 v0.1
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+% Repository: https://github.com/jbezos/gindex
+%
+% Required by gindex
+% ------------------
+
+item_0 "}\n\\addindexitem{"
+item_1 "}\n \\addindexsubitem{"
+item_01 "}\n \\addindexsubitem{"
+item_x1 "}{}\n \\addindexsubitem{"
+item_2 "}\n \\addindexsubsubitem{"
+item_12 "}\n \\addindexsubsubitem{"
+item_x2 "}{}\n \\addindexsubsubitem{"
+delim_0 "}{"
+delim_1 "}{"
+delim_2 "}{"
+group_skip "}\n%\n\\addindexskip{"
+heading_prefix "}\n%\n\\addindexheading{"
+heading_suffix "}\n%\n{"
+preamble "\\begin{theindex}\\indexpreamble\n\n{"
+postamble "}\n\\indexpostamble\\end{theindex}"
+indent_space ""
+indent_length 0
+delim_r "{\\indexrangesep}"
+
+% Modify to fit your own requirements
+% -----------------------------------
+
+headings_flag -1 % Usually redefining \indexheading is better
+actual '@'
+quote '"'
+level '!'
+page_precedence "rnaRA"
+keyword "\\indexentry"
+delim_n ", " \ No newline at end of file
diff --git a/macros/latex/contrib/gindex/gindex.pdf b/macros/latex/contrib/gindex/gindex.pdf
new file mode 100644
index 0000000000..f2c092f75d
--- /dev/null
+++ b/macros/latex/contrib/gindex/gindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/gindex/gindex.sty b/macros/latex/contrib/gindex/gindex.sty
new file mode 100644
index 0000000000..36311da7f9
--- /dev/null
+++ b/macros/latex/contrib/gindex/gindex.sty
@@ -0,0 +1,99 @@
+%
+% Copyright (C) 2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+% Repository: https://github.com/jbezos/gindex
+%
+
+\ProvidesPackage{gindex}[2019/10/01 v0.1 Formatting indexes]
+
+\newcounter{indexsubitems}
+
+\let\esx@save\@empty
+\let\indexnoitem\@gobbletwo
+
+\def\addindexitem#1#2{%
+ \esx@save
+ \indexnoitem{}{}%
+ \setcounter{indexsubitems}{0}%
+ \let\esx@save\@empty
+ \g@addto@macro\esx@save{\indexitem{#1}{#2}}}
+
+\def\addindexskip#1{%
+ \esx@save
+ \indexnoitem{}{}%
+ \setcounter{indexsubitems}{0}%
+ \let\esx@save\@empty
+ \indexskip{#1}}
+
+\def\addindexheading#1{%
+ \esx@save
+ \indexnoitem{}{}%
+ \setcounter{indexsubitems}{0}%
+ \let\esx@save\@empty
+ \indexheading{#1}}
+
+\def\addindexsubitem#1#2{%
+ \stepcounter{indexsubitems}%
+ \g@addto@macro\esx@save{\indexsubitem{#1}{#2}}}
+
+\def\addindexsubsubitem#1#2{%
+ \g@addto@macro\esx@save{\indexsubsubitem{#1}{#2}}}
+
+\newcommand\indexitem[2]{\item #1\ifx\\#2\\\else, #2\fi}
+\newcommand\indexsubitem[2]{\subitem #1\ifx\\#2\\\else, #2\fi}
+\newcommand\indexsubsubitem[2]{\subsubitem #1\ifx\\#2\\\else, #2\fi}
+
+\newcommand\indexitemhang[6]{%
+ \par\hangindent#2\relax
+ \ifdim#1=0pt\relax\else
+ \hspace*{#1}%
+ \fi
+ #5%
+ \ifx\@empty#6\@empty
+ #3%
+ \else
+ #4#6%
+ \fi}
+
+\ifx\indexspace\@undefined
+ \newcommand\indexskip[1]{\par\vskip10\p@\@plus5\p@\@minus3\p@\relax}
+\else
+ \newcommand\indexskip[1]{\indexspace}
+\fi
+\newcommand\indexheading[1]{%
+ {\bfseries\hfil
+ \MakeUppercase{#1}%
+ \hfil}%
+ \nopagebreak}
+
+\let\indexpreamble\relax
+\let\indexpostamble\relax
+
+\def\indexrangesep{-}
+
+\endinput
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/macros/latex/contrib/gindex/gindex.tex b/macros/latex/contrib/gindex/gindex.tex
new file mode 100644
index 0000000000..c240281dfd
--- /dev/null
+++ b/macros/latex/contrib/gindex/gindex.tex
@@ -0,0 +1,184 @@
+%
+% Copyright (C) 2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+% Repository: https://github.com/jbezos/esindex
+%
+
+\documentclass[a4paper]{ltxguide}
+
+\title{\textsf{gindex}\\\large Version 0.1}
+
+\author{Javier Bezos\\\texttt{http://www.texnia.com}}
+
+\date{2019-10-01}
+
+\raggedright
+\parskip=.8ex
+\advance\oddsidemargin-.7cm
+\advance\textwidth2cm
+\addtolength{\textheight}{3.5cm}
+\addtolength{\topmargin}{-2cm}
+
+\usepackage{xcolor,bera}
+
+\definecolor{notes}{rgb}{.75, .3, .3}%
+
+\makeatletter
+\def\@begintheorem#1#2{%
+ \list{}{}%
+ \global\advance\@listdepth\m@ne
+ \item[{\sffamily\bfseries\color{notes}\MakeUppercase{#1}}]}%
+\makeatother
+\newtheorem{warning}{Warning}
+\newtheorem{note}{Note}
+\newtheorem{example}{Example}
+
+\begin{document}
+
+\vspace*{1cm}
+{\fontsize{48}{48}\selectfont \color{notes}{gindex}\par}
+{\LARGE Formatting indexes with \LaTeX\par}
+\vspace*{1ex}
+Version 0.1 (2019-10-01)\par
+Javier Bezos (\texttt{http://www.texnia.com})
+
+\vspace*{6ex}
+
+This package works in conjunction with a \textit{\bfseries g}eneric
+\verb|ist| file, which provides a way to \textit{\bfseries g}enerate
+the format of index entries from within \LaTeX. With standard classes,
+it works out of the box with some predefined values, which you can (and
+in fact should) redefine with |\renewcommand|.
+
+Note it is version 0.1. Changes of the existing features are unlikely
+to happen (but who knows), but new features, on the other hand, will be
+added in the near future.
+
+What it does is to generate blocks like this for each first-level entry:
+\begin{verbatim}
+ \setcounter{indexsubitems}{2}% The number of subitems
+ \indexitem{blah1}{1}%
+ \indexsubitem{subblah1}{3}%
+ \indexsubitem{subblah2}{5}%
+ \indexnoitem{}{}% Usually dummy
+\end{verbatim}
+
+As you can see, when |\indexitem| is executed, you know the number of
+subitems, which is necessary for some styles.
+
+The default values are:
+\begin{verbatim}
+\newcommand\indexitem[2]{\item #1\ifx\\#2\\\else, #2\fi}
+\newcommand\indexsubitem[2]{\subitem #1\ifx\\#2\\\else, #2\fi}
+\newcommand\indexsubsubitem[2]{\subsubitem #1\ifx\\#2\\\else, #2\fi}
+\end{verbatim}
+For example, to replace the comma by a quad:
+\begin{verbatim}
+\renewcommand\indexitem[2]{\item #1\ifx\\#2\\\else\quad #2\fi}
+\end{verbatim}
+
+It is guaranteed that these command can take up to 5 arguments. If you
+define |\indexitem| with all of them, the parameters in the previous
+example will be:
+\begin{enumerate}
+ \item |blah1|
+ \item |1|
+ \item |\indexsubitem|
+ \item |subblah1|
+ \item |3|
+\end{enumerate}
+This explains the line |\indexnoitem{}{}| above, which by default does
+nothing. By inspecting the third parameter you decide how to format the
+current parameter (of course, in most cases you must emit it again at
+the end of your definition of |\indexitem|).
+
+Subsubitems are allowed, but not counted. Only subitems are counted.
+
+
+There is a tool to define the most usual entry format, which is used in
+the following way:
+\begin{verbatim}
+\renewcommand\indexitem[2]{%
+ \indexitemhang{0pt}% First line left margin
+ {10pt}% Second, third... lines left margin
+ {}% After entry if no locator
+ {: }% Entry-locator separator
+ {#1}% Entry
+ {#2}}% Locator
+\end{verbatim}
+
+Other macros are:
+\begin{itemize}
+\item \verb|\indexpreamble|, executed just after
+ \verb|\begin{theindex}| (\verb|\relax| by default).
+\item \verb|\indexpostamble|, executed before
+ \verb|\end{theindex}| (\verb|\relax| by default).
+\item \verb|\indexskip|, which is \verb|\indexspace| by default,
+with similar purpose.
+\item \verb|\indexheading|, is defined as follows:
+\begin{verbatim}
+\newcommand\indexheading[1]{%
+ {\bfseries\hfil
+ \MakeUppercase{#1}%
+ \hfil}%
+ \nopagebreak}
+\end{verbatim}
+\item \verb|\indexrangesep|, which by default is |-|.
+\end{itemize}
+
+Remember to set the style to |gindex| when running \textsf{makeindex}:
+\begin{verbatim}
+ makeindex -s gindex yourfile
+\end{verbatim}
+
+Note also there is no need to run \textsf{makeindex} to fine tune the
+format.
+
+\section{Internals}
+
+The |ind| files is generated by |gindex.ist| with generic macros like:
+\begin{verbatim}
+ \addindexitem{bla1}{1}
+ \addindexsubitem{subbla1}{3}
+ \addindexsubitem{subbla2}{5}
+\end{verbatim}
+What \textsf{gindex} does is to convert them to the above format. Some
+parameters should be cuntomized in the |ist| file, however. These are:
+\begin{verbatim}
+headings_flag -1
+actual '@'
+quote '"'
+level '!'
+page_precedence "rnaRA"
+keyword "\\indexentry"
+delim_n ", "
+\end{verbatim}
+As to |headings_flag|, the recommended way to deal with case is with
+|\indexheading|.
+
+\end{document}
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/macros/latex/contrib/nicematrix/README.md b/macros/latex/contrib/nicematrix/README.md
index aadca62b15..056f0d84a4 100644
--- a/macros/latex/contrib/nicematrix/README.md
+++ b/macros/latex/contrib/nicematrix/README.md
@@ -12,7 +12,7 @@ The LaTeX extension `nicematrix` is distributed under the LPPL 1.3 license.
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 an exterior line and an exterior column.
+of the array and to add exterior rows and columns (so called 'border matrices').
## Installation
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index 735084e1e5..8829f14771 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index 5d6e573f66..fa07724b59 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -1,4 +1,4 @@
-\documentclass[dvipsnames]{article}% dvipsnames is for xcolor (loaded by Tikz, loaded by nicematrix)
+\documentclass[dvipsnames]{article}% dvipsnames is for xcolor (loaded by Tikz, loaded by nicematrix)
\usepackage{xltxtra}
\usepackage[french]{babel}
@@ -212,8 +212,7 @@ des raisons techniques, dans le préambule de l'environnement |{NiceArray}|, l'u
|W{...}{...}|\footnote{Pour les colonnes de type |w| et |W|, les cases sont composées en mode mathématique (dans
les environnements de \pkg{nicematrix}) alors que dans |{array}| de \pkg{array}, elles sont composées en mode
texte.}, \verb+|+, |>{...}|, |<{...}|, |@{...}|, |!{...}| et |*{n}{...}| mais les lettres |p|, |m| et |b| ne
-doivent pas être employées. L'environnement |{NiceArray}| et ses variantes fournissent des options qui permettent
-de tracer des rangées et colonnes extérieures. Voir p.~\pageref{NiceArray} la partie concernant |{NiceArray}|.
+doivent pas être employées. Voir p.~\pageref{NiceArray} la partie concernant |{NiceArray}|.
\section{Les lignes en pointillés continues}
@@ -316,7 +315,8 @@ $\begin{bNiceMatrix}
\bigskip
Il y a aussi d'autres moyens de changer la taille d'une matrice. On pourrait vouloir utiliser l'argument optionnel
de la commande~|\\| pour l'espacement vertical et la commande~|\hspace*| dans une case pour l'espacement
-horizontal.\footnote{On peut aussi régler la largeur des colonnes en utilisant l'environnement |{NiceArray}| (ou
+horizontal.\footnote{Dans \pkg{nicematrix}, il faut utiliser |\hspace*| et non |\hspace| car \pkg{nicematrix}
+ utilise \pkg{array}. Remarquons aussi que l'on peut également régler la largeur des colonnes en utilisant l'environnement |{NiceArray}| (ou
une de ses variantes) avec une colonne de type~|w| ou |W|: cf. p.~\pageref{width}}
Toutefois, une commande~|\hspace*| pourrait interférer dans la construction des lignes en pointillés. C'est
@@ -501,10 +501,11 @@ même rangée que |\Hdotsfor|).
\subsection{Comment créer les lignes en pointillés de manière transparente}
L'extension \pkg{nicematrix} fournit une option appelée |transparent| qui permet d'utiliser du code existant de
-manière transparente dans les environnements |{matrix}|. Cette option peut être passée en option du |\usepackage|
-ou bien être fixée avec la commande |\NiceMatrixOptions|.
-
-En fait, cette option est un alias pour la conjonction de deux options : |renew-dots| et |renew-matrix|.
+manière transparente dans les environnements de l'\pkg{amsmath} : |{matrix}|, |{pmatrix}|, |{bmatrix}|, etc. En
+fait, cette option est un alias pour la conjonction de deux options : |renew-dots| et
+|renew-matrix|.\footnote{Comme toutes les autres options, les options |renew-dots|, |renew-matrix| et |transparent|
+ peuvent être fixées avec la commande |\NiceMatrixOptions|, mais elles peuvent aussi être passées en options du
+ |\usepackage| (ce sont les trois seules).}
\smallskip
@@ -800,8 +801,8 @@ Il existe également des variantes pour l'environnement |{NiceArray}| : |{pNiceA
|{BNiceArray}|, |{vNiceArray}| et |{VNiceArray}|.
-Dans l'exemple suivant, on utilise un environnment |{pNiceArray}| (on n'utilise pas |{pNiceMatrix}| car on souhaite
-utiliser les types de colonne |L| et |R| --- avec |{pNiceMatrix}|, toutes les colonnes sont de type |C|).
+Dans l'exemple suivant, on utilise un environnement |{pNiceArray}| (on n'utilise pas |{pNiceMatrix}| car on
+souhaite utiliser les types de colonne |L| et |R| --- avec |{pNiceMatrix}|, toutes les colonnes sont de type |C|).
\bigskip
@@ -820,42 +821,81 @@ a_{21} & & a_{2n} \\
a_{n-1,1} & \Cdots & a_{n-1,n}
\end{pNiceArray}$
-\vspace{1cm}
-L'environnement |{NiceArray}| et ses variantes permettent de composer des rangées et des colonnes «extérieures» grâce aux options
+
+\bigskip
+\bigskip
+En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
+|{NiceArrayWithDelims}|. Les deux premiers arguments obligatoires de cet environnement sont les délimiteurs gauche
+et droit qui seront utilisés dans la construction de la matrice. Il est possible d'utiliser |{NiceArrayWithDelims}|
+si on a besoin de délimiteurs atypiques.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{~emphase#NiceArrayWithDelims@}
+ {\downarrow}{\downarrow}{CCC}
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9 \\
+\end{~emphase#NiceArrayWithDelims@}$
+\end{BVerbatim}
+$\begin{NiceArrayWithDelims}
+ {\downarrow}{\downarrow}{CCC}
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9 \\
+\end{NiceArrayWithDelims}$
+
+
+
+\bigskip
+\section{Les rangées et colonnes extérieures}
+Les environnements de \pkg{nicematrix} permettent de composer des rangées et des colonnes «extérieures» grâce aux options
|first-row|, |last-row|, |first-col| et |last-col|.
\label{exterior}
-Il n'y a pas de spécification de colonne à fournir pour l'éventuelle «première colonne» (qui sera automatiquement
-une colonne de type |R|) ou pour l'éventuelle «dernière colonne» (qui sera automatiquement de type |L|).
-
+Si elle est présente, la première rangée est numérotée par $0$ (et non $1$). Il en est de même pour la première
+colonne. Dans le cas général, on doit spécifier le numéro de la dernière rangée et de la dernière colonne (si elles
+sont présentes).
\begin{Verbatim}
-$\begin{pNiceArray}{CCCC}[~emphase#first-row,last-row,first-col,last-col@]
+$\begin{pNiceMatrix}[~emphase#first-row,last-row=5,first-col,last-col=5@]
& C_1 & C_2 & C_3 & C_4 & \\
L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
& C_1 & C_2 & C_3 & C_4 &
-\end{pNiceArray}$
+\end{pNiceMatrix}$
\end{Verbatim}
%
-\[\begin{pNiceArray}{CCCC}[first-row,last-row,first-col,last-col]
+\[\begin{pNiceMatrix}[first-row,last-row=5,first-col,last-col=5]
& C_1 & C_2 & C_3 & C_4 & \\
L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
& C_1 & C_2 & C_3 & C_4 &
-\end{pNiceArray}\]
+\end{pNiceMatrix}\]
\bigskip
-Néanmoins, il y a une particularité avec l'option |last-row| : quand LaTeX compose un tableau |{array}| (via une
-commande |\halign| de TeX), il le compose rangée par rangée et il n'y a pas de moyen direct de savoir que l'on est
-arrivé à la dernière rangée avant la composition de celle-ci. Pour remédier à ce problème, \pkg{nicematrix} écrit
-dans le fichier |aux| le nombre de rangées du tableau pour pouvoir l'utiliser à la compilation suivante. Il est
-néanmoins également possible de passer directement le nombre de rangées en argument de l'option |last-row| et,
-ainsi, \pkg{nicematrix} le connaîtra dès la première compilation.
+Il y a plusieurs remarques à formuler.
+%
+\begin{itemize}
+\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 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 |L|).
+
+\item Si on utilise un environnement avec préambule explicite et une dernière colonne, on doit utiliser l'option
+|last-col| \emph{sans} valeur. En effet le numéro de la dernière colonne est, dans ce cas, déduit du préambule (qui
+contient nécessairement l'information du nombre de colonnes non extérieures).
+
+\item Pour une dernière rangée, l'option |last-row| peut en fait être utilisée sans préciser de valeur. Dans ce
+cas, \pkg{nicematrix} détermine, lors de la première compilation, le nombre de rangées rencontrées dans le tableau
+et l'écrit dans le fichier |.aux| pour la prochaine compilation. Dans l'exemple qui suit, l'option |last-row| sera
+utilisée sans valeur explicite.
+\end{itemize}
+
+
\bigskip
On peut contrôler l'apparence de ces rangées et colonnes avec les options |code-for-first-row|,
@@ -867,7 +907,7 @@ insérées au début de chaque case de la rangée ou de la colonne considérée.
~emphase#code-for-first-col@ = \color{blue},
~emphase#code-for-last-row@ = \color{green},
~emphase#code-for-last-col@ = \color{magenta}}
-$\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col]
+$\begin{pNiceArray}{CC|CC}[first-row,last-row,first-col,last-col]
& C_1 & C_2 & C_3 & C_4 & \\
L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
@@ -884,7 +924,7 @@ L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
code-for-last-row = \color{green},
code-for-last-col = \color{magenta}}
\begin{displaymath}
-\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col]
+\begin{pNiceArray}{CC|CC}[first-row,last-row,first-col,last-col]
& C_1 & \multicolumn1C{C_2} & C_3 & C_4 & \\
L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
@@ -907,9 +947,6 @@ tableau) ne s'étend pas dans les rangées extérieures.\footnote{Ce dernier poi
sont pas parfaitement compatibles car \pkg{arydshln} redéfinit beaucoup de structures internes à \pkg{array}. Par
ailleurs, si on veut vraiment un filet qui s'étende dans la première et la dernière rangée, on peut utiliser
|!{\vline}| dans le préambule à la place de \verb+|+.}
-\item La «première rangée» d'un environnement |{pNiceArray}| porte le numéro $0$, et non $1$ (de même pour la
-«première colonne»). Ce numéro est utilisé, par exemple, pour les noms des nœuds Tikz (les noms de ces nœuds sont
-utilisés, par exemple, par la commande |\line| dans le |code-after|).
\item Sans surprise, une éventuelle option |columns-width| (décrite p.~\pageref{width}) ne s'applique pas à la
«première colonne» ni à la «dernière colonne».
\item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de la commande |\\| après la
@@ -917,28 +954,6 @@ utilisés, par exemple, par la commande |\line| dans le |code-after|).
\end{itemize}
-\bigskip
-En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
-|{NiceArrayWithDelims}|. Les deux premiers arguments obligatoires de cet environnement sont les délimiteurs gauche
-et droit qui seront utilisés dans la construction de la matrice. Il est possible d'utiliser |{NiceArrayWithDelims}|
-si on a besoin de délimiteurs atypiques.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-$\begin{~emphase#NiceArrayWithDelims@}
- {\downarrow}{\downarrow}{CCC}[last-col]
-1 & 2 & 3 & L_1 \\
-4 & 5 & 6 & L_2 \\
-7 & 8 & 9 & L_3
-\end{~emphase#NiceArrayWithDelims@}$
-\end{BVerbatim}
-$\begin{NiceArrayWithDelims}
- {\downarrow}{\downarrow}{CCC}[last-col]
-1 & 2 & 3 & L_1 \\
-4 & 5 & 6 & L_2 \\
-7 & 8 & 9 & L_3
-\end{NiceArrayWithDelims}$
-
@@ -1065,8 +1080,8 @@ $\begin{pNiceArray}{Wc{1cm}CC}
\bigskip
-Avec \pkg{nicematrix}, il est aussi possible de fixer la largeur de toutes les colonnes de la matrice directement
-avec l'option |columns-width| (disponible dans tous les environnements de \pkg{nicematrix}).
+Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la largeur de toutes les colonnes de la
+matrice directement avec l'option |columns-width|.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1088,8 +1103,9 @@ possible de le supprimer en mettant |\arraycolsep| à~$0$).
\bigskip
Il est possible de donner la valeur |auto| à l'option |columns-width| : toutes les colonnes du tableau
-auront alors une largeur égale à la largeur de la case la plus large du tableau. \textbf{Deux ou trois
- compilations successives peuvent être nécessaires.}\par\nobreak
+auront alors une largeur égale à la largeur de la case la plus large du tableau.\footnote{Le résultat est atteint
+dès la première compilation (mais Tikz écrivant des informations dans le fichier |.aux|, un message demandant une
+deuxième compilation apparaîtra).}\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1159,9 +1175,12 @@ $\begin{pNiceMatrix}
=
\begin{pNiceMatrix}
1 & 1245 \\ 345 & 2
- \end{pNiceMatrix}$
+\end{pNiceMatrix}$
\end{NiceMatrixBlock}
+\medskip
+\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.}
+
\section{Les matrices par blocs}
Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index 684b34c5b4..44a38c9a0b 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{3.2a}
-\def\myfiledate{2019/09/21}
+\def\myfileversion{3.3}
+\def\myfiledate{2019/10/01}
%
%
%<*batchfile>
@@ -211,7 +211,7 @@ c & c & b & a & e
% \{VNiceMatrix\} & & \{NiceArrayWithDelims\} \\
% \end{tabular}
% \end{ttfamily}
-%b
+%
%
% \medskip
% By default, the environments |{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|,
@@ -229,9 +229,8 @@ c & c & b & a & e
% |W|, the cells are composed in math mode (in the environments of
% \pkg{nicematrix}) whereas in |{array}| of \pkg{array}, they are composed in text mode.}, "|",
% |>{...}|, |<{...}|, |@{...}|, |!{...}| and |*{n}{...}| but the letters |p|,
-% |m| and |b| should not be used. The environment |{NiceArray}| and its variants
-% provide also options to draw exterior rows and columns. See p.~\pageref{NiceArray}
-% the section relating to |{NiceArray}|
+% |m| and |b| should not be used. See p.~\pageref{NiceArray} the section
+% relating to |{NiceArray}|.
%
%
% \section{The continuous dotted lines}
@@ -337,13 +336,15 @@ c & c & b & a & e
% 0 & & \Cdots & 0
% \end{bNiceMatrix}$
%
-% \bigskip e
+% \bigskip
% There are also other means to change the size of the matrix. Someone might
% want to use the optional argument of the command~|\\| for the vertical
% dimension and a command~|\hspace*| in a cell for the horizontal
-% dimension.\footnote{It's also possible to fix the width of a column
-% by using the environment |{NiceArray}| (or one of its variants) with a column of
-% type~|w| or~|W|: see p.~\pageref{width}}
+% dimension.\footnote{In \pkg{nicematrix}, one should use |\hspace*| and not
+% |\hspace| for such an usage because \pkg{nicematrix} loads \pkg{array}. One
+% may also remark that it's possible to fix the width of a column by using the
+% environment |{NiceArray}| (or one of its variants) with a column of type~|w|
+% or~|W|: see p.~\pageref{width}}
%
% However, a command~|\hspace*| might interfer with the construction of the
% dotted lines. That's why the package \pkg{nicematrix} provides a
@@ -534,12 +535,14 @@ c & c & b & a & e
% \subsection{How to generate the continuous dotted lines transparently}
%
% The package \pkg{nicematrix} provides an option called |transparent| for using
-% existing code transparently in the environments |{matrix}|. This option can be
-% set as option of |\usepackage| or with the command |\NiceMatrixOptions|.
-%
-%
-% In fact, this option is an alias for the conjonction of two options:
-% |renew-dots| and |renew-matrix|.
+% existing code transparently in the environments of the \pkg{amsmath} :
+% |{matrix}|, |{pmatrix}|, |{bmatrix}|, etc. In fact, this
+% option is an alias for the conjonction of two options:
+% |renew-dots| and |renew-matrix|.\footnote{The options |renew-dots|,
+% |renew-matrix| and |transparent| can be fixed with the command
+% |\NiceMatrixOptiosn| like the other options. However, they can also be fixed
+% as options of the command |\usepackage| (it's an exception for these three
+% specific options.)}
%
% \smallskip
%
@@ -869,46 +872,78 @@ c & c & b & a & e
% \end{pNiceArray}$
%
%
-% \vspace{1cm}
-% With the environment |{NiceArray}| and its the variants, it's possible to
-% compose exterior rows and columns with the options |first-row|, |last-row|,
-% |first-col| and |last-col|.
+% \bigskip
+% In fact, the environment |{pNiceArray}| and its variants are based upon a
+% more general environment, called |{NiceArrayWithDelims}|. The first two
+% mandatory arguments of this environment are the left and right delimiters used
+% in the construction of the matrix. It's possible to use
+% |{NiceArrayWithDelims}| if we want to use atypical delimiters.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
+% $\begin{~emphase#NiceArrayWithDelims@}
+% {\downarrow}{\downarrow}{CCC}
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9 \\
+% \end{~emphase#NiceArrayWithDelims@}$
+% \end{BVerbatim}
+% $\begin{NiceArrayWithDelims}
+% {\downarrow}{\downarrow}{CCC}
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9 \\
+% \end{NiceArrayWithDelims}$
+%
+%
+% \bigskip
+% \section{The exterior row and columns}
+% The options |first-row|, |last-row|, |first-col| and |last-col| allow the
+% composition of exterior rows and columns in the environments of \pkg{nicematrix}.
% \label{exterior}
%
-% There is no specification of column to provide for the potential ``first
-% column'' (it will automatically be a |R| column) and for the potential ``last
-% column'' (it will automatically be a |L| column).
+% A potential first row has the number $0$ (and not $1$). Idem for the potential
+% first column. In general cases, one must specify the number of the last row
+% and the number of the last column as values of |last-row| and |last-col|.
%
% \begin{Verbatim}
-% $\begin{pNiceArray}{CCCC}[~emphase#first-row,last-row,first-col,last-col@]
+% $\begin{pNiceMatrix}[~emphase#first-row,last-row=5,first-col,last-col=5@]
% & C_1 & C_2 & C_3 & C_4 & \\
% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
% L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
% L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
% & C_1 & C_2 & C_3 & C_4 &
-% \end{pNiceArray}$
+% \end{pNiceMatrix}$
% \end{Verbatim}
%
-% \[\begin{pNiceArray}{CCCC}[first-row,last-row,first-col,last-col]
+% \[\begin{pNiceMatrix}[first-row,last-row=5,first-col,last-col=5]
% & C_1 & C_2 & C_3 & C_4 & \\
% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
% L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
% L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
% & C_1 & C_2 & C_3 & C_4 &
-% \end{pNiceArray}\]
+% \end{pNiceMatrix}\]
%
% \bigskip
-% However, there is a particularity for the option |last-row|: when LaTeX
-% composes an array (with the TeX command |\halign|) it composes it row by row
-% and there is no direct way to know if we are at the last row before the
-% composition of that row. That's why \pkg{nicematrix} writes in the |aux| file
-% the number of rows of the array in order to use it at the next run.
-% Nevertheless, it's possible to give directly the number of rows as the value
-% of the key |last-row|. It that way, \pkg{nicematrix} will know the correct
-% value by the first compilation.
-%
+% We have several remarks to do.
+% \begin{itemize}
+% \item For the environments with an explicit preamble (i.e. |{NiceArray}| and
+% its variants), no letter must be given in the preamble for the potential first
+% column and the potential last column: the first column will be automatically
+% (and necessarily) of type |R| and the last column will be automatically of
+% type |L|).
+% \item In an environment with an explicit preamble, the option |last-col| must
+% be used \emph{without} value: the number of columns will be automatically
+% computed from the preamble of the array.
+% \item For the potential last row, the option |last-row| may, in fact, be used
+% without value. In this case, \pkg{nicematrix} computes, during the first
+% compilation, the number of row of the array and writes that information in the
+% |.aux| file for the second run. In the following example, the option
+% |last-row| will be used without value.
+% \end{itemize}
+%
% \bigskip
% It's possible to control the appearance of these rows and columns with options
% |code-for-first-row|, |code-for-last-row|, |code-for-first-col| and
@@ -961,10 +996,6 @@ c & c & b & a & e
% \pkg{array}. On another note, if one really wants a vertical rule running in
% the first and in the last row, he should use |!{\vline}| instead of \verb+|+
% in the preamble of the array.}
-% \item The ``first row'' of an environment |{pNiceArray}| has the number $0$, and not
-% $1$. Idem for the ``first column''. This number is used for the names of the Tikz
-% nodes (the names of these nodes are used, for example, by the command |\line|
-% in |code-after|).
% \item Logically, the potential option |columns-width| (described
% p.~\pageref{width}) doesn't apply to the ``first column'' and ``last column''.
% \item For technical reasons, it's not possible to use the option of the command |\\|
@@ -975,30 +1006,6 @@ c & c & b & a & e
%
%
%
-% \bigskip
-% In fact, the environment |{pNiceArray}| and its variants are based upon a
-% more general environment, called |{NiceArrayWithDelims}|. The first two
-% mandatory arguments of this environment are the left and right delimiters used
-% in the construction of the matrix. It's possible to use
-% |{NiceArrayWithDelims}| if we want to use atypical delimiters.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% $\begin{~emphase#NiceArrayWithDelims@}
-% {\downarrow}{\downarrow}{CCC}[last-col]
-% 1 & 2 & 3 & L_1 \\
-% 4 & 5 & 6 & L_2 \\
-% 7 & 8 & 9 & L_3
-% \end{~emphase#NiceArrayWithDelims@}$
-% \end{BVerbatim}
-% $\begin{NiceArrayWithDelims}
-% {\downarrow}{\downarrow}{CCC}[last-col]
-% 1 & 2 & 3 & L_1 \\
-% 4 & 5 & 6 & L_2 \\
-% 7 & 8 & 9 & L_3
-% \end{NiceArrayWithDelims}$
-%
-%
%
% \section{The dotted lines to separate rows or columns}
%
@@ -1122,8 +1129,8 @@ c & c & b & a & e
%
%
% \bigskip
-% It's also possible to fix the width of all the columns of a matrix directly
-% with the option |columns-width| (in all the environments of \pkg{nicematrix}).
+% In the environments of \pkg{nicematrix}, it's also possible to fix the width
+% of all the columns of a matrix directly with the option |columns-width|.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1146,8 +1153,10 @@ c & c & b & a & e
%
% \bigskip
% It's possible to give the value |auto| to the option |columns-width|: all the
-% columns of the array will have a width equal to the widest cell of the array.
-% \textbf{Two or three compilations may be necessary.}\par\nobreak
+% columns of the array will have a width equal to the widest cell of the
+% array.\footnote{The result is achieved with only one compilation (but Tikz
+% will have written informations in the |.aux| file and a message requiring a
+% second compilation will appear).}\par\nobreak
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1221,6 +1230,10 @@ c & c & b & a & e
% \end{pNiceMatrix}$
% \end{NiceMatrixBlock}
%
+% \medskip
+% \textbf{Several compilations may be necessary to achieve the job.}
+%
+%
% \section{Block matrices}
%
% In the environments of \pkg{nicematrix}, it's possible to use the command
@@ -1258,11 +1271,12 @@ c & c & b & a & e
% \end{scope}
%
% \bigskip
-% One may wish raise the size of the ``$A$'' placed in the block of the previous
-% example. Since this element is composed in math mode, it's not possible to use
-% directly a command like |\large|, |\Large| and |\LARGE|. That's why the command
-% |\Block| provides an option between angle brackets to specificy some TeX code
-% which will be inserted before the beginning of the math mode.
+% One may wish to raise the size of the ``$A$'' placed in the block of the
+% previous example. Since this element is composed in math mode, it's not
+% possible to use directly a command like |\large|, |\Large| and |\LARGE|.
+% That's why the command |\Block| provides an option between angle brackets to
+% specificy some TeX code which will be inserted before the beginning of the
+% math mode.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -2429,8 +2443,16 @@ c & c & b & a & e
% \end{macrocode}
%
% \bigskip
+% We also define a counter to count the environments |{NiceMatrixBlock}|.
+% \begin{macrocode}
+\int_new:N \g_@@_NiceMatrixBlock_int
+% \end{macrocode}
+%
+% \bigskip
% The dimension |\l_@@_columns_width_dim| will be used when the options specify
-% that all the columns must have the same width.
+% 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).
% \begin{macrocode}
\dim_new:N \l_@@_columns_width_dim
% \end{macrocode}
@@ -2461,7 +2483,6 @@ c & c & b & a & e
% position (|t|, |b| or |c|).
% \begin{macrocode}
\bool_new:N \l_@@_NiceArray_bool
-\bool_new:N \g_@@_NiceArray_bool
% \end{macrocode}
%
%
@@ -2536,6 +2557,10 @@ c & c & b & a & e
% \begin{macrocode}
\str_new:N \g_@@_type_env_str
% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_code_after_tl
+% \end{macrocode}
%
% \bigskip
% \subsubsection{Variables for the exterior rows and columns}
@@ -2554,7 +2579,6 @@ c & c & b & a & e
% \begin{macrocode}
\int_new:N \l_@@_first_row_int
\int_set:Nn \l_@@_first_row_int 1
-\int_new:N \g_@@_first_row_int
% \end{macrocode}
%
% \medskip
@@ -2565,7 +2589,6 @@ c & c & b & a & e
% \begin{macrocode}
\int_new:N \l_@@_first_col_int
\int_set:Nn \l_@@_first_col_int 1
-\int_new:N \g_@@_first_col_int
% \end{macrocode}
%
% \medskip
@@ -2578,7 +2601,6 @@ c & c & b & a & e
% \begin{macrocode}
\int_new:N \l_@@_last_row_int
\int_set:Nn \l_@@_last_row_int { -2 }
-\int_new:N \g_@@_last_row_int
% \end{macrocode}
%
% \smallskip
@@ -2590,18 +2612,19 @@ c & c & b & a & e
% value from the |aux| file, the value of the counter won't be $-1$ any longer.}
% \begin{macrocode}
\bool_new:N \l_@@_last_row_without_value_bool
-\bool_new:N \g_@@_last_row_without_value_bool
% \end{macrocode}
%
% \medskip
% \item \textbf{Last column}\par\nobreak
%
-% For the eventual ``last column'', we have a boolean an not an integer.
+% For the eventual ``last column'', we use an integer. A value of $-1$ means
+% that there is no last column.
% \begin{macrocode}
-\bool_new:N \l_@@_last_col_bool
+\int_new:N \l_@@_last_col_int
+\int_set:Nn \l_@@_last_col_int { -1 }
% \end{macrocode}
%
-% However, we have also another boolean. Consider the following code:
+% However, we have also a boolean. Consider the following code:
% \begin{center}
% \begin{BVerbatim}
% \begin{pNiceArray}{CC}[last-col]
@@ -2807,20 +2830,11 @@ c & c & b & a & e
%
%
% \bigskip
-% We don't want to patch any existing code. That's why some code must be
-% executed in a |\group_insert_after:N|. That's why the parameters used in that
-% code must be transfered outside the current group. To do this, we copy those
-% quantities in global variables just before the |\group_insert_after:N|.
-% Therefore, for those quantities, we have two parameters, one local and one
-% global. For example, we have |\l_@@_name_str| and |\g_@@_name_str|.
-%
-% \bigskip
% The token list |\l_@@_name_str| will contain the optional name of the
% environment: this name can be used to access to the Tikz nodes created in the
% array from outside the environment.
% \begin{macrocode}
\str_new:N \l_@@_name_str
-\str_new:N \g_@@_name_str
% \end{macrocode}
%
% \bigskip
@@ -2837,8 +2851,6 @@ c & c & b & a & e
% \begin{macrocode}
\dim_new:N \l_@@_left_margin_dim
\dim_new:N \l_@@_right_margin_dim
-\dim_new:N \g_@@_left_margin_dim
-\dim_new:N \g_@@_right_margin_dim
\dim_new:N \g_@@_width_last_col_dim
\dim_new:N \g_@@_width_first_col_dim
% \end{macrocode}
@@ -2850,7 +2862,6 @@ c & c & b & a & e
% \begin{macrocode}
\dim_new:N \l_@@_extra_left_margin_dim
\dim_new:N \l_@@_extra_right_margin_dim
-\dim_new:N \g_@@_extra_right_margin_dim
% \end{macrocode}
%
%
@@ -2861,6 +2872,14 @@ c & c & b & a & e
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Global }
{
+ code-for-first-col .tl_set:N = \l_@@_code_for_first_col_tl ,
+ code-for-first-col .value_required:n = true ,
+ code-for-last-col .tl_set:N = \l_@@_code_for_last_col_tl ,
+ code-for-last-col .value_required:n = true ,
+ code-for-first-row .tl_set:N = \l_@@_code_for_first_row_tl ,
+ code-for-first-row .value_required:n = true ,
+ code-for-last-row .tl_set:N = \l_@@_code_for_last_row_tl ,
+ code-for-last-row .value_required:n = true ,
small .bool_set:N = \l_@@_small_bool ,
hlines .bool_set:N = \l_@@_hlines_bool ,
parallelize-diags .bool_set:N = \l_@@_parallelize_diags_bool ,
@@ -2872,6 +2891,7 @@ c & c & b & a & e
% |\Vdots| and |\Ddots|.
% \begin{macrocode}
renew-dots .bool_set:N = \l_@@_renew_dots_bool ,
+ renew-dots .value_forbidden:n = true ,
nullify-dots .bool_set:N = \l_@@_nullify_dots_bool ,
% \end{macrocode}
%
@@ -2897,23 +2917,6 @@ c & c & b & a & e
% \end{macrocode}
%
% \bigskip
-% The following set of keys concerns the options to \emph{customize} the
-% exterior rows and columns, that is to say the options |code-for-first-row|, etc.
-% \begin{macrocode}
-\keys_define:nn { NiceMatrix / Code }
- {
- code-for-first-col .tl_set:N = \l_@@_code_for_first_col_tl ,
- code-for-first-col .value_required:n = true ,
- code-for-last-col .tl_set:N = \l_@@_code_for_last_col_tl ,
- code-for-last-col .value_required:n = true ,
- code-for-first-row .tl_set:N = \l_@@_code_for_first_row_tl ,
- code-for-first-row .value_required:n = true ,
- code-for-last-row .tl_set:N = \l_@@_code_for_last_row_tl ,
- code-for-last-row .value_required:n = true ,
- }
-% \end{macrocode}
-%
-% \bigskip
% We define a set of keys used by the environments of \pkg{nicematrix} (but not
% by the command |\NiceMatrixOptions|).
% \begin{macrocode}
@@ -2932,8 +2935,11 @@ c & c & b & a & e
\str_set_eq:NN \l_@@_name_str \l_tmpa_str ,
name .value_required:n = true ,
code-after .tl_gset:N = \g_@@_code_after_tl ,
- code-after .initial:n = \c_empty_tl ,
code-after .value_required:n = true ,
+ first-col .code:n = \int_zero:N \l_@@_first_col_int ,
+ first-row .code:n = \int_zero:N \l_@@_first_row_int ,
+ last-row .int_set:N = \l_@@_last_row_int ,
+ last-row .default:n = -1 ,
}
% \end{macrocode}
%
@@ -2946,7 +2952,6 @@ c & c & b & a & e
NiceMatrixOptions .inherit:n =
{
NiceMatrix / Global ,
- NiceMatrix / Code
} ,
NiceMatrix .inherit:n =
{
@@ -2957,13 +2962,11 @@ c & c & b & a & e
{
NiceMatrix / Global ,
NiceMatrix / Env ,
- NiceMatrix / Code
} ,
pNiceArray .inherit:n =
{
NiceMatrix / Global ,
NiceMatrix / Env ,
- NiceMatrix / Code
}
}
% \end{macrocode}
@@ -3038,7 +3041,6 @@ c & c & b & a & e
{ \@@_error:n { Bad~value~for~letter~for~dotted~lines } }
} ,
letter-for-dotted-lines .value_required:n = true ,
- letter-for-dotted-lines .initial:n = \c_colon_str ,
% \end{macrocode}
%
% \bigskip
@@ -3047,7 +3049,11 @@ c & c & b & a & e
}
% \end{macrocode}
%
-%
+% \begin{macrocode}
+\str_new:N \l_@@_letter_for_dotted_lines_str
+\str_set_eq:NN \l_@@_letter_for_dotted_lines_str \c_colon_str
+% \end{macrocode}
+%
% \bigskip
% |\NiceMatrixOptions| is the command of the \pkg{nicematrix} package to fix
% options at the document level. The scope of these specifications is the
@@ -3064,15 +3070,19 @@ c & c & b & a & e
%
% \begin{macrocode}
\keys_define:nn { NiceMatrix / NiceMatrix }
- { unknown .code:n = \@@_error:n { Unknown~option~for~NiceMatrix } }
+ {
+ last-col .code:n = \tl_if_empty:nTF {#1}
+ { \@@_error:n { last-col~empty~for~NiceMatrix } }
+ { \int_set:Nn \l_@@_last_col_int { #1 } } ,
+ unknown .code:n = \@@_error:n { Unknown~option~for~NiceMatrix }
+ }
% \end{macrocode}
%
%
-% \bigskip
%
% \bigskip
-% We finalise the definition of the set of keys
-% ``|NiceMatrix / NiceArray|'' with the options specific to |{NiceArray}|.
+% We finalise the definition of the set of keys ``|NiceMatrix / NiceArray|''
+% with the options specific to |{NiceArray}|.
%
% \begin{macrocode}
\keys_define:nn { NiceMatrix / NiceArray }
@@ -3086,11 +3096,15 @@ c & c & b & a & e
c .code:n = \str_set:Nn \l_@@_pos_env_str c ,
t .code:n = \str_set:Nn \l_@@_pos_env_str t ,
b .code:n = \str_set:Nn \l_@@_pos_env_str b ,
- first-col .code:n = \int_zero:N \l_@@_first_col_int ,
- last-col .bool_set:N = \l_@@_last_col_bool ,
- first-row .code:n = \int_zero:N \l_@@_first_row_int ,
- last-row .int_set:N = \l_@@_last_row_int ,
- last-row .default:n = -1 ,
+% \end{macrocode}
+%
+% In the environments |{NiceArray}| and its variants, the option |last-col| must
+% be used without value because the number of columns of the array can be read
+% in the preamble of the array.
+% \begin{macrocode}
+ last-col .code:n = \tl_if_empty:nF {#1}
+ { \@@_error:n { last-col~non~empty~for~NiceArray } }
+ \int_zero:N \l_@@_last_col_int ,
unknown .code:n = \@@_error:n { Unknown~option~for~NiceArray }
}
% \end{macrocode}
@@ -3101,16 +3115,18 @@ c & c & b & a & e
\keys_define:nn { NiceMatrix / pNiceArray }
{
first-col .code:n = \int_zero:N \l_@@_first_col_int ,
- last-col .bool_set:N = \l_@@_last_col_bool ,
+ last-col .code:n = \tl_if_empty:nF {#1}
+ { \@@_error:n { last-col~non~empty~for~NiceArray } }
+ \int_zero:N \l_@@_last_col_int ,
first-row .code:n = \int_zero:N \l_@@_first_row_int ,
last-row .int_set:N = \l_@@_last_row_int ,
last-row .default:n = -1 ,
- unknown .code:n = \@@_error:n { Unknown~option~for~pNiceArray }
+ unknown .code:n = \@@_error:n { Unknown~option~for~NiceMatrix }
}
% \end{macrocode}
%
%
-% \subsection{Code common to \{NiceArrayWithDelims\} and \{NiceMatrix\}}
+% \subsection{Important code used by \{NiceArrayWithDelims\} }
%
% The pseudo-environment |\@@_Cell:|--|\@@_end_Cell:| will be used to format the
% cells of the array. In the code, the affectations are global because this
@@ -3327,8 +3343,8 @@ c & c & b & a & e
% \interitem
% The argument of the following command |\@@_instruction_of_type:n| defined
% below is the type of the instruction (|Cdots|, |Vdots|, |Ddots|, etc.). This
-% command writes in the correspondint |\g_@@_|\textsl{type}|_lines_tl| the
-% instruction that will really draw the line after the construction of the
+% command writes in the corresponding |\g_@@_|\textsl{type}|_lines_tl| the
+% instruction which will really draw the line after the construction of the
% matrix.
%
% \medskip
@@ -3348,8 +3364,10 @@ c & c & b & a & e
% 7 & \Cdots \\
% \end{pNiceMatrix}$
%
+% \smallskip
% the content of |\g_@@_Cdots_lines_tl| will be:
%
+% \smallskip
% \begin{scope}
% \color{gray}
% \verb|\@@_draw_Cdots:nn {2}{2}|
@@ -3430,7 +3448,7 @@ c & c & b & a & e
% \begin{macrocode}
\int_compare:nNnT \g_@@_row_int > { -1 }
{
- \int_compare:nNnF \g_@@_row_int = \g_@@_last_row_int
+ \int_compare:nNnF \g_@@_row_int = \l_@@_last_row_int
{
\hrule \@height \arrayrulewidth
\skip_vertical:n { - \arrayrulewidth }
@@ -3441,14 +3459,14 @@ c & c & b & a & e
% \end{macrocode}
%
% \bigskip
-% The following code |\@@_pre_array:| is used in |{NiceArray}| and in
-% |{NiceMatrix}|. It contains code that will be executed \emph{before} the
-% construction of the array.
+% The following code |\@@_pre_array:| is used in |{NiceArrayWithDelims}|. It
+% exists as a standalone macro only for lisibility.
% \label{prearray}
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_pre_array:
- {
+ {
+ \tl_clear:N \g_@@_code_after_tl
% \end{macrocode}
% If the option |small| is used, we have to do some tuning. In particular, we
% change the value of |\arraystretch| (this parameter is used in the
@@ -3463,61 +3481,20 @@ c & c & b & a & e
}
% \end{macrocode}
%
-% If the user requires all the columns to have a width equal to the widest cell
-% of the array, we read this length in the file |.aux| (of, course, this is
-% possible only on the second run of LaTeX: on the first run, the dimension
-% |\l_@@_columns_width_dim| will be set to zero --- and the columns will have
-% their natural width). Remark that, even if the environment has a name (see
-% just below) we have to write in the |aux| file the information with the number
-% of environment because of |auto-columns-width| of |{NiceMatrixBlock}|.
-% \begin{macrocode}
- \bool_if:NT \l_@@_auto_columns_width_bool
- {
- \group_insert_after:N \@@_write_max_cell_width:
- \cs_if_free:cTF { _@@_max_cell_width_ \int_use:N \g_@@_env_int }
- { \dim_zero:N \l_@@_columns_width_dim }
- {
- \dim_set:Nx \l_@@_columns_width_dim
- { \use:c { _@@_max_cell_width _ \int_use:N \g_@@_env_int } }
- }
-% \end{macrocode}
-% If the environment has a name, we read the value of the maximal value of the
-% columns from |_@@_name_cell_width|{\ttfamily\slshape name} (the value will be
-% the correct value even if the number of the environment has changed (for
-% example because the user has created or deleted an environment before the
-% current one)).
-% \begin{macrocode}
- \str_if_empty:NF \l_@@_name_str
- {
- \cs_if_free:cF { _@@_max_cell_width_ \l_@@_name_str }
- {
- \dim_set:Nx \l_@@_columns_width_dim
- { \use:c { _@@_max_cell_width_ \l_@@_name_str } }
- }
- }
- }
-% \end{macrocode}
-% We don't want to patch any code and that's why some code is executed in a
-% |\group_insert_after:N|. In particular, in this |\group_insert_after:N|, we
-% will have to know the value of some parameters like |\l_@@_extra_nodes_bool|.
-% That's why we transit via a global version for some variables.
+%
+% \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|).
+%
% \begin{macrocode}
\bool_gset_eq:NN \g_@@_extra_nodes_bool \l_@@_extra_nodes_bool
- \dim_gset_eq:NN \g_@@_left_margin_dim \l_@@_left_margin_dim
- \dim_gset_eq:NN \g_@@_right_margin_dim \l_@@_right_margin_dim
- \dim_gset_eq:NN \g_@@_extra_right_margin_dim \l_@@_extra_right_margin_dim
- \int_gset_eq:NN \g_@@_last_row_int \l_@@_last_row_int
- \tl_gset_eq:NN \g_@@_name_str \l_@@_name_str
- \int_gset_eq:NN \g_@@_first_row_int \l_@@_first_row_int
- \int_gset_eq:NN \g_@@_first_col_int \l_@@_first_col_int
- \bool_gset_eq:NN \g_@@_NiceArray_bool \l_@@_NiceArray_bool
- \bool_gset_eq:NN \g_@@_last_row_without_value_bool
- \l_@@_last_row_without_value_bool
- \bool_gset_eq:NN \g_@@_small_bool \l_@@_small_bool
% \end{macrocode}
+%
+% \bigskip
% The environment |{array}| uses internally the command |\ialign|. We change the
% definition of |\ialign| for several reasons. In particular, |\ialign| sets
-% |\everycr| to |{ }|. However, we have to change the value of |\everycr|.
+% |\everycr| to |{ }| and we \emph{need} to have to change the value of |\everycr|.
% \begin{macrocode}
\cs_set:Npn \ialign
{
@@ -3532,6 +3509,7 @@ c & c & b & a & e
{ \everycr { \@@_everycr: } }
\tabskip = \c_zero_skip
% \end{macrocode}
+%
% The box |\@arstrutbox| is a box constructed in the beginning of the
% environment |{array}|. The construction of that box takes into account the
% current values of |\arraystretch|\footnote{The option |small| of
@@ -3575,24 +3553,10 @@ c & c & b & a & e
% We define the new column types |L|, |C| and |R| that must be used instead of
% |l|, |c| and |r| in the preamble of |{NiceArray}|.
% \begin{macrocode}
- \dim_compare:nNnTF \l_@@_columns_width_dim = \c_zero_dim
- {
- \newcolumntype L { > \@@_Cell: l < \@@_end_Cell: }
- \newcolumntype C { > \@@_Cell: c < \@@_end_Cell: }
- \newcolumntype R { > \@@_Cell: r < \@@_end_Cell: }
- }
-% \end{macrocode}
-% If there is an option that specify that all the columns must have the same
-% width, the column types~|L|, |C| and~|R| are in fact defined upon the column
-% type~|w| of \pkg{array} which is, in fact, redefined below.
-% \begin{macrocode}
- {
- \newcolumntype L { w l { \dim_use:N \l_@@_columns_width_dim } }
- \newcolumntype C { w c { \dim_use:N \l_@@_columns_width_dim } }
- \newcolumntype R { w r { \dim_use:N \l_@@_columns_width_dim } }
- }
-% \end{macrocode}
-%
+ \newcolumntype L { > \@@_Cell: l < \@@_end_Cell: }
+ \newcolumntype C { > \@@_Cell: c < \@@_end_Cell: }
+ \newcolumntype R { > \@@_Cell: r < \@@_end_Cell: }
+% \end{macrocode}
%
% \begin{macrocode}
\cs_set_eq:NN \Ldots \@@_Ldots
@@ -3759,14 +3723,6 @@ c & c & b & a & e
\cs_if_exist:NT \tikz@library@external@loaded
{ \tikzset { external / export = false } }
% \end{macrocode}
-% In |{NiceArrayWithDelims}|, it would have been possible to avoid the
-% |\group_insert_after:N| and to put |\@@_after_array| in the second
-% part of the environment |{NiceArrayWithDelims}|. However, it's not possible to
-% do that in |{NiceMatrix}| (because of the option |renew-matrix|) and that's
-% why we use this technique in |{NiceArrayWithDelims}| and in |{NiceMatrix}|.
-% \begin{macrocode}
- \group_insert_after:N \@@_after_array:
-% \end{macrocode}
%
% We increment the counter |\g_@@_env_int| which counts the environments
% of the extension.
@@ -3807,7 +3763,7 @@ c & c & b & a & e
% A value based on the name is more reliable than a value based on the number of
% the environment.
% \begin{macrocode}
- \str_if_empty:NTF \g_@@_name_str
+ \str_if_empty:NTF \l_@@_name_str
{
\cs_if_exist:cT { @@_last_row_ \int_use:N \g_@@_env_int }
{
@@ -3816,10 +3772,10 @@ c & c & b & a & e
}
}
{
- \cs_if_exist:cT { @@_last_row_ \g_@@_name_str }
+ \cs_if_exist:cT { @@_last_row_ \l_@@_name_str }
{
\int_set:Nn \l_@@_last_row_int
- { \use:c { @@_last_row_ \g_@@_name_str } }
+ { \use:c { @@_last_row_ \l_@@_name_str } }
}
}
}
@@ -3833,8 +3789,8 @@ c & c & b & a & e
% \medskip
% We compute the width of the two delimiters.
% \begin{macrocode}
- \dim_zero_new:N \g_@@_left_delim_dim
- \dim_zero_new:N \g_@@_right_delim_dim
+ \dim_gzero_new:N \g_@@_left_delim_dim
+ \dim_gzero_new:N \g_@@_right_delim_dim
\bool_if:NTF \l_@@_NiceArray_bool
{
\dim_gset:Nn \g_@@_left_delim_dim { 2 \arraycolsep }
@@ -3884,7 +3840,7 @@ c & c & b & a & e
{ \tl_put_left:Nn \l_tmpa_tl { @ { } } }
}
}
- \bool_if:NTF \l_@@_last_col_bool
+ \int_compare:nNnTF \l_@@_last_col_int > { -1 }
{ \tl_put_right:NV \l_tmpa_tl \c_@@_preamble_last_col_tl }
{
\bool_if:NT \l_@@_NiceArray_bool
@@ -3911,27 +3867,99 @@ c & c & b & a & e
% \end{macrocode}
%
% \bigskip
-% We begin the second part of the environment |{NiceArrayWithDelims}|.
+% We begin the second part of the environment |{NiceArrayWithDelims}|. If all
+% the columns must have the same width (if the user has used the option
+% |columns-width| or the option |auto-column-width| of the environment
+% |{NiceMatrixBlock}|), we add a row in the array to fix the width of the
+% columns and construct the ``|col|'' nodes |nm-|\textsl{a}|-col-|\textsl{j} (these
+% nodes will be used by the horizontal open dotted lines and by the potential
+% commands |\@@_vdottedline:n|).
+%
% \begin{macrocode}
{
+ \bool_if:nT
+ {
+ ( \l_@@_auto_columns_width_bool && ! \l_@@_block_auto_columns_width_bool)
+ || \dim_compare_p:nNn \l_@@_columns_width_dim > \c_zero_dim
+ }
+ {
+ \crcr
+ \int_compare:nNnT \l_@@_first_col_int = 0 { \omit & }
+ \omit
+% \end{macrocode}
+% 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}
+ \tikz [ remember~picture , overlay ]
+ \coordinate [ name = nm - \int_use:N \g_@@_env_int - col - 0 ] ;
+% \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 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}
+ \bool_if:nTF
+ {
+ \l_@@_auto_columns_width_bool
+ && ! \l_@@_block_auto_columns_width_bool
+ }
+ {
+ \dim_gset:Nn \g_tmpa_dim
+ { \g_@@_max_cell_width_dim + 2 \arraycolsep }
+ }
+ {
+ \dim_gset:Nn \g_tmpa_dim
+ { \l_@@_columns_width_dim + 2 \arraycolsep }
+ }
+ \skip_horizontal:N \g_tmpa_dim
+% \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
+% 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 - 2 } }
+ { \prg_replicate:nn { \g_@@_col_total_int - 1 } }
+ {
+ &
+ \omit
+% \end{marocode}
+% The incrementation of the counter |\g_tmpa_int| must be done after the |\omit|
+% of the cell.
+% \begin{macrocode}
+ \int_gincr:N \g_tmpa_int
+ \skip_horizontal:N \g_tmpa_dim
+% \end{macrocode}
+% We create a ``|col|'' node on the right of the current column.
+% \begin{macrocode}
+ \tikz [ remember~picture , overlay ]
+ \coordinate
+ [
+ name = nm - \int_use:N \g_@@_env_int -
+ col - \int_use:N \g_tmpa_int
+ ] ;
+ }
+ }
\endarray
\c_math_toggle_token
- \skip_horizontal:n \g_@@_right_margin_dim
- \skip_horizontal:n \g_@@_extra_right_margin_dim
+ \skip_horizontal:n \l_@@_right_margin_dim
+ \skip_horizontal:n \l_@@_extra_right_margin_dim
\hbox_set_end:
% \end{macrocode}
%
% \bigskip
%
% \begin{macrocode}
- \int_compare:nNnT \g_@@_last_row_int > { -2 }
+ \int_compare:nNnT \l_@@_last_row_int > { -2 }
{
- \bool_if:NF \g_@@_last_row_without_value_bool
+ \bool_if:NF \l_@@_last_row_without_value_bool
{
- \int_compare:nNnF \g_@@_last_row_int = \g_@@_row_int
+ \int_compare:nNnF \l_@@_last_row_int = \g_@@_row_int
{
\@@_error:n { Wrong~last~row }
- \int_gset_eq:NN \g_@@_last_row_int \g_@@_row_int
+ \int_gset_eq:NN \l_@@_last_row_int \g_@@_row_int
}
}
}
@@ -3977,7 +4005,7 @@ c & c & b & a & e
% column'' has been constructed in an overlapping position and that we have computed
% its width in |\g_@@_width_first_col_dim|: see p.~\pageref{overlap-left}).
% \begin{macrocode}
- \int_compare:nNnT \g_@@_first_col_int = \c_zero_int
+ \int_compare:nNnT \l_@@_first_col_int = \c_zero_int
{
\skip_horizontal:n \arraycolsep
\skip_horizontal:n \g_@@_width_first_col_dim
@@ -3989,9 +4017,9 @@ c & c & b & a & e
% into account the option of position (|t|, |c| or |b|). We begin with
% |{NiceArray}|.
% \begin{macrocode}
- \bool_if:NTF \g_@@_NiceArray_bool
+ \bool_if:NTF \l_@@_NiceArray_bool
{
- \int_compare:nNnT \g_@@_first_row_int = \c_zero_int
+ \int_compare:nNnT \l_@@_first_row_int = \c_zero_int
{
\str_if_eq:VnTF \l_@@_pos_env_str { t }
{
@@ -4000,7 +4028,7 @@ c & c & b & a & e
}
}
{
- \bool_if:NT \g_@@_last_row_int
+ \int_compare:nNnT \l_@@_last_row_int > 0
{
\str_if_eq:VnT \l_@@_pos_env_str { b }
{
@@ -4059,10 +4087,12 @@ c & c & b & a & e
\skip_horizontal:n \g_@@_width_last_col_dim
\skip_horizontal:n \arraycolsep
}
+ \@@_after_array:
}
% \end{macrocode}
% This is the end of the environment |{NiceArrayWithDelims}|.
%
+%
% \interitem
% Here is the preamble for the ``first column'' (if the user uses the key |first-col|)
% \begin{macrocode}
@@ -4249,7 +4279,8 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { pNiceArray } { }
{
- \str_gset:Nn \g_@@_type_env_str { pNiceArray }
+ \str_if_empty:NT \g_@@_type_env_str
+ { \str_gset:Nn \g_@@_type_env_str { pNiceArray } }
\@@_test_if_math_mode:
\NiceArrayWithDelims ( )
}
@@ -4259,7 +4290,8 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { bNiceArray } { }
{
- \str_gset:Nn \g_@@_type_env_str { bNiceArray }
+ \str_if_empty:NT \g_@@_type_env_str
+ { \str_gset:Nn \g_@@_type_env_str { NiceArray } }
\@@_test_if_math_mode:
\NiceArrayWithDelims [ ]
}
@@ -4269,7 +4301,8 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { BNiceArray } { }
{
- \str_gset:Nn \g_@@_type_env_str { BNiceArray }
+ \str_if_empty:NT \g_@@_type_env_str
+ { \str_gset:Nn \g_@@_type_env_str { BNiceArray } }
\@@_test_if_math_mode:
\NiceArrayWithDelims \{ \}
}
@@ -4279,7 +4312,8 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { vNiceArray } { }
{
- \str_gset:Nn \g_@@_type_env_str { vNiceArray }
+ \str_if_empty:NT \g_@@_type_env_str
+ { \str_gset:Nn \g_@@_type_env_str { vNiceArray } }
\@@_test_if_math_mode:
\NiceArrayWithDelims | |
}
@@ -4289,7 +4323,8 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { VNiceArray } { }
{
- \str_gset:Nn \g_@@_type_env_str { VNiceArray }
+ \str_if_empty:NT \g_@@_type_env_str
+ { \str_gset:Nn \g_@@_type_env_str { VNiceArray } }
\@@_test_if_math_mode:
\NiceArrayWithDelims \| \|
}
@@ -4299,165 +4334,41 @@ c & c & b & a & e
% \bigskip
% \subsection{The environment \{NiceMatrix\} and its variants}
%
-% Our environment |{NiceMatrix}| must have the same second part as the
-% environment |{matrix}| of \pkg{amsmath} (because of the programmation of the
-% option |renew-matrix|). Hence, this second part is the following:
-%
-% \begin{Verbatim}
-% \endarray
-% \skip_horizontal:n { - \arraycolsep }
-% \end{Verbatim}
-%
-% That's why in the definition of |{NiceMatrix}|, we have to use |\array| and
-% not |\begin{array}|. This command |\array| is in |\@@_array:| (we have written
-% this command because of the redefinition of |\array| done in the classes
-% \cls{revtex4-1} and \cls{revtex4-2}).
-%
-% In order to execute code after the array, we use a command
-% |\group_insert_after:N|.
-%
-% \medskip
-% Here's the definition of |{NiceMatrix}|:
-% \begin{macrocode}
-\NewDocumentEnvironment { NiceMatrix } { ! O { } }
- {
- \str_if_empty:NT \g_@@_type_env_str
- { \str_gset:Nn \g_@@_type_env_str { NiceMatrix } }
- \@@_test_if_math_mode:
- \bool_if:NT \l_@@_in_env_bool { \@@_fatal:n { Yet~in~env } }
- \bool_set_true:N \l_@@_in_env_bool
-% \end{macrocode}
-% We have to deactivate the potential externalisation of Tikz because
-% \pkg{nicematrix} uses Tikz with |remember picture|.
-% \begin{macrocode}
- \cs_if_exist:NT \tikz@library@external@loaded
- { \tikzset { external / export = false } }
-% \end{macrocode}
-% The instruction for actual drawing of the dotted lines must be in a
-% |\group_insert_after:N| because the second part of the environment must be the
-% same as in |{array}| (for the option |renew-matrix|).
% \begin{macrocode}
- \group_insert_after:N \@@_after_array:
- \int_gincr:N \g_@@_env_int
- \bool_if:NF \l_@@_block_auto_columns_width_bool
- { \dim_gzero_new:N \g_@@_max_cell_width_dim }
- \keys_set:nn { NiceMatrix / NiceMatrix } { #1 }
-% \end{macrocode}
-% The macro |\@@_pre_array:| is defined above (see p.~\pageref{prearray}). It
-% is also used in |{NiceArrayWithDelims}|.
-% \begin{macrocode}
- \@@_pre_array:
- \skip_horizontal:n { - \arraycolsep }
- \skip_horizontal:n \l_@@_left_margin_dim
- \skip_horizontal:n \l_@@_extra_left_margin_dim
- \str_set:Nn \l_@@_pos_env_str c
- \bool_set_false:N \l_@@_exterior_arraycolsep_bool
- \@@_array: { * \c@MaxMatrixCols C }
- }
- {
- \endarray
- \skip_horizontal:n { - \arraycolsep }
-% \end{macrocode}
-% The two following lines are, of course, not in the second part of |{array}|,
-% but that doesn't matter because, when |renew-matrix| is used,
-% |\g_@@_right_margin_dim| and |\g_@@_extra_right_margin_dim| will be equal to $0$~pt.
-% \begin{macrocode}
- \skip_horizontal:n \g_@@_right_margin_dim
- \skip_horizontal:n \g_@@_extra_right_margin_dim
- }
-% \end{macrocode}
-%
-% \interitem
-% We create the variants of the environment |{NiceMatrix}|.
-% \begin{macrocode}
-\NewDocumentEnvironment { pNiceMatrix } { }
- {
- \str_gset:Nn \g_@@_type_env_str { pNiceMatrix }
- \@@_test_if_math_mode:
- \left( \begin{NiceMatrix}
- }
- { \end{NiceMatrix} \right) }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentEnvironment { bNiceMatrix } { }
- {
- \str_gset:Nn \g_@@_type_env_str { bNiceMatrix }
- \@@_test_if_math_mode:
- \left[ \begin{NiceMatrix}
- }
- { \end{NiceMatrix} \right] }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentEnvironment { BNiceMatrix } { }
- {
- \str_gset:Nn \g_@@_type_env_str { BNiceMatrix }
- \@@_test_if_math_mode:
- \left\{ \begin{NiceMatrix}
- }
- { \end{NiceMatrix} \right\} }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentEnvironment { vNiceMatrix } { }
- {
- \str_gset:Nn \g_@@_type_env_str { vNiceMatrix }
- \@@_test_if_math_mode:
- \left\lvert \begin{NiceMatrix}
+\cs_new_protected:Npn \@@_define_env:n #1
+ {
+ \NewDocumentEnvironment { #1 NiceMatrix } { ! O { } }
+ {
+ \str_gset:Nn \g_@@_type_env_str { #1 NiceMatrix }
+ \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 }
+ \begin { #1 NiceArray }
+ {
+ *
+ {
+ \int_compare:nNnTF \l_@@_last_col_int = { -1 }
+ \c@MaxMatrixCols
+ { \int_eval:n { \l_@@_last_col_int - 1 } }
+ }
+ C
+ }
+ }
+ { \end { #1 NiceArray } }
}
- { \end{NiceMatrix} \right\rvert }
% \end{macrocode}
%
% \begin{macrocode}
-\NewDocumentEnvironment { VNiceMatrix } { }
- {
- \str_gset:Nn \g_@@_type_env_str { VNiceMatrix }
- \@@_test_if_math_mode:
- \left\lVert \begin{NiceMatrix}
- }
- { \end{NiceMatrix} \right\rVert }
+\@@_define_env:n { }
+\@@_define_env:n p
+\@@_define_env:n b
+\@@_define_env:n B
+\@@_define_env:n v
+\@@_define_env:n V
% \end{macrocode}
%
%
% \bigskip
% \subsection{Automatic width of the cells}
%
-% For the option |columns-width=auto| (or the option |auto-columns-width|
-% of the environment |{NiceMatrixBlock}|), we want to know the maximal width of
-% the cells of the array (except the cells of the ``exterior'' column of an
-% environment of the kind of |{pNiceAccayC}|). This length can be known only
-% after the end of the construction of the array (or at the end of the
-% environment |{NiceMatrixBlock}|). That's why we store this value in the main
-% |.aux| file and it will be available in the next run. We write a dedicated
-% command for this because it will be called in a~|\group_insert_after:N|.
-% \begin{macrocode}
-\cs_new_protected:Nn \@@_write_max_cell_width:
- {
- \bool_if:NF \l_@@_block_auto_columns_width_bool
- {
- \iow_now:Nn \@mainaux \ExplSyntaxOn
- \iow_now:Nx \@mainaux
- {
- \cs_gset:cpn { @@_max_cell_width_ \int_use:N \g_@@_env_int }
- { \dim_use:N \g_@@_max_cell_width_dim }
- }
-% \end{macrocode}
-% If the environment has a name, we also create an alias named
-% |\@@_max_cell_width_|{\ttfamily\slshape name}.
-% \begin{macrocode}
- \str_if_empty:NF \g_@@_name_str
- {
- \iow_now:Nx \@mainaux
- {
- \cs_gset:cpn { @@_max_cell_width_ \g_@@_name_str }
- { \dim_use:N \g_@@_max_cell_width_dim }
- }
- }
- \iow_now:Nn \@mainaux \ExplSyntaxOff
- }
- }
-% \end{macrocode}
%
% \bigskip
% \subsection{How to know whether a cell is ``empty''}
@@ -4599,14 +4510,14 @@ c & c & b & a & e
% same principle.
% \begin{macrocode}
\int_gset_eq:NN \g_@@_row_total_int \g_@@_row_int
- \int_compare:nNnT \g_@@_last_row_int > { -1 }
+ \int_compare:nNnT \l_@@_last_row_int > { -1 }
{ \int_gsub:Nn \g_@@_row_int \c_one_int }
% \end{macrocode}
%
% In the user has used the option |last-row| without value, we write in the
% |aux| file the number of that last row for the next run.
% \begin{macrocode}
- \bool_if:NT \g_@@_last_row_without_value_bool
+ \bool_if:NT \l_@@_last_row_without_value_bool
{
\iow_now:Nn \@mainaux \ExplSyntaxOn
\iow_now:Nx \@mainaux
@@ -4619,11 +4530,11 @@ c & c & b & a & e
% because it's more reliable than a value based on the number of the
% environment.
% \begin{macrocode}
- \str_if_empty:NF \g_@@_name_str
+ \str_if_empty:NF \l_@@_name_str
{
\iow_now:Nx \@mainaux
{
- \cs_gset:cpn { @@_last_row_ \g_@@_name_str }
+ \cs_gset:cpn { @@_last_row_ \l_@@_name_str }
{ \int_use:N \g_@@_row_total_int }
}
}
@@ -4675,7 +4586,7 @@ c & c & b & a & e
% If the option |small| is used, the values |\l_@@_radius_dim| and
% |\l_@@_inter_dots_dim| (used to draw the dotted lines) are changed.
% \begin{macrocode}
- \bool_if:NT \g_@@_small_bool
+ \bool_if:NT \l_@@_small_bool
{
\dim_set:Nn \l_@@_radius_dim { 0.37 pt }
\dim_set:Nn \l_@@_inter_dots_dim { 0.25 em }
@@ -5025,8 +4936,7 @@ c & c & b & a & e
\bool_if:NTF \l_@@_initial_open_bool
{
% \end{macrocode}
-% If a |w| node exists (created when the key |columns-width| is used), we use
-% the |w| node for the extremity.
+% If a |w| node exists we use the |w| node for the extremity.
% \begin{macrocode}
\cs_if_exist:cTF
{
@@ -5405,8 +5315,9 @@ c & c & b & a & e
{
( \g_@@_x_final_dim - \g_@@_x_initial_dim ) *
\dim_ratio:nn
- { \l_@@_l_dim - \l_@@_inter_dots_dim * \l_tmpa_int } { \l_@@_l_dim * 2 } *
- \l_tmpb_int
+ { \l_@@_l_dim - \l_@@_inter_dots_dim * \l_tmpa_int }
+ { \l_@@_l_dim * 2 }
+ * \l_tmpb_int
}
% \end{macrocode}
% (In a multiplication of a dimension and an integer, the integer must always be
@@ -5714,7 +5625,7 @@ c & c & b & a & e
\cs_set:Npn \@@_dotfill:
{
% \end{macrocode}
-% If the option |small| is used, we change the space between two dots (we can't
+% If the option |small| is used, we change the space between dots (we can't
% use |\l_@@_inter_dots_dim| which will be set after the construction of the
% array). We can't put the |\bool_if:NT| in the first argument of
% |\hbox_to_wd:nn| because |\cleaders| is a special TeX primitive.
@@ -5751,7 +5662,7 @@ c & c & b & a & e
\hbox_to_wd:nn
{
\l_tmpa_dim + 2 \arraycolsep
- - \l_@@_left_margin_dim - \g_@@_right_margin_dim
+ - \l_@@_left_margin_dim - \l_@@_right_margin_dim
}
\@@_dotfill:
}
@@ -5759,8 +5670,6 @@ c & c & b & a & e
}
% \end{macrocode}
%
-%
-%
% \bigskip
% \begin{macrocode}
\cs_new_protected:Nn \@@_vdottedline:n
@@ -5795,14 +5704,8 @@ c & c & b & a & e
\dim_gset:Nn \g_@@_y_final_dim \pgf@y
\end { tikzpicture }
% \end{macrocode}
-% However, if the |w|-nodes are created in the previous column (that is if the
-% previous column was constructed explicitly or implicitly\footnote{A column is
-% constructed implicitly with the letter |w| if the option |columns-width| is
-% used or if the environment |{NiceMatrixBlock}| is used with the option
-% |auto-columns-width|.} with a letter |w|), we use the |w|-nodes to change the
-% $x$-value of the nodes in order to have the dotted lines perfectly aligned
-% when we use the environment |{NiceMatrixBlock}| with the option
-% |auto-columns-width|.
+% 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@sh@ns@nm -\int_use:N \g_@@_env_int - 1 - #1 - w }
@@ -5818,6 +5721,20 @@ c & c & b & a & e
\dim_gadd:Nn \g_@@_x_initial_dim \arraycolsep
\dim_gadd:Nn \g_@@_x_final_dim \arraycolsep
}
+% \end{macrocode}
+% However, if a node of column exists (if the array has been constructed with a
+% fixed width of column), we use it.
+% \begin{macrocode}
+ \cs_if_exist:cT
+ { pgf@sh@ns@nm -\int_use:N \g_@@_env_int - col - #1 }
+ {
+ \begin { tikzpicture } [ remember~picture ]
+ \tikz@parse@node\pgfutil@firstofone
+ ( col - #1 )
+ \dim_gset:Nn \g_@@_x_initial_dim \pgf@x
+ \dim_gset:Nn \g_@@_x_final_dim \pgf@x
+ \end { tikzpicture }
+ }
\@@_draw_tikz_line:
}
}
@@ -5938,9 +5855,17 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { NiceMatrixBlock } { ! O { } }
{
+ \int_gincr:N \g_@@_NiceMatrixBlock_int
+ \dim_zero:N \l_@@_columns_width_dim
\keys_set:nn { NiceMatrix / NiceMatrixBlock } { #1 }
- \int_zero_new:N \l_@@_first_env_block_int
- \int_set:Nn \l_@@_first_env_block_int { \g_@@_env_int + 1 }
+ \bool_if:NT \l_@@_block_auto_columns_width_bool
+ {
+ \cs_if_exist:cT { @@_max_cell_width_ \int_use:N \g_@@_NiceMatrixBlock_int }
+ {
+ \dim_set:Nx \l_@@_columns_width_dim
+ { \use:c { @@_max_cell_width _ \int_use:N \g_@@_NiceMatrixBlock_int } }
+ }
+ }
}
% \end{macrocode}
%
@@ -5954,13 +5879,11 @@ c & c & b & a & e
\bool_if:NT \l_@@_block_auto_columns_width_bool
{
\iow_now:Nn \@mainaux \ExplSyntaxOn
- \int_step_inline:nnnn \l_@@_first_env_block_int 1 \g_@@_env_int
+ \iow_now:Nx \@mainaux
{
- \iow_now:Nx \@mainaux
- {
- \cs_gset:cpn { @@ _ max _ cell _ width _ ##1 }
- { \dim_use:N \g_@@_max_cell_width_dim }
- }
+ \cs_gset:cpn
+ { @@ _ max _ cell _ width _ \int_use:N \g_@@_NiceMatrixBlock_int }
+ { \dim_use:N \g_@@_max_cell_width_dim }
}
\iow_now:Nn \@mainaux \ExplSyntaxOff
}
@@ -6002,14 +5925,14 @@ c & c & b & a & e
\cs_new_protected:Nn \@@_create_extra_nodes:
{
\begin { tikzpicture } [ remember~picture , overlay ]
- \int_step_variable:nnNn \g_@@_first_row_int \g_@@_row_total_int \@@_i:
+ \int_step_variable:nnNn \l_@@_first_row_int \g_@@_row_total_int \@@_i:
{
\dim_zero_new:c { l_@@_row_\@@_i: _min_dim }
\dim_set_eq:cN { l_@@_row_\@@_i: _min_dim } \c_max_dim
\dim_zero_new:c { l_@@_row_\@@_i: _max_dim }
\dim_set:cn { l_@@_row_\@@_i: _max_dim } { - \c_max_dim }
}
- \int_step_variable:nnNn \g_@@_first_col_int \g_@@_col_total_int \@@_j:
+ \int_step_variable:nnNn \l_@@_first_col_int \g_@@_col_total_int \@@_j:
{
\dim_zero_new:c { l_@@_column_\@@_j: _min_dim }
\dim_set_eq:cN { l_@@_column_\@@_j: _min_dim } \c_max_dim
@@ -6019,10 +5942,10 @@ c & c & b & a & e
% \end{macrocode}
% We begin the two nested loops over the rows and the columns of the array.
% \begin{macrocode}
- \int_step_variable:nnNn \g_@@_first_row_int \g_@@_row_total_int \@@_i:
+ \int_step_variable:nnNn \l_@@_first_row_int \g_@@_row_total_int \@@_i:
{
\int_step_variable:nnNn
- \g_@@_first_col_int \g_@@_col_total_int \@@_j:
+ \l_@@_first_col_int \g_@@_col_total_int \@@_j:
% \end{macrocode}
% Maybe the cell ($i$-$j$) is an implicit cell (that is to say a cell after
% implicit ampersands |&|). In this case, of course, we don't update the
@@ -6075,8 +5998,8 @@ c & c & b & a & e
% That's why the loop over the rows will start at 1 and the loop over the columns
% will stop at $|\g_@@_col_int|$ (and not |\g_@@_col_total_int|). Idem for the rows.
% \begin{macrocode}
- \int_set:Nn \g_@@_first_row_int 1
- \int_set:Nn \g_@@_first_col_int 1
+ \int_set:Nn \l_@@_first_row_int 1
+ \int_set:Nn \l_@@_first_col_int 1
% \end{macrocode}
% We have to change the values of all the dimensions
% \texttt{l_@@_row_\textsl{i}_min_dim}, \texttt{l_@@_row_\textsl{i}_max_dim},
@@ -6113,10 +6036,10 @@ c & c & b & a & e
}
\dim_sub:cn
{ l_@@_column _ 1 _ min _ dim }
- \g_@@_left_margin_dim
+ \l_@@_left_margin_dim
\dim_add:cn
{ l_@@_column _ \int_use:N \g_@@_col_int _ max _ dim }
- \g_@@_right_margin_dim
+ \l_@@_right_margin_dim
% \end{macrocode}
% Now, we can actually create the ``large nodes''.
% \begin{macrocode}
@@ -6167,9 +6090,9 @@ c & c & b & a & e
% \begin{macrocode}
\cs_new_protected:Nn \@@_create_nodes:
{
- \int_step_variable:nnNn \g_@@_first_row_int \g_@@_row_total_int \@@_i:
+ \int_step_variable:nnNn \l_@@_first_row_int \g_@@_row_total_int \@@_i:
{
- \int_step_variable:nnNn \g_@@_first_col_int \g_@@_col_total_int \@@_j:
+ \int_step_variable:nnNn \l_@@_first_col_int \g_@@_col_total_int \@@_j:
% \end{macrocode}
% We create two ponctual nodes for the extremities of a diagonal of the
% rectangular node we want to create. These nodes |(@@~south~west)| and
@@ -6196,8 +6119,8 @@ c & c & b & a & e
inner~sep = \c_zero_dim ,
name = nm - \int_use:N \g_@@_env_int - \@@_i: - \@@_j: ,
alias =
- \str_if_empty:NF \g_@@_name_str
- { \g_@@_name_str - \@@_i: - \@@_j: }
+ \str_if_empty:NF \l_@@_name_str
+ { \l_@@_name_str - \@@_i: - \@@_j: }
]
;
}
@@ -6208,7 +6131,7 @@ c & c & b & a & e
% |\multicolumn{|$n$|}{...}{...}| with $n$>1 was issued and in
% |\g_@@_multicolumn_sizes_seq| the correspondant values of $n$.
% \begin{macrocode}
- \@@_seq_mapthread_function:NNN
+ \seq_mapthread_function:NNN
\g_@@_multicolumn_cells_seq
\g_@@_multicolumn_sizes_seq
\@@_node_for_multicolumn:nn
@@ -6249,7 +6172,7 @@ c & c & b & a & e
inner~sep = \c_zero_dim ,
name = nm - \int_use:N \g_@@_env_int - \@@_i: - \@@_j: ,
alias =
- \str_if_empty:NF \g_@@_name_str { \g_@@_name_str - \@@_i: - \@@_j: }
+ \str_if_empty:NF \l_@@_name_str { \l_@@_name_str - \@@_i: - \@@_j: }
]
;
}
@@ -6385,6 +6308,29 @@ c & c & b & a & e
}
% \end{macrocode}
%
+% % \subsection{How to draw the dotted lines transparently}
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_renew_matrix:
+ {
+ \RenewDocumentEnvironment { pmatrix } { }
+ { \pNiceMatrix }
+ { \endpNiceMatrix }
+ \RenewDocumentEnvironment { vmatrix } { }
+ { \vNiceMatrix }
+ { \endvNiceMatrix }
+ \RenewDocumentEnvironment { Vmatrix } { }
+ { \VNiceMatrix }
+ { \endVNiceMatrix }
+ \RenewDocumentEnvironment { bmatrix } { }
+ { \bNiceMatrix }
+ { \endbNiceMatrix }
+ \RenewDocumentEnvironment { Bmatrix } { }
+ { \BNiceMatrix }
+ { \endBNiceMatrix }
+ }
+% \end{macrocode}
+%
+%
%
% \subsection{We process the options}
%
@@ -6398,12 +6344,41 @@ c & c & b & a & e
% Of course, the command |\NiceMatrix| must be defined before such an
% instruction is executed.
% \begin{macrocode}
-\ProcessKeysOptions { NiceMatrix }
+\keys_define:nn { NiceMatrix / Package }
+ {
+ renew-dots .bool_set:N = \l_@@_renew_dots_bool ,
+ renew-dots .value_forbidden:n = true ,
+ renew-matrix .code:n = \@@_renew_matrix: ,
+ renew-matrix .value_forbidden:n = true ,
+ transparent .meta:n = { renew-dots , renew-matrix } ,
+ transparent .value_forbidden:n = true,
+ }
+\ProcessKeysOptions { NiceMatrix / Package }
% \end{macrocode}
%
% \subsection{Error messages of the package}
%
% \begin{macrocode}
+\@@_msg_new:nn { last-col~non~empty~for~NiceArray }
+ {
+ In~the~environment~\{\g_@@_type_env_str\},~you~must~use~the~option~
+ 'last-col'~without~value~(the~number~of~columns~is~known~by~the~
+ preamble~of~the~environment).\\
+ However,~you~can~go~on~for~this~time~
+ (the~value~'\l_keys_value_tl'~will~be~ignored).
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { last-col~empty~for~NiceMatrix }
+ {
+ In~the~environment~\{\g_@@_type_env_str\}~you~can't~use~the~option~
+ 'last-col'~without~value.~You~must~give~the~number~of~that~last~column.\\
+ If~you~go~on~this~option~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { Block~too~large }
{
You~try~to~draw~a~block~in~the~cell~#1-#2~of~your~matrix~but~the~matrix~is~
@@ -6425,7 +6400,7 @@ c & c & b & a & e
% \begin{macrocode}
\@@_msg_new:nn { Wrong~last~row }
{
- You~have~used~'last-row=\int_use:N \g_@@_last_row_int'~but~your~environment~
+ 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\
will~be~used~for~last~row.~You~can~avoid~this~problem~by~using~'last-row'~
@@ -6502,7 +6477,7 @@ c & c & b & a & e
renew-dots,~
renew-matrix,~
right-margin,~
- small,~
+ small~
and~transparent
}
% \end{macrocode}
@@ -6528,50 +6503,28 @@ c & c & b & a & e
create-extra-nodes,~
extra-left-margin,~
extra-right-margin,~
+ first-col,~
+ first-row,~
hlines,~
+ last-col,~
+ last-row,~
left-margin,~
name,~
nullify-dots,~
parallelize-diags,~
renew-dots,~
right-margin,~
- small,~
+ small~
and~t.
}
% \end{macrocode}
%
-%
-% \begin{macrocode}
-\@@_msg_new:nnn { Unknown~option~for~NiceMatrix }
- {
- The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~
- \{NiceMatrix\}~and~its~variants. \\
- If~you~go~on,~it~will~be~ignored. \\
- For~a~list~of~the~available~options,~type~H~<return>.
- }
- {
- The~available~options~are~(in~alphabetic~order):~
- code-after,~
- columns-width,~
- create-extra-nodes,~
- extra-left-margin,~
- extra-right-margin,~
- hlines,~
- left-margin,~
- name,~
- nullify-dots,~
- parallelize-diags,~
- renew-dots,~
- right-margin~
- and~small.
- }
-% \end{macrocode}
-%
% \medskip
-% Despite its name, the following set of keys will be used for |{pNiceArray}|
-% but also |{vNiceArray}|, |{VNiceArray}|, etc. but not for |{NiceArray}|.
+% This error message is used for the set of keys |NiceMatrix/NiceMatrix| and
+% |NiceMatrix/pNiceArray| (but not by |NiceMatrix/NiceArray| (because, for this
+% set of keys, there is also the options |t|, |c| and~|b|).
% \begin{macrocode}
-\@@_msg_new:nnn { Unknown~option~for~pNiceArray }
+\@@_msg_new:nnn { Unknown~option~for~NiceMatrix }
{
The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~
\{\g_@@_type_env_str\}. \\
@@ -6591,9 +6544,9 @@ c & c & b & a & e
extra-right-margin,~
first-col,~
first-row,~
+ hlines,~
last-col,~
last-row,~
- hlines,~
left-margin,~
name,~
nullify-dots,~
@@ -6646,54 +6599,7 @@ c & c & b & a & e
first~position~of~the~preamble~of~the~environment~\{\g_@@_type_env_str\}. \\
If~you~go~on,~this~dotted~line~will~be~ignored.
}
-% \end{macrocode}
-%
-%
-% \subsection{Code for \textbackslash seq_mapthread_function:NNN}
-%
-% In |\@@_create_nodes:| (used twice in |\@@_create_extra_nodes:| to create the
-% ``medium nodes'' and ``large nodes''), we want to use
-% |\seq_mapthread_function:NNN| which is in \pkg{l3candidates}). For security,
-% we define a function |\@@_seq_mapthread_function:NNN|. We will delete the
-% following code when |\seq_mapthread_function:NNN| will be in \pkg{l3seq}.
-% \begin{macrocode}
-\cs_new:Npn \@@_seq_mapthread_function:NNN #1 #2 #3
- {
- \group_begin:
-% \end{macrocode}
-% In the group, we can use |\seq_pop:NN| safely.
-% \begin{macrocode}
- \int_step_inline:nn { \seq_count:N #1 }
- {
- \seq_pop:NN #1 \l_tmpa_tl
- \seq_pop:NN #2 \l_tmpb_tl
- \exp_args:NVV #3 \l_tmpa_tl \l_tmpb_tl
- }
- \group_end:
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_renew_matrix:
- {
- \RenewDocumentEnvironment { pmatrix } { }
- { \pNiceMatrix }
- { \endpNiceMatrix }
- \RenewDocumentEnvironment { vmatrix } { }
- { \vNiceMatrix }
- { \endvNiceMatrix }
- \RenewDocumentEnvironment { Vmatrix } { }
- { \VNiceMatrix }
- { \endVNiceMatrix }
- \RenewDocumentEnvironment { bmatrix } { }
- { \bNiceMatrix }
- { \endbNiceMatrix }
- \RenewDocumentEnvironment { Bmatrix } { }
- { \BNiceMatrix }
- { \endBNiceMatrix }
- }
-% \end{macrocode}
-%
+% \end{macrocode}
%
%
% \subsection{Obsolete environments}
@@ -6701,7 +6607,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { pNiceArrayC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\pNiceArray
}
{ \endpNiceArray }
@@ -6710,7 +6616,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { bNiceArrayC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\bNiceArray
}
{ \endbNiceArray }
@@ -6719,7 +6625,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { BNiceArrayC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\BNiceArray
}
{ \endBNiceArray }
@@ -6728,7 +6634,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { vNiceArrayC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\vNiceArray
}
{ \endvNiceArray }
@@ -6737,7 +6643,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { VNiceArrayC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\VNiceArray
}
{ \endVNiceArray }
@@ -6746,7 +6652,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { pNiceArrayRC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\pNiceArray
}
@@ -6756,7 +6662,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { bNiceArrayRC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\bNiceArray
}
@@ -6766,7 +6672,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { BNiceArrayRC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\BNiceArray
}
@@ -6786,7 +6692,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { VNiceArrayRC } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\VNiceArray
}
@@ -6796,7 +6702,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { NiceArrayCwithDelims } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\NiceArrayWithDelims
}
{ \endNiceArrayWithDelims }
@@ -6805,7 +6711,7 @@ c & c & b & a & e
% \begin{macrocode}
\NewDocumentEnvironment { NiceArrayRCwithDelims } { }
{
- \bool_set_true:N \l_@@_last_col_bool
+ \int_set:Nn \l_@@_last_col_int \c_zero_dim
\int_set:Nn \l_@@_first_row_int \c_zero_int
\NiceArrayWithDelims
}
@@ -6972,7 +6878,20 @@ c & c & b & a & e
%
% Option |small|.
%
+% \subsection*{Changes between version 3.2 and 3.3}
+%
+% The options |first-row|, |last-row|, |first-col| and |last-col| are now
+% available in the environments |{NiceMatrix}|, |{pNiceMatrix}|,
+% |{bNiceMatrix}|, etc.
+%
+% The option |columns-width=auto| doesn't need any more a second compilation.
+%
+% The options |renew-dots|, |renew-matrix| and |transparent| are now available
+% as package options (as said in the documentation).
%
+% The previous version of \pkg{nicematrix} was incompatible with a recent
+% version of \pkg{expl3} (released 2019/09/30). This version is compatible.
+%
% \PrintIndex
%
% \tableofcontents
@@ -6983,3 +6902,4 @@ c & c & b & a & e
% TeX-fold-preserve-comments: nil
% fill-column: 80
% End:
+
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 690f05bce7..b635371dec 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/macros/latex/contrib/practicalreports/practicalreports.pdf b/macros/latex/contrib/practicalreports/practicalreports.pdf
index 70784e70d8..6aee7762b1 100644
--- a/macros/latex/contrib/practicalreports/practicalreports.pdf
+++ b/macros/latex/contrib/practicalreports/practicalreports.pdf
Binary files differ
diff --git a/macros/latex/contrib/practicalreports/practicalreports.sty b/macros/latex/contrib/practicalreports/practicalreports.sty
index 174892e902..d574797bcf 100644
--- a/macros/latex/contrib/practicalreports/practicalreports.sty
+++ b/macros/latex/contrib/practicalreports/practicalreports.sty
@@ -2,8 +2,8 @@
%%License: LPPL 1.3c
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{practicalreports}[26/09/2019 v2.0.1 Practical Report Package]
-\RequirePackage{mathtools, array, longtable, scrextend, float, fancyhdr, lastpage, tikzducks}
+\ProvidesPackage{practicalreports}[01/10/2019 v2.0.2 Practical Report Package]
+\RequirePackage{mathtools, array, longtable, scrextend, float, fancyhdr, lastpage, tikzducks, pdfpages, pgffor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -187,8 +187,13 @@ tshirt=brown!50!black, jacket=brown!30!gray, speech={of},bubblecolour=cyan!20!wh
\end{tikzpicture}
}
}
-
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Make sure yor filenames are all one word, this can include underscores and each report is separated by a comma.
+\newcommand{\joinreports}[1]{
+\foreach \report in {#1} {
+\includepdfmerge{\report, -}
+}
} \ No newline at end of file
diff --git a/macros/latex/contrib/practicalreports/practicalreports.tex b/macros/latex/contrib/practicalreports/practicalreports.tex
index f16cc4299b..de97a6c2f8 100644
--- a/macros/latex/contrib/practicalreports/practicalreports.tex
+++ b/macros/latex/contrib/practicalreports/practicalreports.tex
@@ -14,8 +14,8 @@
\vspace*{\fill}
\begin{center}
{\Huge Practical Reports Documentation}\\[0.5cm]
-{\Large Version: 2.0.1}\\[0.4cm]
-{\Large Date: $26^{th}$ of September 2019}\\[0.2cm]
+{\Large Version: 2.0.2}\\[0.4cm]
+{\Large Date: $1^{st}$ of October 2019}\\[0.2cm]
{\small Author: Justin Cawood}
\end{center}
\vspace*{\fill}
@@ -312,6 +312,15 @@ Tables can be shifted.
The $\backslash$goodfoot macro will do the footer for you in the form "Page x of n". The page mus be set to fancy first though using the $\backslash$setpagefancy macro.
+\subsection{Join Multiple Reports}
+To combine multiple pdf files together into one single pdf file use the macro $\backslash$joinreports\{\}. You don't need the file extension just list all the pdf files that you wish to join as follows.
+
+$\backslash$joinreports\{pdf\_1, pdf\_2, pdf\_3, pdf\_4, .....\}.
+
+This macro should be used in a new tex file because the pdf files will be joined as one file with the name of the tex file this macro is used in.
+
+The pdf files being joined must be in the same directory as the tex file this macro is used in.
+
\section{Appendices}
\subsection{Appendix A - List of Figures}
diff --git a/macros/latex/contrib/scratch3/README b/macros/latex/contrib/scratch3/README
index ce8855fe01..889216c0cb 100644
--- a/macros/latex/contrib/scratch3/README
+++ b/macros/latex/contrib/scratch3/README
@@ -3,9 +3,9 @@ ___________________________________
L'extension
scratch3
- v0.13
+ v0.14
- 1er juillet 2019
+ 1er octobre 2019
___________________________________
Author : Christian Tellechea
diff --git a/macros/latex/contrib/scratch3/scratch3-fr.pdf b/macros/latex/contrib/scratch3/scratch3-fr.pdf
index 31b8a5fc74..aea57a0510 100644
--- a/macros/latex/contrib/scratch3/scratch3-fr.pdf
+++ b/macros/latex/contrib/scratch3/scratch3-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/scratch3/scratch3-fr.tex b/macros/latex/contrib/scratch3/scratch3-fr.tex
index 0717232b53..e6c4786f03 100644
--- a/macros/latex/contrib/scratch3/scratch3-fr.tex
+++ b/macros/latex/contrib/scratch3/scratch3-fr.tex
@@ -320,6 +320,14 @@ Un booléen : \boollist{liste \selectmenu{malist} contient \ovalnum{foobar}}.\par
Un autre : \booloperator{\booloperator{\ovalvariable{varx} > \ovalnum{1}}
et \booloperator{\ovalvariable{varx} < \ovalnum{5}}}./
+La macro \verb|\boolempty[<dimension>]| permet de tracer un losange vide. L'argument optionnel est une \verb|<dimension>| qui vaut \verb|2em| par défaut.
+
+\exemple/\begin{scratch}
+ \blockifelse{si \boolempty[3em] alors}
+ {\blocklook{dire \ovalnum{le test est vrai}}}
+ {\blocklook{dire \ovalnum{le test est faux}}}
+\end{scratch}/
+
\section{Les blocs de fin}
Ces blocs sont susceptibles de clore un algorithme et n'ont donc pas d'encoche mâle dans leur partie basse. Ils ne peuvent être que du type \suffixe{control} et sont dessinés avec la macro \verb|\blockstop{<texte>}|
@@ -437,6 +445,12 @@ Représente la largeur des encoches. La valeur est ramenée si nécessaire dans l'i
\cleval{scale}{coefficient}\label{cle-scale}
Représente l'échelle à laquelle est représenté le dessin. La valeur est ramenée si nécessaire dans l'intervalle [0.2 ; 5].
+Les blocs ovales ou losanges, qui peuvent se trouver à l'extérieur de l'environnement scrtach, sont affectés par la valeur de \texttt{scale} :
+
+\exemple/\setscratch{scale=1}Échelle 1 : \ovalvariable{var} et \booloperator{\ovalmove{abscisse x} < \ovalnum{7}}\par
+Échelle 0.75 :\setscratch{scale=.75} : \ovalvariable{var} et \booloperator{\ovalmove{abscisse x} < \ovalnum{7}}\par
+Échelle 1.25 :\setscratch{scale=1.25} : \ovalvariable{var} et \booloperator{\ovalmove{abscisse x} < \ovalnum{7}}/
+
\cleval{init arcangle}{angle}
Représente l'angle avec l'horizontale de l'arc de cercle tracé dans la partie haute des blocs de départ. La valeur est ramenée si nécessaire dans l'intervalle [20 ; 40].
@@ -579,7 +593,7 @@ centré
\end{scratch}/
\section{Mot de la fin}
-Le code de cette extension démontre mon immense ignorance de ti\textit kz/pgf et les méthodes de programmation qui lui sont propres que, décidément, je ne comprendrai jamais! C'est sans doute le trop grand éloignement avec la logique de \TeX{} et la documentation de ti\textit kz/pgf, aussi indigeste qu'illisible, qui explique cette incompatibilité d'humeur et mon désintérêt à l'égard de ti\textit kz. Toujours est-il que cette extension fonctionne, avec une lenteur certaine que j'attribue à ma programmation hasardeuse ainsi qu'à la lenteur intrinsèque de ti\textit kz.
+Le code de cette extension démontre mon immense ignorance de ti\textit kz/pgf et les méthodes de programmation qui lui sont propres que décidément, je ne comprendrai jamais! C'est sans doute le trop grand éloignement avec la logique de \TeX{} et la documentation de ti\textit kz/pgf, aussi indigeste qu'illisible, qui explique cette incompatibilité d'humeur et mon désintérêt à l'égard de ti\textit kz. Toujours est-il que cette extension fonctionne, avec une lenteur certaine que j'attribue autant à ma programmation hasardeuse qu'à la lenteur intrinsèque de ti\textit kz.
Toute remarque, remontée de bug ---~je n'ose pas dire amélioration du code~---, demande d'implémentation de fonctionnalité est bien évidemment bienvenue; j'invite les utilisateurs à m'en faire part \emph{via} email à \texttt{unbonpetit@netc.fr}
@@ -595,7 +609,13 @@ Toute remarque, remontée de bug ---~je n'ose pas dire amélioration du code~---,
>Correction d'un bug dans \verb|\ovalnum|;
>Correction d'un bug dans \verb|\scr_ovalbox|.
\end{version}
-\begin{version}{0.12}{01/07/2019}
+\begin{version}{0.13}{01/07/2019}
>Mise en place de \verb|\relax| pour éviter le bug de \verb|\lastkern| avec Xe\LaTeX.
\end{version}
+\begin{version}{0.14}{01/10/2019}
+ >Gestion de l'échelle (via clé "\texttt{scale}") améliorée.
+ >Hors de l'environnement, les ovales et les losanges sont affectés par la clé "\texttt{scale}" si elle est spécifiée via \verb|\setscratch|.
+ >Erreur de tracé corrigée dans \verb|\scr_blockloop|.
+ >Nouveau losange vide : \verb|\boolempty[<dimension>]|.
+\end{version}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/scratch3/scratch3.sty b/macros/latex/contrib/scratch3/scratch3.sty
index dfcacb8957..e23d7ca7ec 100644
--- a/macros/latex/contrib/scratch3/scratch3.sty
+++ b/macros/latex/contrib/scratch3/scratch3.sty
@@ -1,12 +1,13 @@
+% !BIB TS-program =
% !TeX encoding = ISO-8859-1
% Ce fichier contient le code de l'extension "scratch3"
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
\def\scrname{ scratch3 }%
-\def\scrver { 0.13 }%
+\def\scrver { 0.14 }%
% %
-\def\scrdate{ 2019/07/01 }%
+\def\scrdate{ 2019/10/01 }%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -19,7 +20,7 @@
% Repository : https://framagit.org/unbonpetit/scratch3/tree/master
% Copyright : Christian Tellechea 2019
% Licence : Released under the LaTeX Project Public License v1.3c
-% or later, see http://www.latex-project.org/lppl.txt
+% or later, see http://www.latex-project.org/lppl.txtf
% Files : 1) scratch3.sty
% 2) scratch3-fr.tex
% 3) scratch3-fr.pdf
@@ -70,7 +71,12 @@
num start = 1 ,% numéro de départ
baseline = 1 ,% alignement sur le 1er bloc (en partant du haut)
}
-\newcommand*\numblock[1]{\color{black}\footnotesize\bfseries#1}
+\newcommand*\numblock[1]{%
+ \color{black}%
+ \footnotesize
+ \bfseries
+ #1%
+}
\newcommand*\resetscratch{\csname skv_[\scrname]\endcsname\scr_setcolors}
\newcommand*\setscratch[1]{\setKV[\scrname]{#1}\scr_setcolors}
\newcommand*\setdefaultscratch[1]{\setKVdefault[\scrname]{#1}\scr_setcolors}
@@ -111,6 +117,8 @@
\fi
\fi
}
+\newif\if_inpicture
+\_inpicturefalse
\newcount\scr_loopnest
\newcount\scr_blocknum
\newbox \scr_box
@@ -135,6 +143,7 @@
\kern.6em
\fi
\useKV[\scrname]{pre text}%
+ \_inpicturetrue
#2%
\scr_blockstrut
}%
@@ -147,16 +156,27 @@
\edef\scr_boxht{\the\ht\scr_box}%
\edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
\draw[
- draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{#1dd}},
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray!\scr_contrast!black}
+ {#1dd}
+ },
line width=\scr_linewidth,
- rounded corners=0.4*\scr_ex,
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{#1}},
+ rounded corners=0.4*\scr_ex*\scr_scale,
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray}
+ {none}%
+ }
+ {#1}%
+ },
yshift=\scr_yoffset,
xshift=\scr_xoffset
]
(0,0)--++(0.66666*\scr_notch,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666,0)% ligne sup
--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est
- --++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-0.66666*\scr_notch,0)% logne sud
+ --++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-0.66666*\scr_notch,0)% ligne sud
--cycle;
\node[
at=(origin),
@@ -164,7 +184,11 @@
anchor=base west,
xshift=\scr_xoffset+\scr_xsep,
yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(txt\number\scr_blocknum)
{\scr_currentstuff};
@@ -205,10 +229,21 @@
\edef\scr_boxht{\the\ht\scr_box}%
\edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
\draw[
- draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{\scr_current_blockcolor dd}},
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray!\scr_contrast!black}
+ {\scr_current_blockcolor dd}%
+ },
line width=\scr_linewidth,
- rounded corners=0.4*\scr_ex,
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ rounded corners=0.4*\scr_ex*\scr_scale,
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray}
+ {none}%
+ }
+ {\scr_current_blockcolor}%
+ },
yshift=\scr_yoffset,
xshift=\scr_xoffset
]
@@ -220,7 +255,11 @@
anchor=base west,
xshift=\scr_xoffset+\scr_xsep,
yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(txt\number\scr_blocknum)
{\scr_currentstuff};
@@ -247,6 +286,7 @@
\def\scr_current_blockcolor{#1}%
\def\scr_currentstuff{%
\useKV[\scrname]{pre text}%
+ \_inpicturetrue
#2%
\scr_blockstrut
}%
@@ -259,10 +299,21 @@
\edef\scr_boxht{\the\ht\scr_box}%
\edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
\draw[
- draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{#1dd}},
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray!\scr_contrast!black}
+ {#1dd}%
+ },
line width=\scr_linewidth,
- rounded corners=0.4*\scr_ex,
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ rounded corners=0.4*\scr_ex*\scr_scale,
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray}
+ {none}%
+ }
+ {\scr_current_blockcolor}%
+ },
yshift=\scr_yoffset,
xshift=\scr_xoffset
]
@@ -275,7 +326,11 @@
anchor=base west,
xshift=\scr_xoffset+\scr_xsep,
yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(txt\number\scr_blocknum)
{\scr_currentstuff};
@@ -301,6 +356,7 @@
\newcommand*\initmoreblocks[1]{%
\def\scr_currentstuff{%
\useKV[\scrname]{pre text}%
+ \_inpicturetrue
#1%
\scr_blockstrut
}%
@@ -314,14 +370,25 @@
\edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
\def\scr_current_blockcolor{scrmoreblocks}%
\draw[
- draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{\scr_current_blockcolor dd}},
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray!\scr_contrast!black}
+ {\scr_current_blockcolor dd}%
+ },
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray}
+ {none}%
+ }
+ {\scr_current_blockcolor}%
+ },
yshift=\scr_yoffset,
xshift=\scr_xoffset,
- rounded corners=0.4*\scr_ex
+ rounded corners=0.4*\scr_ex*\scr_scale
]
- (0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)[rounded corners=2*\scr_ex]--(0,0)--(\scr_boxwd+2*\scr_xsep,0)% ligne sup
- [rounded corners=0.4*\scr_ex]--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est
+ (0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)[rounded corners=2*\scr_ex*\scr_scale]--(0,0)--(\scr_boxwd+2*\scr_xsep,0)% ligne sup
+ [rounded corners=0.4*\scr_ex*\scr_scale]--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est
--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-.66666*\scr_notch,0)% ligne sud
--cycle
node[
@@ -330,7 +397,11 @@
anchor=base west,
xshift=\scr_xoffset+\scr_xsep,
yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(txt\number\scr_blocknum)
{\scr_currentstuff};
@@ -370,6 +441,7 @@
\setbox\scr_box\hbox{%
\pgfinterruptpicture
\useKV[\scrname]{pre text}%
+ \_inpicturetrue
#1%
\scr_blockstrut
\endpgfinterruptpicture
@@ -435,8 +507,15 @@
\draw[
draw=\scr_current_linecolor,
line width=\scr_linewidth,
- rounded corners=0.4*\scr_ex,
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}}
+ rounded corners=0.4*\scr_ex*\scr_scale,
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray}
+ {none}%
+ }
+ {\scr_current_blockcolor}%
+ }
]
(\csname toploopx\number\scr_loopnest\endcsname,\csname toploopy\number\scr_loopnest\endcsname)--++(0.66666*\scr_notch,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666,0)% ligne sup
--++(0,-\csname scr_txtlooptotht\number\scr_loopnest\endcsname-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est "|"
@@ -463,7 +542,7 @@
\else
--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-.66666*\scr_notch,0)% ligne Sud "\--\__/---------"
\fi
- --(\csname toploopx\number\scr_loopnest\endcsname,\csname toploopy\number\scr_loopnest\endcsname-\scr_corner)--cycle;% remontée tout en haut et cycle
+ --cycle;% remontée tout en haut et cycle ## bugfix 0.14
\advance\scr_xoffset\dimexpr-\scr_loopblockwidth\relax
\csname scr_numblockif\number\scr_loopnest\endcsname% numérote ou pas le texte dans le bandeau du haut
\node[
@@ -472,10 +551,19 @@
anchor=base west,
xshift=\csname toploopx\number\scr_loopnest\endcsname+\scr_xsep,
yshift=\csname toploopy\number\scr_loopnest\endcsname-\csname scr_txtloopht\number\scr_loopnest\endcsname-\scr_corner-\scr_ysepsup,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(txt\csname blocnum\number\scr_loopnest\endcsname)
- {\useKV[\scrname]{pre text}#1\scr_blockstrut};
+ {%
+ \useKV[\scrname]{pre text}%
+ \_inpicturetrue
+ #1%
+ \scr_blockstrut
+ };
\ifcat\relax\detokenize{#3}\relax\else
\node[
at=(origin),
@@ -483,10 +571,17 @@
anchor=base west,
xshift=\csname toploopx\number\scr_loopnest\endcsname+\scr_xsep,
yshift=\csname bottomify\number\scr_loopnest\endcsname-\scr_loopblockheight-\scr_corner,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(txt\csname blocelsenum\number\scr_loopnest\endcsname)
- {\useKV[\scrname]{pre text}\useKV[\scrname]{else word}};
+ {%
+ \useKV[\scrname]{pre text}%
+ \useKV[\scrname]{else word}%
+ };
\csname scr_numblockelse\number\scr_loopnest\endcsname% numérotation bloc else ou pas
\fi
\ifnum#5=1 %fleche
@@ -495,7 +590,7 @@
\scr_arrowcolor,
line width=1.5pt,
-{Triangle[length=\scr_scale*1.25ex,width=\scr_scale*1.5ex]},
- rounded corners=1pt
+ rounded corners=1pt*\scr_scale
]
(\scr_xoffset+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname-\scr_ex*3.5+1pt,\scr_yoffset+\scr_linewidth+\scr_ysepinf-1.25pt)--++(\scr_loopblockheight,0)--++(0,\scr_loopblockheight+\scr_corner*0.5);
\edef\scr_arrowcolor{\ifboolKV[\scrname]{print}{scr_flaggray}{white}}% colmeur de la flèche
@@ -503,7 +598,7 @@
\scr_arrowcolor,
line width=\scr_scale*1.5pt,
-{Triangle[length=\scr_scale*1.25ex,width=\scr_scale*1.5ex]},
- rounded corners=1pt
+ rounded corners=1pt*\scr_scale
]
(\scr_xoffset+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname-\scr_ex*3.5,\scr_yoffset+\scr_linewidth+\scr_ysepinf)--++(\scr_loopblockheight,0)--++(0,\scr_loopblockheight+\scr_corner*0.5);
\fi
@@ -525,24 +620,45 @@
\scr_normalizedec\scr_contrast contrast[0,100]%
\edef\scr_contrast{\number\numexpr100-\scr_contrast}%
\fi
+ \if_inpicture\def\scr_scale{1}\else\scr_normalizedec\scr_scale scale[0.2,5]\fi
\begin{tikzpicture}[
baseline=(x.base),
x=1ex,
y=1ex,
inner ysep=0.25ex,
inner xsep=0.1ex,
- line width={\the\dimexpr\useKV[\scrname]{line width}\relax}
+ line width={\the\dimexpr\useKV[\scrname]{line width}\relax},
+ scale=\scr_scale,
+ every node/.style={scale=\scr_scale}
]
\node[
line width={\the\dimexpr\useKV[\scrname]{line width}\relax},
rounded rectangle,
- draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{#2dd}},
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray\if1#1!85!black\fi}{none}}{\scr_current_blockcolor\if1#1d\fi}},
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray!\scr_contrast!black}
+ {#2dd}%
+ },
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray\if1#1!85!black\fi}
+ {none}%
+ }
+ {\scr_current_blockcolor\if1#1d\fi}%
+ },
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(x)
{%
- \useKV[\scrname]{pre text}\relax\scr_ovalstrut\kern\scr_ovalsentinel sp
+ \useKV[\scrname]{pre text}\relax
+ \scr_ovalstrut
+ \kern\scr_ovalsentinel sp
+ \_inpicturetrue
#3%
\relax% pour contourner bug dans XeLaTeX
\if1#1% si triangle de sélection
@@ -565,7 +681,7 @@
baseline=-1ex,
x=1.5ex,
y=1.5ex,
- rounded corners=1.5pt
+ rounded corners=1.5pt*\scr_scale
]
\draw[
fill=white,
@@ -577,24 +693,43 @@
% dessine un menu %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand*\selectmenu[1]{% #1=texte du menu (sera composé et suivi du triangle de sélection)
+ \if_inpicture\def\scr_scale{1}\else\scr_normalizedec\scr_scale scale[0.2,5]\fi
\begin{tikzpicture}[
anchor=base west,
baseline=(textmenu.base west),
outer sep=0pt,
inner sep=0pt,
- minimum size=0pt
+ minimum size=0pt,
+ scale=\scr_scale,
+ every node/.style={scale=\scr_scale}
]
\node[
rectangle,
- rounded corners=1.5pt,
- draw={\ifboolKV[\scrname]{print}{scr_linegray}{\scr_current_blockcolor dd}},
+ rounded corners=1.5pt*\scr_scale,
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray}
+ {\scr_current_blockcolor dd}%
+ },
inner sep=0.2em,
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray!85!black}{none}}{\scr_current_blockcolor}},
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray!85!black}
+ {none}%
+ }
+ {\scr_current_blockcolor}%
+ },
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(textmenu)
{%
\useKV[\scrname]{pre text}%
+ \_inpicturetrue
#1%
\scr_ovalstrut
\hskip.6666em
@@ -613,20 +748,28 @@
\edef\_{\the\dimexpr.53033\dimexpr \scr_linewidth\relax\relax}%
\def\scr_current_blockcolor{#1}%
\edef\scr_boolsep{\useKV[\scrname]{bool sep}}%
+ \if_inpicture\def\scr_scale{1}\else\scr_normalizedec\scr_scale scale[0.2,5]\fi
\begin{tikzpicture}[
inner sep=0pt,
outer sep=0pt,
minimum size=0pt,
baseline=(x.base),
line width=\scr_linewidth,
- rounded corners=0pt% BUGFIX 0.11
+ rounded corners=0pt,% BUGFIX 0.11
+ scale=\scr_scale,
+ every node/.style={scale=\scr_scale}
]
\setbox\scr_box\hbox{%
\pgfinterruptpicture
\useKV[\scrname]{pre text}%
\scr_ovalstrut
\kern\scr_boolsentinel sp
- #2%
+ \_inpicturetrue
+ \if_boolempty
+ \vrule width#2 height0pt depth0pt\relax
+ \else
+ #2%
+ \fi
\xdef\scr_endkern{\number\lastkern}%
\endpgfinterruptpicture
}%
@@ -638,8 +781,19 @@
]
(\ifnum\scr_previouskern=\scr_boolsentinel-\scr_boolsep*.41421\else -\scr_totheight/2\fi,-\scr_boolsep)rectangle(\scr_retainedwd+\scr_totheight/2,\scr_totheight+\scr_boolsep);%
\draw[
- fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
- draw={\ifboolKV[\scrname]{print}{scr_linegray}{#1dd}}
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {\ifboolKV[\scrname]{fill blocks}
+ {scr_fillgray\if_boolempty!85!black\fi}
+ {none}%
+ }
+ {\scr_current_blockcolor}%
+ },
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray}
+ {#1dd}%
+ }
]
(\scr_boolsep,-\scr_boolsep)--++(\scr_retainedwd-\scr_boolsep*2,0)--++(\scr_totheight/2+\scr_boolsep,\scr_totheight/2+\scr_boolsep)--++(-\scr_totheight/2-\scr_boolsep,\scr_totheight/2+\scr_boolsep)--++(-\scr_retainedwd+\scr_boolsep*2,0)--++(-\scr_totheight/2-\scr_boolsep,-\scr_totheight/2-\scr_boolsep)--cycle;%
\node[
@@ -648,7 +802,11 @@
minimum size=0pt,
draw=none,
anchor=south west,
- text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ text={%
+ \ifboolKV[\scrname]{print}
+ {\useKV[\scrname]{text color}}
+ {white}%
+ }
]
(x)
{%
@@ -656,11 +814,17 @@
\scr_ovalstrut
\kern\_%
\kern\scr_boolsentinel sp
- #2%
+ \_inpicturetrue
+ \if_boolempty
+ \vrule width#2 height0pt depth0pt\relax
+ \else
+ #2%
+ \fi
\kern\_%
};%
\end{tikzpicture}%
\endgroup
+ \_boolemptyfalse
\kern\scr_boolsentinel sp
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -704,40 +868,51 @@
\definecolor{penline} {HTML}{595e73}%
\definecolor{penblue} {HTML}{4c8eea}%
\definecolor{penvline} {HTML}{0da57a}%
+\definecolor{boolempty} {HTML}{cf8b17}% new 0.14
+\definecolor{boolemptyd} {HTML}{cf8b17}% new 0.14
+\definecolor{boolemptydd} {HTML}{cf8b17}% new 0.14
\newenvironment{scratch}[1][]
{\skv_ifempty{#1}{}{\setscratch{#1}}%
\sffamily
\edef\scr_ex{\the\dimexpr1ex\relax}% valeur d'1ex pour le tracé de la flèche
\edef\scr_em{\the\dimexpr1em\relax}%
- \scr_normalizedim\scr_corner corner[\scr_ex/3,\scr_ex]%
- \scr_normalizedim\scr_notch notch[\scr_em/3,\scr_em*3]%
- \scr_normalizedec\scr_scale scale[0.2,5]% échelle
- \scr_normalizedim\scr_xsep x sep[0pt,\scr_em]%
- \scr_normalizedim\scr_ysepsup y sepsup[1pt,\scr_ex*3]%
- \scr_normalizedim\scr_ysepinf y sepinf[1pt,\scr_ex*3]%
- \scr_normalizedim\scr_linewidth line width[0pt,5pt]% épaisseur des lignes soumises à l'échelle
- \scr_normalizedim\scr_loopblockwidth loop width[3pt,\scr_em*3]%
- \scr_normalizedim\scr_loopblockheight loop height[3pt,\scr_ex*3]%
- \scr_normalizedec\scr_initarcangle init arcangle[20,40]%
- \scr_normalizedim\scr_initarclength init arclength[\scr_em*3,\scr_em*8]%
- \scr_normalizedim\scr_numsep num sep[0pt,\scr_em*3/2]%
- \scr_normalizedec\scr_contrast contrast[0,100]%
+ \scr_normalizedim\scr_corner corner [\scr_ex/3,\scr_ex]%
+ \scr_normalizedim\scr_notch notch [\scr_em/3,\scr_em*3]%
+ \scr_normalizedec\scr_scale scale [0.2,5]% échelle
+ \scr_normalizedim\scr_xsep x sep [0pt,\scr_em]%
+ \scr_normalizedim\scr_ysepsup y sepsup [1pt,\scr_ex*3]%
+ \scr_normalizedim\scr_ysepinf y sepinf [1pt,\scr_ex*3]%
+ \scr_normalizedim\scr_linewidth line width [0pt,5pt]% épaisseur des lignes soumises à l'échelle
+ \scr_normalizedim\scr_loopblockwidth loop width [3pt,\scr_em*3]%
+ \scr_normalizedim\scr_loopblockheight loop height [3pt,\scr_ex*3]%
+ \scr_normalizedec\scr_initarcangle init arcangle [20,40]%
+ \scr_normalizedim\scr_initarclength init arclength [\scr_em*3,\scr_em*8]%
+ \scr_normalizedim\scr_numsep num sep [0pt,\scr_em*3/2]%
+ \scr_normalizedec\scr_contrast contrast [0,100]%
\edef\scr_contrast{\number\numexpr100-\scr_contrast}%
\edef\scr_minwd{\the\dimexpr\scr_corner*4+\scr_notch*3-\scr_xsep*2}%
\edef\scr_valign{\useKV[\scrname]{baseline}}%
\scr_blocknum\number\numexpr\useKV[\scrname]{num start}\relax\relax
\setbox\scr_box\hbox{\scr_blockstrut}\edef\scr_blockstruttotht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}% haut totale du strut
\def\turnleft{\turn_arrow{}}\def\turnright{\turn_arrow{xscale=-1}}%
- \let\blockmove \scr_blockmove \let\blocklook \scr_blocklook
- \let\blocksound \scr_blocksound \let\blocklist \scr_blocklist
- \let\blockpen \scr_blockpen \let\blockvariable \scr_blockvariable
- \let\blockevent \scr_blockevent \let\blockinit \scr_blockinit
- \let\blockrepeat \scr_blockrepeat \let\blockinfloop \scr_blockinfloop
- \let\blockifelse \scr_blockifelse \let\blockif \scr_blockif
- \let\blockinitclone\scr_blockinitclone \let\blockcontrol \scr_blockcontrol
- \let\blocksensing \scr_blocksensing \let\blockmoreblocks\scr_blockmoreblocks
- \let\namemoreblocks\scr_namemoreblocks
+ \let\blockmove \scr_blockmove
+ \let\blocklook \scr_blocklook
+ \let\blocksound \scr_blocksound
+ \let\blocklist \scr_blocklist
+ \let\blockpen \scr_blockpen
+ \let\blockvariable \scr_blockvariable
+ \let\blockevent \scr_blockevent
+ \let\blockinit \scr_blockinit
+ \let\blockrepeat \scr_blockrepeat
+ \let\blockinfloop \scr_blockinfloop
+ \let\blockifelse \scr_blockifelse
+ \let\blockif \scr_blockif
+ \let\blockinitclone \scr_blockinitclone
+ \let\blockcontrol \scr_blockcontrol
+ \let\blocksensing \scr_blocksensing
+ \let\blockmoreblocks\scr_blockmoreblocks
+ \let\namemoreblocks \scr_namemoreblocks
\scr_xoffset0pt \scr_yoffset0pt
\catcode`\:12 \catcode`\;12 \catcode`\!12 \catcode`\?12 \catcode`\_12
\csname skv_\if c\expandafter\scr_firsttonil\scr_valign c\_nil first\else second\fi\endcsname
@@ -750,19 +925,21 @@
\begin{tikzpicture}[
baseline=(txt\scr_valign.base),
}%
- transform shape,
+ scale=\scr_scale,
+ every node/.style={scale=\scr_scale},
line width=\scr_linewidth,
inner sep=0pt,
outer sep=0pt,
minimum size=0pt,
- line cap=round,
- scale=\scr_scale
+ line cap=round
]
+ \_inpicturetrue
\node[shape=coordinate](origin){};% origine
}%
{%
\end{tikzpicture}%
\scr_scratchend
+ \_inpicturefalse% par pure sécurité
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -786,18 +963,25 @@
\else
\def\scr_current_blockcolor{black}%
\fi
+ \if_inpicture\def\scr_scale{1}\else\scr_normalizedec\scr_scale scale[0.2,5]\fi
\begin{tikzpicture}[
baseline=(x.base),
x=1ex,
y=1ex,
inner ysep=0.25ex,
inner xsep=0.1ex,
- line width=\scr_linewidth
+ line width=\scr_linewidth,
+ scale=\scr_scale,
+ every node/.style={scale=\scr_scale}
]
\node[
line width=\scr_linewidth,
rounded rectangle,
- draw={\ifboolKV[\scrname]{print}{scr_linegray}{\scr_current_blockcolor}},
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray}
+ {\scr_current_blockcolor}%
+ },
fill=white,
text=black
]
@@ -806,6 +990,7 @@
\useKV[\scrname]{pre text}\relax
\scr_ovalstrut
\kern\scr_ovalsentinel sp
+ \_inpicturetrue
#1%
\relax% pour contourner bug dans XeLaTeX
\ifnum\lastkern=\scr_ovalsentinel\relax\expandafter\scr_execfirst\else\expandafter\scr_execsecond\fi
@@ -818,7 +1003,10 @@
\endgroup
\kern\scr_ovalsentinel sp
}
-\def\turn_arrow#1{\tikz[baseline=.25ex,x=6.5ex,y=6.5ex,#1]\draw[-{Triangle[angle=45:0.5ex 0.5ex,flex]},line width=.3333ex](0,0) arc[start angle=-80,end angle=190,radius=1ex];}
+\def\turn_arrow#1{%
+ \tikz[baseline=.25ex,x=6.5ex,y=6.5ex,#1]
+ \draw[-{Triangle[angle=45:0.5ex 0.5ex,flex]},line width=.3333ex](0,0) arc[start angle=-80,end angle=190,radius=1ex];%
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% menu apparence %
@@ -847,7 +1035,7 @@
\def\scr_drawpen{% dessin du crayon
\begin{tikzpicture}[
rotate=45,
- rounded corners=.4pt,
+ rounded corners=.4pt*\scr_scale,
line width=.5pt,
x=5ex,
y=5ex,
@@ -858,19 +1046,27 @@
]
\draw[
penline,
- fill={\ifboolKV[\scrname]{print}{scr_linegray}{penblue}}
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray}
+ {penblue}%
+ }
]
(0,0)--(22:0.1)..controls(0.13,0.04)and(0.13,-0.04)..(-22:0.1)[sharp corners]--cycle;
\draw[
penline,
fill=white,
- rounded corners=.2pt
+ rounded corners=.2pt*\scr_scale
]
- (22:0.1)--(22:0.2)[rounded corners=0.05pt]--(.56,.07492)..controls(.62,0.04)and(.62,-0.04)..(.56,-.07492)[rounded corners=2pt]--(-22:.2)[rounded corners=0.05pt]--(-22:0.1)..controls(0.13,-0.04)and(0.13,0.04)..(22:0.1);
+ (22:0.1)--(22:0.2)[rounded corners=0.05pt*\scr_scale]--(.56,.07492)..controls(.62,0.04)and(.62,-0.04)..(.56,-.07492)[rounded corners=2pt*\scr_scale]--(-22:.2)[rounded corners=0.05pt*\scr_scale]--(-22:0.1)..controls(0.13,-0.04)and(0.13,0.04)..(22:0.1);
\draw[
penline,
- fill={\ifboolKV[\scrname]{print}{scr_linegray}{penblue}},
- rounded corners=.2pt
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {scr_linegray}
+ {penblue}%
+ },
+ rounded corners=.2pt*\scr_scale
]
(.56,.07492)--(.88,.07492)..controls(.92,0.04)and(.92,-0.04)..(0.88,-.07492)[sharp corners]--(.56,-.07492)..controls(.62,-0.04)and(.62,0.04)..cycle;
\draw[penline](.84,0.07492)..controls(.7,.24)and(.58,0.02)..(.5,0.16);
@@ -923,7 +1119,9 @@
}%
}
\newcommand*\boollist{\scr_boolbox{scrlist}}
-
+\newif\if_boolempty
+\_boolemptyfalse
+\newcommand*\boolempty[1][2em]{\_boolemptytrue\scr_boolbox{boolempty}{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% menu événement %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -938,8 +1136,16 @@
]
\draw[
line width=\scr_linewidth,
- draw={\ifboolKV[\scrname]{print}{scr_flaggray}{flagcontour}},
- fill={\ifboolKV[\scrname]{print}{scr_flaggray!85!white}{greenflag}}
+ draw={%
+ \ifboolKV[\scrname]{print}
+ {scr_flaggray}
+ {flagcontour}%
+ },
+ fill={%
+ \ifboolKV[\scrname]{print}
+ {scr_flaggray!85!white}
+ {greenflag}%
+ }
]
(0,0.95)..controls(.4,1.4) and (.7,.7)..(1,1)--(1,.4)..controls(.7,0.1)and(.4,.8)..(0,.4)--cycle;
\filldraw[{\ifboolKV[\scrname]{print}{scr_flaggray}{flagcontour}}]
@@ -1017,4 +1223,12 @@ Versions :
| | | * bug corrigé dans \scr_ovalbox |
|---------+------------+------------------------------------------------------|
| 0.13 | 01/07/2019 | * \relax ajoutés pour éviter le bug de XeLaTeX |
-| | | concernant \lastkern | \ No newline at end of file
+| | | concernant \lastkern |
+|---------+------------+------------------------------------------------------|
+| 0.14 | 01/10/2019 | * gestion de l'échelle (via clé "scale") améliorée |
+| | | * hors de l'environnement, les ovales et les losanges|
+| | | sont affectés par la clé scale si elle est |
+| | | spécifiée via \setscratch |
+| | | * erreur de tracé corrigée dans \scr_blockloop |
+| | | * nouveau losange vide : \boolempty[<dimension>] |
+|---------+------------+------------------------------------------------------| \ No newline at end of file