From 745892fbddea56040139108277e728b53fd8fc11 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 May 2020 03:03:21 +0000 Subject: CTAN sync 202005280303 --- .../latex/contrib/nicematrix/nicematrix-french.tex | 3074 +++++++++++--------- 1 file changed, 1671 insertions(+), 1403 deletions(-) (limited to 'macros/latex/contrib/nicematrix/nicematrix-french.tex') diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex index 7adcadf738..d79a0f3727 100644 --- a/macros/latex/contrib/nicematrix/nicematrix-french.tex +++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex @@ -7,22 +7,14 @@ \usepackage{geometry} \geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} -\usepackage{amsmath} - -\usepackage{array} \usepackage{nicematrix} -% \usepackage{colortbl} \usepackage{tikz} \usetikzlibrary{fit} \usepackage{enumitem} - \usepackage{siunitx} - - -% \usepackage{arydshln} \usepackage{verbatim} % We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb @@ -45,9 +37,7 @@ \def\emphase{\bgroup\color{RoyalPurple}\let\next=} \usepackage{footnote} - \usepackage{booktabs} - \usepackage{varwidth} \usepackage[hyperfootnotes = false]{hyperref} @@ -83,38 +73,16 @@ \maketitle + \begin{abstract} L'extension LaTeX \pkg{nicematrix} fournit de nouveaux environnements similaires aux environnements classiques -|{tabular}|, |{array}| et |{matrix}| mais avec des fonctionnalités supplémentaires. Parmi ces fonctionnalités -figurent la possibilité de fixer la largeur des colonnes et de tracer des traits en pointillés continus entre les -cases du tableau. +|{tabular}|, |{array}| et |{matrix}| de \pkg{array} et \pkg{amsmath} mais avec des fonctionnalités plus étendues. \end{abstract} -\vspace{1cm} -\section{Présentation} - -Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement -classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). Deux ou trois compilations successives peuvent être -nécessaires. Cette extension nécessite et charge les extensions \pkg{expl3}, \pkg{l3keys2e}, \pkg{xparse}, -\pkg{array}, \pkg{amsmath} et \pkg{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf} (l'extension -\pkg{tikz} n'est \emph{pas} chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec -l'instruction habituelle : |\usepackage{nicematrix}|. - +\vspace{1cm} -\medskip -\begin{savenotes} -\begin{minipage}{0.6\linewidth} -Cette extension fournit quelques outils supplémentaires pour dessiner des matrices (au sens mathématique). Les -principales caractéristiques sont les suivantes : -\begin{itemize}\setlength{\itemsep}{0pt} -\item des lignes en pointillés continues ; -\item des rangées et colonnes extérieures pour les labels ; -\item un contrôle sur la largeur des colonnes. -\end{itemize} -\end{minipage} -\end{savenotes} -\hspace{1.4cm} +\hspace{1cm} $\begin{bNiceArray}{CCCC}[first-row,first-col, code-for-first-col=\color{blue}\scriptstyle, code-for-first-row=\color{blue}\scriptstyle, @@ -125,61 +93,58 @@ L_2 & a_{21} & a_{22} & \Cdots & a_{2n} \\ \Vdots & \Vdots & \Vdots & \Ddots & \Vdots \\ L_n & a_{n1} & a_{n2} & \Cdots & a_{nn} \end{bNiceArray}$ +\hspace{2cm} +\begin{NiceTabular}[c]{LSSSS}% +[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}] +\toprule +\Block{2-1}{Produit} & \multicolumn{3}{C}{dimensions (cm)} & \Block{2-1}{\rotate Prix} \\ +\cmidrule(rl){2-4} + & L & l & h \\ +\midrule +petit & 3 & 5.5 & 1 & 30 \\ +standard & 5.5 & 8 & 1.5 & 50.5 \\ +premium & 8.5 & 10.5 & 2 & 80 \\ +extra & 8.5 & 10 & 1.5 & 85.5 \\ +spécial & 12 & 12 & 0.5 & 70 \\ +\bottomrule +\end{NiceTabular} +\vspace{1cm} -\medskip -Une commande|\NiceMatrixOptions| est fournie pour régler les options (la portée des options fixées par cette -commande est le groupe TeX courant). +L'extension \pkg{nicematrix} est entièrement contenue dans le fichier |nicematrix.sty|. Ce fichier peut être placé +dans le répertoire courant ou dans une arborescence |texmf|. Le mieux reste néanmoins d'installer \pkg{nicematrix} +avec une distribution TeX comme MiKTeX ou TeXlive. \bigskip -\textbf{Un exemple d'utilisation pour les lignes en pointillés continues} - -\medskip -\begin{minipage}{10cm} -Considérons par exemple le code suivant qui utilise un environnement |{pmatrix}| de l'extension \pkg{amsmath}. - -\smallskip -\begin{BVerbatim} -$A = \begin{pmatrix} -1 & \cdots & \cdots & 1 \\ -0 & \ddots & & \vdots \\ -\vdots & \ddots & \ddots & \vdots \\ -0 & \cdots & 0 & 1 -\end{pmatrix}$ -\end{BVerbatim} - -\smallskip -Ce code compose la matrice $A$ représentée à droite. -\end{minipage}\hspace{1cm} -$A = \begin{pmatrix} -1 &\cdots &\cdots &1 \\ -0 &\ddots & &\vdots \\ -\vdots &\ddots &\ddots &\vdots \\ -0 &\cdots &0 &1 -\end{pmatrix}$ +Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement +classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). +\bigskip +Cette extension nécessite et charge les extensions \pkg{l3keys2e}, \pkg{xparse}, \pkg{array}, \pkg{amsmath} et +\pkg{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf} (l'extension \pkg{tikz}, qui est une surcouche de +\textsc{pgf} n'est \emph{pas} chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec +l'instruction habituelle : |\usepackage{nicematrix}|. +\bigskip +L'idée de \pkg{nicematrix} est de créer des nœuds \textsc{pgf} derrière les cases et les positions des filets des +tableaux créés par \pkg{array} et de les utiliser pour développer de nouvelles fonctionnalités. Comme toujours avec +\textsc{pgf}, les coordonnées de ces nœuds sont écrites dans le fichier |.aux| pour être utilisées à la +compilation suivante. C'est pourquoi l'utilisation de \pkg{nicematrix} nécessite \textbf{plusieurs compilations + successives}. \bigskip -\begin{scope} -\NiceMatrixOptions{transparent} -\begin{minipage}{10cm} -Maintenant, si nous utilisons l'extension \pkg{nicematrix} avec l'option |transparent|, le même code va donner le -résultat ci-contre à droite. -\end{minipage}\hspace{1cm} -$A = \begin{pmatrix} -1 & \cdots & \cdots & 1 \\ -0 & \ddots & & \vdots \\ -\vdots & \ddots & \ddots & \vdots \\ -0 & \cdots & 0 & 1 -\end{pmatrix}$ -\end{scope} +La plupart des fonctionnalités de \pkg{nicematrix} sont accessibles sans avoir à utiliser explicitement +\textsc{pgf} ou Tikz (ce dernier n'est d'ailleurs pas chargé par défaut). +\bigskip +Une commande|\NiceMatrixOptions| est fournie pour régler les options (la portée des options fixées par cette +commande est le groupe TeX courant : elles sont semi-globales). +\newpage \section{Les environnements de cette extension} @@ -189,880 +154,913 @@ L'extension \pkg{nicematrix} définit les nouveaux environnements suivants : \begin{ttfamily} \setlength{\tabcolsep}{3mm} \begin{tabular}{llll} -\{NiceMatrix\} & \{NiceArray\} & \{NiceTabular\} \\ -\{pNiceMatrix\} & \{pNiceArray\} \\ -\{bNiceMatrix\} & \{bNiceArray\} \\ -\{BNiceMatrix\} & \{BNiceArray\} \\ -\{vNiceMatrix\} & \{vNiceArray\} \\ -\{VNiceMatrix\} & \{VNiceArray\} \\ - & \{NiceArrayWithDelims\} +\{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\ + & \{pNiceArray\} & \{pNiceMatrix\} \\ + & \{bNiceArray\} & \{bNiceMatrix\} \\ + & \{BNiceArray\} & \{BNiceMatrix\} \\ + & \{vNiceArray\} & \{vNiceMatrix\} \\ + & \{VNiceArray\} & \{VNiceMatrix\} \end{tabular} \end{ttfamily} -\medskip -Par défaut, les environnements |{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, |{BNiceMatrix}|, |{vNiceMatrix}| -et |{VNiceMatrix}| se comportent quasiment comme les environnements correspondants de \pkg{amsmath} : |{matrix}|, -|{pmatrix}|, |{bmatrix}|, |{Bmatrix}|, |{vmatrix}| et |{Vmatrix}|. - - \medskip Les environnements |{NiceArray}| et |{NiceTabular}| sont similaires aux environnements |{array}| et |{tabular}| de -l'extension |{array}|. Néanmoins, pour des raisons techniques, dans le préambule de ces environnements, -l'utilisateur doit utiliser les lettres |L|, |C| et~|R| au lieu de |l|, |c| et |r|. Il est possible d'utiliser les -constructions |p{...}|, |m{...}|, |b{...}|, |w{...}{...}|, |W{...}{...}|, \verb+|+, |>{...}|, |<{...}|, |@{...}|, -|!{...}| et |*{n}{...}|. - -Voir p.~\pageref{NiceArray} la partie concernant |{NiceArray}| et |{NiceTabular}|. - -\section{Les lignes en pointillés continues} - -À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies : |\Ldots|, -|\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|. Ces commandes sont conçues pour être utilisées à la place de |\dots|, -|\cdots|, |\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans \pkg{nicematrix}, est une - variante de |\ddots| avec les points allant vers le haut. Si \pkg{mathdots} est chargée, la - version de \pkg{mathdots} est utilisée. Elle correspond à la commande |\adots| de \pkg{unicode-math}.} -\newcounter{fniddots} -\setcounter{fniddots}{\thefootnote} - -\smallskip -Chacune de ces commandes doit être utilisée seule dans la case du tableau et elle trace une ligne en pointillés -entre les premières cases non vides\footnote{La définition précise de ce qui est considéré comme une «case vide» - est donnée plus loin (cf. p.~\pageref{empty-cells}).} situées de part et d'autre de la case courante. Bien -entendu, pour |\Ldots| et |\Cdots|, c'est une ligne horizontale ; pour |\Vdots|, c'est une ligne verticale et pour -|\Ddots| et |\Iddots|, ce sont des lignes diagonales. On peut changer la couleur d'une ligne avec -l'option~|color|.\footnote{Il est aussi possible de changer la couleur de toutes ces lignes pointillées avec - l'option |xdots/color| (\textsl{xdots} pour rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) : - cf. p.~\pageref{customization}). -}\par\nobreak - -\bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -\begin{bNiceMatrix} -a_1 & \Cdots & & & a_1 \\ -\Vdots & a_2 & \Cdots & & a_2 \\ - & \Vdots & \Ddots[color=red] \\ -\\ -a_1 & a_2 & & & a_n -\end{bNiceMatrix} -\end{BVerbatim} -$\begin{bNiceMatrix} -a_1 & \Cdots & & & a_1 \\ -\Vdots & a_2 & \Cdots & & a_2 \\ - & \Vdots & \Ddots[color=red] \\ -\\ -a_1 & a_2 & & & a_n -\end{bNiceMatrix}$ - - - - -\interitem -Pour représenter la matrice nulle, on peut choisir d'utiliser le codage suivant :\par\nobreak - -\bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -\begin{bNiceMatrix} -0 & \Cdots & 0 \\ -\Vdots & & \Vdots \\ -0 & \Cdots & 0 -\end{bNiceMatrix} -\end{BVerbatim} -$\begin{bNiceMatrix} -0 & \Cdots & 0 \\ -\Vdots & & \Vdots \\ -0 & \Cdots & 0 -\end{bNiceMatrix}$ - -\bigskip -On peut néanmoins souhaiter une matrice plus grande. Habituellement, dans un tel cas, les utilisateurs de LaTeX -ajoutent une nouvelle ligne et une nouvelle colonne. Il est possible d'utiliser la même méthode avec -\pkg{nicematrix} :\par\nobreak - -\bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -\begin{bNiceMatrix} -0 & \Cdots & \Cdots & 0 \\ -\Vdots & & & \Vdots \\ -\Vdots & & & \Vdots \\ -0 & \Cdots & \Cdots & 0 -\end{bNiceMatrix} -\end{BVerbatim} -$\begin{bNiceMatrix} -0 & \Cdots & \Cdots & 0 \\ -\Vdots & & & \Vdots \\ -\Vdots & & & \Vdots \\ -0 & \Cdots & \Cdots & 0 -\end{bNiceMatrix}$ +l'extension \pkg{array} (qui est chargée par \pkg{nicematrix}). -\bigskip -Dans la première colonne de cet exemple, il y a deux instructions |\Vdots| mais une seule ligne en pointillés sera -tracée (il n'y a pas d'objets qui se superposent dans le fichier \textsc{pdf} résultant\footnote{Et il n'est pas - possible de tracer une ligne |\Ldots| et une ligne |\Cdots| entre les mêmes cases.}). +\medskip +Il y a néanmoins quelques différences : +\begin{itemize} +\item Pour des raisons techniques, dans le préambule de ces environnements, l'utilisateur doit utiliser les lettres +|L|, |C| et~|R|\footnote{Les types de colonnes |L|, |C| et |R| sont définis localement à l'intérieur de + |{NiceTabular}| ou |{NiceArray}| avec la commande |\newcolumntype| de \pkg{array}. Cette définition masque une + éventuelle définition précédente.} au lieu de |l|, |c| et |r|, y compris dans les commandes |\multicolumn| et +dans les types de colonnes définis par |\newcolumntype|. + +\item Dans |{NiceArray}| (et ses variantes), les colonnes de type |w| (ex. : |wc{1cm}|) sont composées en mode +mathématique alors que dans |{array}| de \pkg{array}, elles sont composées en mode texte. +\end{itemize} -\bigskip -En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus rapidement avec le codage suivant -:\par\nobreak +\medskip +Les environnements |{pNiceArray}|, |{bNiceArray}|, etc. n'ont pas d'équivalents dans \pkg{array}. -\bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -\begin{bNiceMatrix} -0 & \Cdots & & 0 \\ -\Vdots & & & \\ - & & & \Vdots \\ -0 & & \Cdots & 0 -\end{bNiceMatrix} -\end{BVerbatim} -$\begin{bNiceMatrix} -0 & \Cdots & & 0 \\ -\Vdots & & & \\ - & & & \Vdots \\ -0 & & \Cdots & 0 -\end{bNiceMatrix}$ +\medskip +Les environnements |{NiceMatrix}|, |{pNiceMatrix}|, etc. sont similaires aux environnements correspondants de +l'\pkg{amsmath} (qui est chargée par \pkg{nicematrix}) : |{matrix}|, |{pmatrix}|, etc. -\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{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}} +\medskip +Tous les environnements de l'extension \pkg{nicematrix} acceptent, entre crochets, une liste optionnelle de paires +de la forme \textsl{clé=valeur}. {\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) de cette +liste d'options.} -Toutefois, une commande~|\hspace*| pourrait interférer dans la construction des lignes en pointillés. C'est -pourquoi l'extension \pkg{nicematrix} fournit une commande~|\Hspace| qui est une variante de |\hspace| transparente -pour la construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak -\bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -\begin{bNiceMatrix} -0 & \Cdots & ~emphase#\Hspace*{1cm}@ & 0 \\ -\Vdots & & & \Vdots \\~emphase#[1cm]@ -0 & \Cdots & & 0 -\end{bNiceMatrix} -\end{BVerbatim} -$\begin{bNiceMatrix} -0 & \Cdots & \Hspace*{1cm} & 0 \\ -\Vdots & & & \Vdots \\[1cm] -0 & \Cdots & & 0 -\end{bNiceMatrix}$ -\subsection{L'option nullify-dots} +\section{L'espace vertical entre les rangées} -Considérons la matrice suivante qui a été composée classiquement avec l'environnement |{pmatrix}| de -\pkg{amsmath}.\par\nobreak +Il est bien connu que certaines rangées des tableaux créés par défault avec LaTeX sont trop proches l'une de +l'autre. On en donne ci-dessous un exemple classique. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$A = \begin{pmatrix} -h & i & j & k & l & m \\ -x & & & & & x +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +$\begin{pmatrix} +\frac12 & -\frac12 \\ +\frac13 & \frac14 \\ \end{pmatrix}$ \end{BVerbatim} -$A = \begin{pmatrix} -h & i & j & k & l & m \\ -x & & & & & x +$\begin{pmatrix} +\frac12 & -\frac12 \\ +\frac13 & \frac14 \\ \end{pmatrix}$ - \bigskip -Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie de la matrice est -modifiée.\par\nobreak +En s'inspirant de l'extension \pkg{cellspace} qui traite de ce problème, l'extension \pkg{nicematrix} propose deux +clés |cell-space-top-limit| et |cell-space-bottom-limit| qui sont similaires aux deux paramètres +|\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}. La valeur initiale de ces paramètres +est $0$~pt pour que les environnements de \pkg{nicematrix} aient par défaut le même comportement que ceux de +\pkg{array} et de l'\pkg{amsmth} mais une valeur de $1$~pt serait un bon choix. On conseille de régler leurs +valeurs avec la commande |\NiceMatrixOptions|. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$B = \begin{pmatrix} -h & i & j & k & l & m \\ -x & \ldots & \ldots & \ldots & \ldots & x -\end{pmatrix}$ -\end{BVerbatim} -$B = \begin{pmatrix} -h & i & j & k & l & m \\ -x & \ldots & \ldots & \ldots & \ldots & x -\end{pmatrix}$ - -\bigskip -Par défaut, avec \pkg{nicematrix}, si nous remplaçons |{pmatrix}| par |{pNiceMatrix}| et |\ldots| par |\Ldots|, la -géométrie de la matrice n'est pas changée.\par\nobreak +\begin{Verbatim} +\NiceMatrixOptions{~emphase#cell-space-top-limit = 1pt,cell-space-bottom-limit = 1pt@} +\end{Verbatim} -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$C = \begin{pNiceMatrix} -h & i & j & k & l & m \\ -x & \Ldots & \Ldots & \Ldots & \Ldots & x +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +$\begin{pNiceMatrix} +\frac12 & -\frac12 \\ +\frac13 & \frac14 \\ \end{pNiceMatrix}$ \end{BVerbatim} -$C = \begin{pNiceMatrix} -h & i & j & k & l & m \\ -x & \Ldots & \Ldots & \Ldots & \Ldots & x +\begin{scope} +\NiceMatrixOptions{ + cell-space-top-limit = 1pt , + cell-space-bottom-limit = 1pt , +} +$\begin{pNiceMatrix} +\frac12 & -\frac12 \\ +\frac13 & \frac14 \\ \end{pNiceMatrix}$ +\end{scope} + \bigskip -On pourrait toutefois préférer la géométrie de la première matrice $A$ et vouloir avoir la même géométrie avec une -ligne en pointillés continue dans la seconde rangée. C'est possible en utilisant l'option |nullify-dots| (et une -seule instruction |\Ldots| suffit).\par\nobreak +\section{La clé baseline} + +L'extension \pkg{nicematrix} propose une option |baseline| pour la position verticale des tableaux. Cette +option |baseline| prend comme valeur un entier qui indique le numéro de rangée dont la ligne de base servira de +ligne de base pour le tableau. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$D = \begin{pNiceMatrix}[~emphase#nullify-dots@] -h & i & j & k & l & m \\ -x & \Ldots & & & & x +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +$A = \begin{pNiceMatrix}[~emphase#baseline=2@] +\frac{1}{\sqrt{1+p^2}} & p & 1-p \\ +1 & 1 & 1 \\ +1 & p & 1+p \end{pNiceMatrix}$ \end{BVerbatim} -$D = \begin{pNiceMatrix}[nullify-dots] -h & i & j & k & l & m \\ -x & \Ldots & & & & x +$A = \begin{pNiceMatrix}[baseline=2] +\frac{1}{\sqrt{1+p^2}} & p & 1-p \\ +1 & 1 & 1 \\ +1 & p & 1+p \end{pNiceMatrix}$ + +\interitem +L'option |baseline| peut aussi prendre les trois valeurs spéciales |t|, |c| et |b|. Ces trois lettres peuvent aussi +être utilisées de manière absolue comme pour l'option des environnements |{tabular}| et |{array}| de \pkg{array}. +La valeur initiale de |baseline| est~|c|. + + +\bigskip +Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste. +On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première +rangée (avec |{tabular}| ou |{array}| de \pkg{array}, il faut utiliser |\firsthline|\footnote{On peut aussi utiliser |\firsthline| + dans les environnements de \pkg{nicematrix}.}). + +\smallskip +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +\begin{enumerate} +\item un item +\smallskip +\item \renewcommand{\arraystretch}{1.2} +$\begin{NiceArray}[t]{LCCCCCC} +\hline +n & 0 & 1 & 2 & 3 & 4 & 5 \\ +u_n & 1 & 2 & 4 & 8 & 16 & 32 +\hline +\end{NiceArray}$ +\end{enumerate} +\end{BVerbatim} +% +\begin{minipage}{5cm} +\begin{enumerate} +\item un item +\smallskip +\item \renewcommand{\arraystretch}{1.2} +$\begin{NiceArray}[t]{LCCCCCC} +\hline +n & 0 & 1 & 2 & 3 & 4 & 5 \\ +u_n & 1 & 2 & 4 & 8 & 16 & 32 \\ +\hline +\end{NiceArray}$ +\end{enumerate} +\end{minipage} + + +\bigskip +Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|, +|\bottomrule|, |\midrule|, etc.\par\nobreak + +\smallskip +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +\begin{enumerate} +\item an item +\smallskip +\item +$\begin{NiceArray}[t]{LCCCCCC} +~emphase#\toprule@ +n & 0 & 1 & 2 & 3 & 4 & 5 \\ +~emphase#\midrule@ +u_n & 1 & 2 & 4 & 8 & 16 & 32 +~emphase#\bottomrule@ +\end{NiceArray}$ +\end{enumerate} +\end{BVerbatim} +\begin{minipage}{5cm} +\begin{enumerate} +\item an item +\smallskip +\item +$\begin{NiceArray}[t]{LCCCCCC} +\toprule +n & 0 & 1 & 2 & 3 & 4 & 5 \\ +\midrule +u_n & 1 & 2 & 4 & 8 & 16 & 32 \\ +\bottomrule +\end{NiceArray}$ +\end{enumerate} +\end{minipage} + + + +\section{Les blocs} + +\label{Block} +Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre +d'un rectangle de cases fusionnées. La commande |\Block| ne crée pas d'espace par elle-même. + +La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc avec deux arguments. Le premier +argument est la taille de ce bloc avec la syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de +colonnes du bloc. Le deuxième argument, est, sans surprise, le contenu du bloc. + +Dans |{NiceTabular}|, le contenu est composé en mode texte. Dans les autres environnements, il est composé en mode +mathématique. + \medskip -L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes) horizontalement mais aussi -verticalement. +\begin{BVerbatim} +\begin{NiceTabular}{CCCC} +rose & tulipe & marguerite & dahlia \\ +violette & ~emphase#\Block{2-2}{\LARGE\color{blue} fleurs}@ & & souci \\ +pervenche & & & lys \\ +arum & iris & jacinthe & muguet +\end{NiceTabular} +\end{BVerbatim} + \medskip -{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) des options de l'environnement.} +\begin{center} +\begin{NiceTabular}{CCCC} +rose & tulipe & marguerite & dahlia \\ +violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\ +pervenche & & & lys \\ +arum & iris & jacinthe & muguet +\end{NiceTabular} +\end{center} -\subsection{La commande \textbackslash Hdotsfor} -Certaines personnes utilisent habituellement la commande |\hdotsfor| de l'extension \pkg{amsmath} pour tracer des -lignes en pointillés horizontales dans une matrice. Dans les environnements de \pkg{nicematrix}, il convient -d'utiliser |\Hdotsfor| à la place pour avoir les lignes en pointillés similaires à toutes celles tracées par -l'extension \pkg{nicematrix}. -Comme avec les autres commandes de \pkg{nicematrix} (comme |\Cdots|, |\Ldots|, |\Vdots|, etc.), la ligne en -pointillés tracée par |\Hdotsfor| s'étend jusqu'au contenu des cases de part et d'autre. +\bigskip +On peut aussi utiliser la commande |\Block| dans des matrices mathématiques. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=7cm] -$\begin{pNiceMatrix} -1 & 2 & 3 & 4 & 5 \\ -1 & ~emphase#\Hdotsfor{3}@ & 5 \\ -1 & 2 & 3 & 4 & 5 \\ -1 & 2 & 3 & 4 & 5 -\end{pNiceMatrix}$ +\begin{BVerbatim}[baseline=c,boxwidth=10.6cm] +$\begin{bNiceArray}{CCC|C}[margin] +~emphase#\Block{3-3}{A}@ & & & 0 \\ +& \hspace*{1cm} & & \Vdots \\ +& & & 0 \\ +\hline +0 & \Cdots& 0 & 0 +\end{bNiceArray}$ \end{BVerbatim} -$\begin{pNiceMatrix} -1 & 2 & 3 & 4 & 5 \\ -1 & \Hdotsfor{3} & 5 \\ -1 & 2 & 3 & 4 & 5 \\ -1 & 2 & 3 & 4 & 5 -\end{pNiceMatrix}$ +$\begin{bNiceArray}{CCC|C}[margin] +\Block{3-3}{A} & & & 0 \\ +& \hspace*{1cm} & & \Vdots \\ +& & & 0 \\ +\hline +0 & \Cdots& 0 & 0 +\end{bNiceArray}$ \bigskip -Néanmoins, si ces cases sont vides, la ligne en pointillés s'étend seulement dans les cases spécifiées par -l'argument de |\Hdotsfor| (par conception). +On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple précédent. Comme il est composé en +mode mathématique, on ne peut pas directement utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est +pourquoi une option à mettre entre chevrons est proposée par |\Block| pour spécifier du code LaTeX qui sera inséré +\emph{avant} le début du mode mathématique. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=7cm] -$\begin{pNiceMatrix} -1 & 2 & 3 & 4 & 5 \\ - & ~emphase#\Hdotsfor{3}@ \\ -1 & 2 & 3 & 4 & 5 \\ -1 & 2 & 3 & 4 & 5 -\end{pNiceMatrix}$ +\begin{BVerbatim}[baseline=c,boxwidth=10.6cm] +$\begin{bNiceArray}{CCC|C}[margin] +\Block{3-3}~emphase#<\LARGE>@{A} & & & 0 \\ +& \hspace*{1cm} & & \Vdots \\ +& & & 0 \\ +\hline +0 & \Cdots& 0 & 0 +\end{bNiceArray}$ \end{BVerbatim} -$\begin{pNiceMatrix} -1 & 2 & 3 & 4 & 5 \\ - & \Hdotsfor{3} \\ -1 & 2 & 3 & 4 & 5 \\ -1 & 2 & 3 & 4 & 5 -\end{pNiceMatrix}$ +$\begin{bNiceArray}{CCC|C}[margin] +\Block{3-3}<\LARGE>{A} & & & 0 \\ +& \hspace*{1cm} & & \Vdots \\ +& & & 0 \\ +\hline +0 & \Cdots& 0 & 0 +\end{bNiceArray}$ -\medskip -Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande |\Hdotsfor| est utilisable lorsque -l'extension \pkg{colortbl} est chargée (mais vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la -même rangée que |\Hdotsfor|). -\subsection{Comment créer les lignes en pointillés de manière transparente} +\section{Les filets horizontaux et verticaux} -L'extension \pkg{nicematrix} fournit une option appelée |transparent| qui permet d'utiliser du code existant de -manière transparente dans les environnements de l'\pkg{amsmath} : |{matrix}|, |{pmatrix}|, 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 option du |\usepackage| (ce sont les trois - seules).} +Les techniques habituelles pour tracer des filets peuvent être utilisées dans les environnements de +\pkg{nicematrix}, à l'exception de |\vline|. + +\subsection{L'épaisseur et la couleur des filets} + +Les environnements de \pkg{nicematrix} proposent une clé |rules/width| pour fixer la largeur (en fait l'épaisseur) +des filets dans l'environnement. En fait, cette clé ne fait que fixer la valeur de |\arrayrulewidth|. \smallskip +On sait que \pkg{colortbl} propose la commande |\arrayrulecolor| pour spécifier la couleur de ces filets. -\begin{itemize} -\item L'option |renew-dots|\par\nobreak +\smallskip +Avec \pkg{nicematrix}, il est possible de spécifier une couleur même si \pkg{colortbl} n'est pas chargé. Par souci +de compatibilité, la commande est nommée également |\arrayrulecolor|. Les environnements de \pkg{nicematrix} +proposent également une clé |rules/color| qui permet de fixer cette couleur pour l'environnement en question. -Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|, |\iddots|\footnotemark[\thefniddots] et -|\hdotsfor| sont redéfinies dans les environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|, -|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de suspension «automatiques» de -|amsmath|) est aussi redéfinie et se comporte comme |\Ldots|. +\medskip +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[baseline=c,boxwidth=9.5cm] +\begin{NiceTabular}{|CCC|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@] +\hline +rose & tulipe & lys \\ +arum & iris & violette \\ +muguet & dahlia & souci \\ +\hline +\end{NiceTabular} +\end{BVerbatim} +\begin{NiceTabular}{|CCC|}[rules/color=[gray]{0.9},rules/width=1pt] +\hline +rose & tulipe & lys \\ +arum & iris & violette \\ +muguet & dahlia & souci \\ +\hline +\end{NiceTabular} +\end{scope} -\item L'option |renew-matrix|\par\nobreak +\medskip +Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais ou bien d'une +couleur spécifique), on aura peut-être intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}. -Avec cette option, l'environnement |{matrix}| est redéfini et se comporte comme |{NiceMatrix}| et il en est de même -pour les cinq variantes. -\end{itemize} -\bigskip -Par conséquent, avec l'option |transparent|, un code classique donne directement le résultat fourni par -\pkg{nicematrix}.\par\nobreak \bigskip -\begin{scope} -\NiceMatrixOptions{transparent} +\subsection{Une remarque concernant \textbackslash cline} + +\label{remark-cline} + +Les traits verticaux et horizontaux que l'on insère avec |\hline| et le spécificateur de colonne «\verb+|+» de +\pkg{array} rendent le tableau plus large ou plus long d'une quantité égale à la largeur du trait. + +\smallskip +Pour des raisons historiques, il n'en est pas de même pour la commande |\cline|, comme on peut le voir avec +l'exemple suivant. + +\medskip \begin{BVerbatim}[baseline=c,boxwidth=10cm] -~emphase#\NiceMatrixOptions{transparent}@ -\begin{pmatrix} -1 & \cdots & \cdots & 1 \\ -0 & \ddots & & \vdots \\ -\vdots & \ddots & \ddots & \vdots \\ -0 & \cdots & 0 & 1 -\end{pmatrix} +\setlength{\arrayrulewidth}{2pt} +\begin{tabular}{cccc} \hline +A&B&C&D \\ ~emphase#\cline{2-2}@ +A&B&C&D \\ \hline +\end{tabular} \end{BVerbatim} -$\begin{pmatrix} -1 & \cdots & \cdots & 1 \\ -0 & \ddots & & \vdots \\ -\vdots & \ddots & \ddots & \vdots \\ -0 & \cdots & 0 & 1 -\end{pmatrix}$ +% +\begin{scope} +\setlength{\arrayrulewidth}{2pt} +\begin{tabular}[c]{cccc} +\hline +A&B&C&D \\ +\cline{2-2} +A&B&C&D \\ +\hline +\end{tabular} \end{scope} +\medskip +Dans les environnements de \pkg{nicematrix}, cette situation est corrigée (il est néanmoins possible de revenir au +comportement par défaut de |\cline| avec la clé |standard-cline|). -\subsection{Les labels des lignes en pointillés} - -Les commandes |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| (ainsi que la commande |\line| dans -le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent en fait prendre deux arguments optionnels -spécifiés par les caractères |_| et |^| pour des labels situés au-dessous et au-dessus de la ligne. Les arguments -sont composés en mode mathématique avec |\scriptstyle|. - +\medskip \begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\begin{bNiceMatrix} -1 & \hspace*{1cm} & 0 \\[8mm] - & ~emphase#\Ddots^{n \text{ times}}@ & \\ -0 & & 1 -\end{bNiceMatrix}$ +\setlength{\arrayrulewidth}{2pt} +\begin{NiceTabular}{CCCC} \hline +A&B&C&D \\ ~emphase#\cline{2-2}@ +A&B&C&D \\ \hline +\end{NiceTabular} \end{BVerbatim} -$\begin{bNiceMatrix} -1 & \hspace*{1cm} & 0 \\[8mm] - & \Ddots^{n \text{ times}} & \\ -0 & & 1 -\end{bNiceMatrix}$ +% +\begin{scope} +\setlength{\arrayrulewidth}{2pt} +\begin{NiceTabular}[c]{CCCC} +\hline +A&B&C&D \\ +\cline{2-2} +A&B&C&D \\ +\hline +\end{NiceTabular} +\end{scope} -\subsection{Personnalisation des lignes en pointillés} +\bigskip +\subsection{Les clés hlines et vlines} -\label{customization} -Les lignes pointillées tracées par |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| (ainsi que par la -commande |\line| dans le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent être -paramétrées par trois options (que l'on met entre crochets après la commande) : -% -\begin{itemize} -\item |color| ; -\item |shorten| ; -\item |line-style|. -\end{itemize} - -Ces options peuvent aussi être fixées avec |\NiceMatrixOptions| ou bien au niveau d'un environnement mais elles -doivent alors être préfixées par |xdots|, ce qui fait que leurs noms deviennent : -% -\begin{itemize} -\item |xdots/color| ; -\item |xdots/shorten| ; -\item |xdots/line-style|. -\end{itemize} -% -Pour la clarté, dans la suite, on utilisera ces noms-là. +La clé |hlines| demande un tracé de tous les filets horizontaux et la clé |vlines| demande un tracé de tous les +filets verticaux. En fait, dans les environnements avec délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les +filets extérieurs ne sont pas tracés (ce qui est le comportement certainement attendu). -\bigskip -\textbf{L'option xdots/color}\par\nobreak -\smallskip -L'option |xdots/color| indique bien entendu la couleur de la ligne tracée. On remarquera néanmoins que les lignes -tracées dans les rangées et colonnes extérieures (décrites plus loin) bénificient d'un régime spécial : cf. -p.~\pageref{exterior}. +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=10.6cm] +$\begin{pNiceMatrix}[~emphase#vlines@,rules/width=0.2pt] +1 & 2 & 3 & 4 & 5 & 6 \\ +1 & 2 & 3 & 4 & 5 & 6 \\ +1 & 2 & 3 & 4 & 5 & 6 +\end{pNiceMatrix}$ +\end{BVerbatim} +$\begin{pNiceMatrix}[vlines,rules/width=0.2pt] +1 & 2 & 3 & 4 & 5 & 6 \\ +1 & 2 & 3 & 4 & 5 & 6 \\ +1 & 2 & 3 & 4 & 5 & 6 +\end{pNiceMatrix}$ \bigskip -\textbf{L'option xdots/shorten}\par\nobreak +Il y a néanmoins une différence entre l'utilisation de l'option |vlines| et du spécificateur «\verb+|+» dans le +préambule de l'environnement : les filets tracés par |vlines| traversent les double-filets horizontaux tracés par +|\hline\hline| (il n'y a pas besoin d'utiliser \pkg{hhline}). -\smallskip -L'option |xdots/shorten| indique la marge qui est laissée aux deux extrémités de la ligne. Le nom s'inspire des options -«|shorten >|» et «|shorten <|» de Tikz, mais il faut remarquer que \pkg{nicematrix} ne propose que |xdots/shorten|. -La valeur initiale de ce paramètre est de $0.3$~em (il est conseillé d'utiliser une unité de mesure dépendante de -la fonte courante). +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=11.5cm] +$\begin{NiceMatrix}[~emphase#vlines@] \hline +a & b & c & d \\ \hline \hline +1 & 2 & 3 & 4 \\ +1 & 2 & 3 & 4 \\ \hline +\end{NiceMatrix}$ +\end{BVerbatim} +% +$\begin{NiceMatrix}[vlines] +\hline +a & b & c & d \\ +\hline \hline +1 & 2 & 3 & 4 \\ +1 & 2 & 3 & 4 \\ +\hline +\end{NiceMatrix}$ \bigskip -\textbf{L'option xdots/line-style}\par\nobreak +Si vous utilisez \pkg{booktabs} (qui fournit |\toprule|, |\midrule|, |\bottomrule|, etc.) et que vous tenez +absolument à mettre des filets verticaux (ce qui est contraire à l'esprit à \pkg{booktabs}), sachez que la clé +|vlines| est compatible avec \pkg{booktabs}. -\smallskip -Il faut savoir que, par défaut, les lignes de Tikz tracées avec le paramètre |dotted| sont composées de points -carrés et non pas ronds.\footnote{La raison de départ est que le format \textsc{pdf} comporte un système de description - de lignes en tiretés, qui, puisqu'il est incorporé dans le \textsc{pdf}, est affiché très rapidement par les - lecteurs de \textsc{pdf}. Il est facile à partir de ce type de ligne de créer des lignes de points carrés alors - qu'une ligne de points ronds doit être construite explicitement point par point.} - -\begin{BVerbatim}[baseline=c,boxwidth=9cm] -\tikz \draw [dotted] (0,0) -- (5,0) ; +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=11.5cm] +$\begin{NiceMatrix}[~emphase#vlines@] \toprule +a & b & c & d \\ \midrule +1 & 2 & 3 & 4 \\ +1 & 2 & 3 & 4 \\ \bottomrule +\end{NiceMatrix}$ \end{BVerbatim} -\tikz \draw [dotted] (0,0) -- (5,0) ; +% +$\begin{NiceMatrix}[vlines] +\toprule +a & b & c & d \\ +\midrule +1 & 2 & 3 & 4 \\ +1 & 2 & 3 & 4 \\ +\bottomrule +\end{NiceMatrix}$ -\bigskip -Voulant proposer des lignes avec des points ronds dans le style de celui de |\ldots| (au moins celui des fontes -\emph{Computer Modern}), l'extension \pkg{nicematrix} contient en interne son propre système de ligne en pointillés -(qui, au passage, n'utilise que \pkg{pgf} et non \pkg{tikz}). Ce style est appelé le style |standard|. Cette valeur -est la valeur initiale du paramètre |xdots/line-style|. -\bigskip -Néanmoins (quand Tikz est chargé), on peut utiliser pour |xdots/line-style| n'importe quel style proposé par Tikz, -c'est-à-dire n'importe quelle suite d'options Tikz applicables à un chemin (à l'exception de «|color|», -«|shorten >|» et «|shorten <|»). +\subsection{La clé hvlines} +\label{hvlines} + +La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux \emph{sauf dans les + blocs}.\footnote{En fait, quand la clé |hvlines| est utilisée, les filets ne sont pas non plus tracés dans les blocs virtuels + délimités par des cases reliées par des lignes pointillées (cf. p. \pageref{dotted-and-hvlines}).} \medskip -Voici par exemple une matrice tridiagonale avec le style |loosely dotted| :\par\nobreak +\begin{Verbatim} +\begin{NiceTabular}{CCCC}[~emphase#hvlines@,rules/color=blue,rules/width=1pt] +rose & tulipe & marguerite & dahlia \\ +violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\ +pervenche & & & lys \\ +arum & iris & jacinthe & muguet +\end{NiceTabular} +\end{Verbatim} +% +\begin{center} +\begin{NiceTabular}{CCCC}[hvlines,rules/color=blue,rules/width=1pt] +rose & tulipe & marguerite & dahlia \\ +violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\ +pervenche & & & lys \\ +arum & iris & jacinthe & muguet +\end{NiceTabular} +\end{center} + + + +\subsection{La commande \textbackslash diagbox} + +La commande |\diagbox| (inspirée par l'extension \pkg{diagbox}) permet, quand elle est utilisée dans une case, de +couper cette case selon une diagonale descendante.\footnote{L'auteur de ce document considère que ce type de + construction est un piètre choix graphique.} \medskip -\begin{BVerbatim}[baseline=c] -$\begin{pNiceMatrix}[nullify-dots,~emphase#xdots/line-style=loosely dotted@] -a & b & 0 & & \Cdots & 0 \\ -b & a & b & \Ddots & & \Vdots \\ -0 & b & a & \Ddots & & \\ - & \Ddots & \Ddots & \Ddots & & 0 \\ -\Vdots & & & & & b \\ -0 & \Cdots & & 0 & b & a -\end{pNiceMatrix}$ +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +$\begin{NiceArray}{*{5}{C}}[hvlines] +~emphase#\diagbox{x}{y}@ & e & a & b & c \\ +e & e & a & b & c \\ +a & a & e & c & b \\ +b & b & c & e & a \\ +c & c & b & a & e +\end{NiceArray}$ \end{BVerbatim} +$\begin{NiceArray}{*{5}{C}}[hvlines] +\diagbox{x}{y} & e & a & b & c \\ +e & e & a & b & c \\ +a & a & e & c & b \\ +b & b & c & e & a \\ +c & c & b & a & e +\end{NiceArray}$ -\[\begin{pNiceMatrix}[nullify-dots,xdots/line-style=loosely dotted] -a & b & 0 & & \Cdots & 0 \\ -b & a & b & \Ddots & & \Vdots \\ -0 & b & a & \Ddots & & \\ - & \Ddots & \Ddots & \Ddots & & 0 \\ -\Vdots & & & & & b \\ -0 & \Cdots & & 0 & b & a -\end{pNiceMatrix}\] -\section{Les nœuds PGF-Tikz créés par l'extension nicematrix} -\label{name} +\subsection{Filets en pointillés} -L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide) du tableau considéré. Ces nœuds sont -utilisés pour tracer les lignes en pointillés entre les cases du tableau. Toutefois, l'utilisateur peut aussi -utiliser directement ces nœuds (s'il a chargé Tikz\footnote{On rappelle que depuis la version 3.13, - \pkg{nicematrix} ne charge plus Tikz par défaut, mais seulement \textsc{pgf} (Tikz est une surcouche de - \textsc{pgf}).}). On commence par donner un nom au tableau (avec l'option |name|). Cela étant fait, les nœuds -sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où \textsl{nom} est le nom donné au tableau et $i$ et -$j$ les numéros de rangée et de colonne de la case considérée. + +Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande |\hdottedline| (fournie +par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes |\hline| et |\hdashline| +(cette dernière étant une commande de \pkg{arydshln}). \medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] -$\begin{pNiceMatrix}[name=~emphase#ma-matrice@] -1 & 2 & 3 \\ -4 & 5 & 6 \\ -7 & 8 & 9 -\end{pNiceMatrix}$ -\tikz[remember picture,overlay] - \draw ~emphase#(ma-matrice-2-2)@ circle (2mm) ; +\begin{BVerbatim}[baseline=c,boxwidth=9.5cm] +\begin{pNiceMatrix} +1 & 2 & 3 & 4 & 5 \\ +~emphase#\hdottedline@ +6 & 7 & 8 & 9 & 10 \\ +11 & 12 & 13 & 14 & 15 +\end{pNiceMatrix} \end{BVerbatim} -$\begin{pNiceMatrix}[name=ma-matrice] -1 & 2 & 3 \\ -4 & 5 & 6 \\ -7 & 8 & 9 +$\begin{pNiceMatrix} +1 & 2 & 3 & 4 & 5 \\ +\hdottedline +6 & 7 & 8 & 9 & 10 \\ +11 & 12 & 13 & 14 & 15 \end{pNiceMatrix}$ -\tikz[remember picture,overlay] - \draw (ma-matrice-2-2) circle (2mm) ; + + +\bigskip +Dans les environnements avec un préambule explicite (comme |{NiceTabular}|, |{NiceArray}|, etc.), il est possible +de dessiner un trait vertical en pointillés avec le spécificateur «|:|». \medskip -Ne pas oublier les options |remember picture| et |overlay|. +\begin{BVerbatim}[baseline=c,boxwidth=9.5cm] +\begin{pNiceArray}{CCCC~emphase#:@C} +1 & 2 & 3 & 4 & 5 \\ +6 & 7 & 8 & 9 & 10 \\ +11 & 12 & 13 & 14 & 15 +\end{pNiceArray} +\end{BVerbatim} +$\begin{pNiceArray}{CCCC:C} +1 & 2 & 3 & 4 & 5 \\ +6 & 7 & 8 & 9 & 10 \\ +11 & 12 & 13 & 14 & 15 +\end{pNiceArray}$ \bigskip -Dans l'exemple suivant, nous avons surligné toutes les cases de la matrice. -\[\begin{pNiceMatrix} -a & a + b & a + b + c \\ -a & a & a + b \\ -a & a & a -\CodeAfter -\begin{tikzpicture}[ - every node/.style = - { - blend mode = multiply, - inner sep = 0 pt , - fill = red!15 - } - ] -\node [fit = (1-1)] {} ; -\node [fit = (1-3)] {} ; -\node [fit = (2-2)] {} ; -\node [fit = (3-1)] {} ; -\node [fit = (3-3)] {} ; -\node [fit = (1-2)] {} ; -\node [fit = (2-1)] {} ; -\node [fit = (2-3)] {} ; -\node [fit = (3-2)] {} ; -\end{tikzpicture} -\end{pNiceMatrix}\] +Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour indiquer dans le préambule un trait +vertical en pointillés avec l'option |letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|. \bigskip -En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds supplémentaires (\emph{extra nodes} en -anglais) : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en -anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les seconds avec l'option -|create-large-nodes|.\footnote{Il existe aussi l'option |create-extra-nodes| qui est un alias pour la conjonction -de |create-medium-nodes| et |create-large-nodes|.} +\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie \pkg{nicematrix}) est chargée, les traits +verticaux et horizontaux que l'on insère rendent le tableau plus large ou plus long d'une quantité égale à la +largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+» mais pas pour |\cline|.}. Avec +\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|» ont le même effet. -\medskip -Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-medium|» au nom des nœuds normaux. Dans -l'exemple suivant, on a surligné tous les «nœuds moyens». Nous considérons que cet exemple se suffit à lui-même -comme définition de ces nœuds. -\[\begin{pNiceMatrix}[ - create-medium-nodes, - code-after = {\begin{tikzpicture} - [every node/.style = {fill = red!15, - blend mode = multiply, - inner sep = 0 pt}, - name suffix = -medium] - \node [fit = (1-1)] {} ; - \node [fit = (1-2)] {} ; - \node [fit = (1-3)] {} ; - \node [fit = (2-1)] {} ; - \node [fit = (2-2)] {} ; - \node [fit = (2-3)] {} ; - \node [fit = (3-1)] {} ; - \node [fit = (3-2)] {} ; - \node [fit = (3-3)] {} ; - \end{tikzpicture}}] -a & a + b & a + b + c \\ -a & a & a + b \\ -a & a & a -\end{pNiceMatrix}\] -\medskip -Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-large|» au nom des nœuds normaux. Dans l'exemple -suivant, on a surligné tous les «nœuds larges». Nous considérons que cet exemple se suffit à lui-même comme -définition de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les rangées et colonnes extérieures - (pour ces rangées et colonnes, voir p.~\pageref{exterior}).} -\[\begin{pNiceMatrix}[ - create-large-nodes, - code-after = {\begin{tikzpicture} - [every node/.style = {blend mode = multiply, - inner sep = 0 pt}, - name suffix = -large] - \node [fit = (1-1),fill = red!15] {} ; - \node [fit = (1-3),fill = red!15] {} ; - \node [fit = (2-2),fill = red!15] {} ; - \node [fit = (3-1),fill = red!15] {} ; - \node [fit = (3-3),fill = red!15] {} ; - \node [fit = (1-2),fill = blue!15] {} ; - \node [fit = (2-1),fill = blue!15] {} ; - \node [fit = (2-3),fill = blue!15] {} ; - \node [fit = (3-2),fill = blue!15] {} ; - \end{tikzpicture}}] -a & a + b & a + b + c \\ -a & a & a + b \\ -a & a & a -\end{pNiceMatrix}\] +\section{Les couleurs des rangées et des colonnes} +L'extension \pkg{colortbl} permet de colorier des cases, des rangées ou des colonnes d'un tableau. Néanmoins, +l'affichage du \textsc{pdf} résultant n'est pas toujours parfait, en particulier quand on utilise également des +filets. Dans certains lecteurs de \textsc{pdf}, des filets verticaux semblent disparaître. De fines lignes blanches +peuvent également apparaître. \medskip -Les «nœuds larges» de la première colonne et de la dernière colonne peuvent apparaître trop petits pour certains -usages. C'est pourquoi il est possible d'utiliser les options |left-margin| et |right-margin| pour ajouter de -l'espace des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la première colonne et de la -dernière colonne. Dans l'exemple suivant, nous avons utilisé les options |left-margin| et -|right-margin|.\footnote{Les options |left-margin| et |right-margin| prennent des dimensions comme valeurs mais, si - aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et elle est égale à |\arraycolsep| (par - défaut, 5~pt).Il existe aussi une option |margin| pour fixer à la fois |left-margin| et |right-margin|.} -\[\begin{pNiceMatrix}[ - create-large-nodes,left-margin,right-margin, - code-after = {\begin{tikzpicture} - [every node/.style = {blend mode = multiply, - inner sep = 0 pt}, - name suffix = -large] - \node [fit = (1-1),fill = red!15] {} ; - \node [fit = (1-3),fill = red!15] {} ; - \node [fit = (2-2),fill = red!15] {} ; - \node [fit = (3-1),fill = red!15] {} ; - \node [fit = (3-3),fill = red!15] {} ; - \node [fit = (1-2),fill = blue!15] {} ; - \node [fit = (2-1),fill = blue!15] {} ; - \node [fit = (2-3),fill = blue!15] {} ; - \node [fit = (3-2),fill = blue!15] {} ; - \end{tikzpicture}}] -a & a + b & a + b + c \\ -a & a & a + b \\ -a & a & a -\end{pNiceMatrix}\] +L'extension \pkg{nicematrix} propose des outils similaires qui ne présentent pas ces inconvénients. Elle propose +une clé |code-before|\footnote{Il existe aussi une clé |code-after| : cf. p.~\pageref{code-after}.} pour du code +qui sera exécuté \emph{avant} le tracé du tableau. Dans ce |code-before|, de nouvelles commandes sont disponibles : +|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors| et |\chessboardcolors|. +\label{code-before} \medskip -Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options |extra-left-margin| et -|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges». Dans l'exemple suivant, nous -avons utilisé |extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt. -\[\begin{pNiceMatrix}[ - create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt, - code-after = {\begin{tikzpicture} - [every node/.style = {blend mode = multiply, - inner sep = 0 pt}, - name suffix = -large] - \node [fit = (1-1),fill = red!15] {} ; - \node [fit = (1-3),fill = red!15] {} ; - \node [fit = (2-2),fill = red!15] {} ; - \node [fit = (3-1),fill = red!15] {} ; - \node [fit = (3-3),fill = red!15] {} ; - \node [fit = (1-2),fill = blue!15] {} ; - \node [fit = (2-1),fill = blue!15] {} ; - \node [fit = (2-3),fill = blue!15] {} ; - \node [fit = (3-2),fill = blue!15] {} ; - \end{tikzpicture}}] -a & a + b & a + b + c \\ -a & a & a + b \\ -a & a & a -\end{pNiceMatrix}\] +Ces outils sont indépendants de \pkg{colortbl}.\footnote{On peut donc colorier les filets, les cellules, les + rangées, les colonnes, etc. sans charger \pkg{colortbl}. Le présent document ne charge pas \pkg{colortbl}.} \medskip -Dans le cas présent, si on veut un contrôle sur la hauteur des rangées, on peut ajouter un |\strut| dans chaque -rangée du tableau. -\[\begin{pNiceMatrix}[ - create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt, - code-after = {\begin{tikzpicture} - [every node/.style = {blend mode = multiply, - inner sep = 0 pt}, - name suffix = -large] - \node [fit = (1-1),fill = red!15] {} ; - \node [fit = (1-3),fill = red!15] {} ; - \node [fit = (2-2),fill = red!15] {} ; - \node [fit = (3-1),fill = red!15] {} ; - \node [fit = (3-3),fill = red!15] {} ; - \node [fit = (1-2),fill = blue!15] {} ; - \node [fit = (2-1),fill = blue!15] {} ; - \node [fit = (2-3),fill = blue!15] {} ; - \node [fit = (3-2),fill = blue!15] {} ; - \end{tikzpicture}}] -\strut a & a + b & a + b + c \\ -\strut a & a & a + b \\ -\strut a & a & a -\end{pNiceMatrix}\] +Toutes ces commandes acceptent un argument optionnel (entre crochets et en première position) qui est le modèle +colorimétrique pour la spécification des couleurs. -\bigskip -On explique plus loin comment surligner les nœuds créés par Tikz (cf. p. \pageref{highlight}). - -\section{Le code-after} - -\label{code-after} +\medskip +\begin{itemize} +\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de \pkg{colortbl}. -L'option |code-after| peut être utilisée pour indiquer du code qui sera exécuté après la construction de la matrice, -et donc, en particulier, après la construction de tous les nœuds. +Elle prend en arguments obligatoires une couleur et une liste de cases sous le format $i$-$j$ où $i$ est le +numéro de ligne et $j$ le numéro de colonne. -\textbf{Si on a chargé Tikz}\footnote{On rappelle que depuis la version 3.13, \pkg{nicematrix} ne charge plus Tikz - par défaut, mais seulement \textsc{pgf} (Tikz est une surcouche de \textsc{pgf}).}, on peut accéder à ces nœuds -avec des instructions Tikz classiques. Les nœuds devront être désignés sous la forme $i$-$j$ (sans le préfixe -correspondant au nom de l'environnement). +\medskip +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[boxwidth=10cm,baseline=c] +\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@] +\hline +a & b & c \\ \hline +e & f & g \\ \hline +h & i & j \\ \hline +\end{NiceTabular} +\end{BVerbatim} +\begin{NiceTabular}{|C|C|C|}[code-before = \cellcolor{red!15}{3-1,2-2,1-3}] +\hline +a & b & c \\ \hline +e & f & g \\ \hline +h & i & j \\ \hline +\end{NiceTabular} +\end{scope} -De plus, une commande spéciale, nommée |\line| est disponible pour tracer directement des lignes en pointillés -entre les nœuds). Elle peut par exemple être utilisée pour tracer une ligne entre deux cases adjacentes comme dans -l'exemple suivant. -\label{line-in-code-after} +\bigskip +\item La commande |\rectanglecolor| prend trois arguments obligatoires. Le premier est la couleur, les deux +suivants fournissent la case en haut à gauche et la case en bas à droite du rectangle. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] -\NiceMatrixOptions{xdots/shorten = 0.6 em} -\begin{pNiceMatrix}[~emphase#code-after=\line{2-2}{3-3}@] -I & 0 & \Cdots &0 \\ -0 & I & \Ddots &\Vdots\\ -\Vdots &\Ddots & I &0 \\ -0 &\Cdots & 0 &I -\end{pNiceMatrix} -\end{BVerbatim} \begin{scope} -\NiceMatrixOptions{xdots/shorten = 0.6 em} -$\begin{pNiceMatrix}[code-after=\line{2-2}{3-3}] -I & 0 & \Cdots &0 \\ -0 & I & \Ddots &\Vdots\\ -\Vdots &\Ddots & I &0 \\ -0 &\Cdots & 0 &I -\end{pNiceMatrix}$ +\hfuzz=10cm +\begin{BVerbatim}[boxwidth=10cm,baseline=c] +\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\rectanglecolor{blue!15}{2-2}{3-3}@] +\hline +a & b & c \\ \hline +e & f & g \\ \hline +h & i & j \\ \hline +\end{NiceTabular} +\end{BVerbatim} +\begin{NiceTabular}{|C|C|C|}[code-before = \rectanglecolor{blue!15}{2-2}{3-3}] +\hline +a & b & c \\ \hline +e & f & g \\ \hline +h & i & j \\ \hline +\end{NiceTabular} \end{scope} + + +\bigskip +\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de \pkg{colortbl}. Son premier argument +obligatoire est la couleur et le deuxième est une liste de numéros de rangées ou bien d'intervalles de rangées sous +la forme $a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à partir de la rangée~$a$). + \medskip -Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on peut spécifier les instructions du -|code-after| à la fin de l'environnement, après le mot-clé |\CodeAfter|. Pour un exemple, voir page -\pageref{exemple-CodeAfter}. -\section{Les environnements \{NiceArray\} et \{NiceTabular\}} -\label{NiceArray} +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[boxwidth=9cm,baseline=c] +$\begin{NiceArray}{LLL}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@] +a_1 & b_1 & c_1 \\ +a_2 & b_2 & c_2 \\ +a_3 & b_3 & c_3 \\ +a_4 & b_4 & c_4 \\ +a_5 & b_5 & c_5 \\ +a_6 & b_6 & c_6 \\ +a_7 & b_7 & c_7 \\ +a_8 & b_8 & c_8 \\ +a_9 & b_9 & c_9 \\ +a_{10} & b_{10} & c_{10} \\ +\end{NiceArray}$ +\end{BVerbatim} +% +$\begin{NiceArray}{LLL}% +[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}] +a_1 & b_1 & c_1 \\ +a_2 & b_2 & c_2 \\ +a_3 & b_3 & c_3 \\ +a_4 & b_4 & c_4 \\ +a_5 & b_5 & c_5 \\ +a_6 & b_6 & c_6 \\ +a_7 & b_7 & c_7 \\ +a_8 & b_8 & c_8 \\ +a_9 & b_9 & c_9 \\ +a_{10} & b_{10} & c_{10} \\ +\end{NiceArray}$ +\end{scope} -Les environnements |{NiceArray}| et |{NiceTabular}| sont similaires aux environnements |{array}| et |{tabular}|. -L'argument obligatoire est le préambule du tableau. Néanmoins, pour des raisons techniques, l'utilisateur doit -utiliser les lettres |L|, |C| et |R|\footnote{Les types de colonnes |L|, |C| et |R| sont définis localement à - l'intérieur de |{NiceArray}| avec la commande |\newcolumntype| de \pkg{array}. Cette définition masque une - éventuelle définition précédente.} au lieu de |l|, |c| et |r|. Dans une commande |\multicolumn|, on doit -également utiliser les lettres |L|, |C| et |R|. -Il est possible d'utiliser les constructions |p{...}|, |m{...}|, |b{...}|, |w{...}{...}|, |W{...}{...}|, \verb+|+, -|>{...}|, |<{...}|, |@{...}|, |!{...}| et |*{n}{...}|. Néanmoins, dans l'environnement |{NiceArray}| (et ses -variantes), le contenu des colonnes de type |w| ou |W| est composé en mode mathématique (dans |{array}| de -\pkg{array}, elles sont composées en mode texte). +\bigskip +\item La commande |\columncolor| doit son nom à la commande |\columncolor| de \pkg{colortbl}. Sa syntaxe est +similaire à celle de |\rowcolor|. \bigskip -Sans surprise, l'extension \pkg{nicematrix} fournit également les variantes |{pNiceArray}|, |{vNiceArray}|, -|{VNiceArray}|, |{bNiceArray}| et |{BNiceArray}|. +\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande |\rowcolors| de +\pkg{xcolor}\footnote{La commande |\rowcolors| de \pkg{xcolor} est disponible quand \pkg{xcolor} est chargé avec + l'option |table|.}. Le \emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les rangées avec +les deux couleurs à partir de la rangée dont le numéro est donné en premier argument (obligatoire). + +\medskip +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +\begin{NiceTabular}{LR}[hlines,code-before = ~emphase#\rowcolors{1}{blue!10}{}@] +Pierre & 12 \\ +Jacques & 8 \\ +Stéphanie & 18 \\ +Amélie & 20 \\ +Henri & 14 \\ +Estelle & 15 +\end{NiceTabular} +\end{BVerbatim} +\begin{NiceTabular}{LR}[hlines,code-before = \rowcolors{1}{blue!10}{},baseline=3] +Pierre & 12 \\ +Jacques & 8 \\ +Stéphanie & 18 \\ +Amélie & 20 \\ +Henri & 14 \\ +Estelle & 15 +\end{NiceTabular} +\end{scope} + -\interitem -L'un des intérêts de |{pNiceArray}| par rapport à |{pNiceMatrix}| est la possibilité de tracer des filets verticaux -: \bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\left[\begin{NiceArray}{CCCC|C} -a_1 & ? & \Cdots & ? & ? \\ -0 & & \Ddots & \Vdots & \Vdots\\ -\Vdots & \Ddots & \Ddots & ? \\ -0 & \Cdots & 0 & a_n & ? -\end{NiceArray}\right]$ -\end{BVerbatim} -$\left[\begin{NiceArray}{CCCC|C} -a_1 & ? & \Cdots & ? & ? \\ -0 & & \Ddots & \Vdots & \Vdots\\ -\Vdots & \Ddots & \Ddots & ? \\ -0 & \Cdots & 0 & a_n & ? -\end{NiceArray}\right]$ +\item La commande |\chessboardcolors| prend en arguments obligatoires deux couleurs et colorie les cases en +quinconces avec les deux couleurs. -\interitem -Un autre intérêt est la possibilité d'utiliser plusieurs types d'alignement de colonnes. +\medskip +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +$\begin{pNiceMatrix}[R,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@] +1 & -1 & 1 \\ +-1 & 1 & -1 \\ +1 & -1 & 1 +\end{pNiceMatrix}$ +\end{BVerbatim} +$\begin{pNiceMatrix}% +[baseline=1, R, margin, code-before = \chessboardcolors{red!15}{blue!15}] +1 & -1 & 1 \\ +-1 & 1 & -1 \\ +1 & -1 & 1 +\end{pNiceMatrix}$ +\end{scope} + +\medskip +On a utilisé la clé |R| qui impose que toutes les colonnes soient alignées à droite (cf. p.~\pageref{key-R}). +\end{itemize} \bigskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\begin{pNiceArray}{LCR} -a_{11} & \Cdots & a_{1n} \\ -a_{21} & & a_{2n} \\ -\Vdots & & \Vdots \\ -a_{n-1,1} & \Cdots & a_{n-1,n} -\end{pNiceArray}$ +On remarquera que ces commandes sont compatibles avec les commandes de \pkg{booktabs} (|\toprule|, |\midrule|, +|\bottomrule|, etc). + +\medskip +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[baseline=c,boxwidth=8.5cm] +\begin{NiceTabular}{LSSSS}% +[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}] +~emphase#\toprule@ +\Block{2-1}{Produit} \\ +\Block{1-3}{dimensions (cm)} & & & +\Block{2-1}{\rotate Prix} \\ +~emphase#\cmidrule(rl){2-4}@ + & L & l & h \\ +~emphase#\midrule@ +petit & 3 & 5.5 & 1 & 30 \\ +moyen & 5.5 & 8 & 1.5 & 50.5 \\ +premium & 8.5 & 10.5 & 2 & 80 \\ +extra & 8.5 & 10 & 1.5 & 85.5 \\ +spécial & 12 & 12 & 0.5 & 70 \\ +~emphase#\bottomrule@ +\end{NiceTabular} \end{BVerbatim} -$\begin{pNiceArray}{LCR} -a_{11} & \Cdots & a_{1n} \\ -a_{21} & & a_{2n} \\ -\Vdots & & \Vdots \\ -a_{n-1,1} & \Cdots & a_{n-1,n} -\end{pNiceArray}$ +\begin{NiceTabular}[c]{LSSSS}% +[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}] +\toprule +\Block{2-1}{Produit} & +\Block{1-3}{dimensions (cm)} & & & +\Block{2-1}{\rotate Prix} \\ +\cmidrule(rl){2-4} + & L & l & h \\ +\midrule +petit & 3 & 5.5 & 1 & 30 \\ +moyen & 5.5 & 8 & 1.5 & 50.5 \\ +premium & 8.5 & 10.5 & 2 & 80 \\ +extra & 8.5 & 10 & 1.5 & 85.5 \\ +spécial & 12 & 12 & 0.5 & 70 \\ +\bottomrule +\end{NiceTabular} +\end{scope} + +\medskip +On a utilisé le type de colonne |S| de \pkg{siunitx}. +\section{La largeur des colonnes} +\label{width} -\interitem -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 ou asymétriques. +Dans les environnements avec un préambule explicite (comme |{NiceTabular}|, |{NiceArray}|, etc.), il est possible +de fixer la largeur d'une colonne avec les lettres classiques |w| et |W| de l'extension \pkg{array}. Dans +|{NiceTabular}|, les cases des colonnes de ce type sont composées en mode texte mais, dans |{NiceArray}|, +|{pNiceArray}|, etc., elles sont composées en mode mathématique (alors que dans |{array}| de \pkg{array}, elles +sont composées en mode texte). \medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] -$\begin{~emphase#NiceArrayWithDelims@} - {\downarrow}{\uparrow}{CCC}[margin] -1 & 2 & 3 \\ -4 & 5 & 6 \\ -7 & 8 & 9 -\end{~emphase#NiceArrayWithDelims@}$ +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +\begin{NiceTabular}{~emphase#Wc{2cm}@CC}[hvlines] +Paris & New York & Madrid \\ +Berlin & London & Roma \\ +Rio & Tokyo & Oslo +\end{NiceTabular} \end{BVerbatim} -$\begin{NiceArrayWithDelims} - {\downarrow}{\uparrow}{CCC}[margin] -1 & 2 & 3 \\ -4 & 5 & 6 \\ -7 & 8 & 9 -\end{NiceArrayWithDelims}$ +\begin{NiceTabular}{Wc{2cm}CC}[hvlines] +Paris & New York & Madrid \\ +Berlin & London & Roma \\ +Rio & Tokyo & Oslo +\end{NiceTabular} -\bigskip -\subsection{Le positionnement vertical des matrices} -L'extension \pkg{nicematrix} propose aussi une option |baseline| pour la position verticale des matrices. Cette -option |baseline| prend comme valeur un entier qui indique le numéro de rangée dont la ligne de base servira de -ligne de base pour le tableau. +\bigskip +Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la largeur \emph{minimale} de toutes +les colonnes de la matrice directement avec l'option |columns-width|. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=9cm] -$A = \begin{pNiceMatrix}[~emphase#baseline=2@] -\frac{1}{\sqrt{1+p^2}} & p & 1-p \\ -1 & 1 & 1 \\ -1 & p & 1+p +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +$\begin{pNiceMatrix}[~emphase#columns-width = 1cm@] +1 & 12 & -123 \\ +12 & 0 & 0 \\ +4 & 1 & 2 \end{pNiceMatrix}$ \end{BVerbatim} -$A = \begin{pNiceMatrix}[baseline=2] -\frac{1}{\sqrt{1+p^2}} & p & 1-p \\ -1 & 1 & 1 \\ -1 & p & 1+p +$\begin{pNiceMatrix}[columns-width = 1cm] +1 & 12 & -123 \\ +12 & 0 & 0 \\ +4 & 1 & 2 \end{pNiceMatrix}$ +\medskip +Notez que l'espace inséré entre deux colonnes (égal à 2 |\tabcolsep| dans |{NiceTabular}| et à 2 |\arraycolsep| +dans les autres environnements) n'est pas supprimé (il est évidemment possible de le supprimer en mettant +|\tabcolsep| ou |\arraycolsep| à~$0$ avant). -\interitem -L'option |baseline| peut aussi prendre les trois valeurs spéciales |t|, |c| et |b|. Ces trois lettres peuvent aussi -être utilisées de manière absolue comme pour l'option de l'environnement |{array}| de \pkg{array}. La valeur -initiale de |baseline| est~|c|. +\bigskip +Il est possible de donner la valeur spéciale |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.\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] +$\begin{pNiceMatrix}[~emphase#columns-width = auto@] +1 & 12 & -123 \\ +12 & 0 & 0 \\ +4 & 1 & 2 +\end{pNiceMatrix}$ +\end{BVerbatim} +$\begin{pNiceMatrix}[columns-width = auto] +1 & 12 & -123 \\ +12 & 0 & 0 \\ +4 & 1 & 2 +\end{pNiceMatrix}$ \bigskip -Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste. -On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première -rangée (avec |{array}| de {array}, il faut utiliser |\firsthline|\footnote{On peut aussi utiliser |\firsthline| - avec |{NiceArray}|.}). +Sans surprise, il est possible de fixer la largeur minimale de toutes les colonnes de toutes les matrices dans une +certaine portion de document avec la commande |\NiceMatrixOptions|.\par\nobreak -\smallskip -\begin{BVerbatim}[baseline=c,boxwidth=9cm] -\begin{enumerate} -\item un item -\smallskip -\item \renewcommand{\arraystretch}{1.2} -$\begin{NiceArray}[t]{LCCCCCC} -\hline -n & 0 & 1 & 2 & 3 & 4 & 5 \\ -u_n & 1 & 2 & 4 & 8 & 16 & 32 -\hline -\end{NiceArray}$ -\end{enumerate} +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=8.5cm] +~emphase#\NiceMatrixOptions{columns-width=10mm}@ +$\begin{pNiceMatrix} +a & b \\ c & d +\end{pNiceMatrix} += +\begin{pNiceMatrix} +1 & 1245 \\ 345 & 2 +\end{pNiceMatrix}$ \end{BVerbatim} -% -\begin{minipage}{5cm} -\begin{enumerate} -\item un item -\smallskip -\item \renewcommand{\arraystretch}{1.2} -$\begin{NiceArray}[t]{LCCCCCC} -\hline -n & 0 & 1 & 2 & 3 & 4 & 5 \\ -u_n & 1 & 2 & 4 & 8 & 16 & 32 \\ -\hline -\end{NiceArray}$ -\end{enumerate} -\end{minipage} +\begin{scope} +\NiceMatrixOptions{columns-width=10mm} +$\begin{pNiceMatrix} +a & b \\ +c & d +\end{pNiceMatrix} += +\begin{pNiceMatrix} +1 & 1245 \\ +345 & 2 +\end{pNiceMatrix}$ +\end{scope} \bigskip -Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|, -|\bottomrule| et |\midrule|.\par\nobreak +Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices auront leurs colonnes de la même +largeur, égale à la largeur de la case la plus large de toutes les matrices de la zone. Cette construction utilise +l'environnement |{NiceMatrixBlock}| avec l'option |auto-columns-width|\footnote{Pour le moment, c'est le seul + usage de l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}. +L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec la commande |\Block| présentée précédemment dans +ce document (cf.~p.~\pageref{Block}). -\smallskip -\begin{BVerbatim}[baseline=c,boxwidth=9cm] -\begin{enumerate} -\item an item -\smallskip -\item -$\begin{NiceArray}[t]{LCCCCCC} -~emphase#\toprule@ -n & 0 & 1 & 2 & 3 & 4 & 5 \\ -~emphase#\midrule@ -u_n & 1 & 2 & 4 & 8 & 16 & 32 -~emphase#\bottomrule@ -\end{NiceArray}$ -\end{enumerate} +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=8.5cm] +~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@ +$\begin{array}{c} +\begin{bNiceMatrix} + 9 & 17 \\ -2 & 5 + \end{bNiceMatrix} \\ \\ +\begin{bNiceMatrix} + 1 & 1245345 \\ 345 & 2 +\end{bNiceMatrix} +\end{array}$ +~emphase#\end{NiceMatrixBlock}@ \end{BVerbatim} -\begin{minipage}{5cm} -\begin{enumerate} -\item an item -\smallskip -\item -$\begin{NiceArray}[t]{LCCCCCC} -\toprule -n & 0 & 1 & 2 & 3 & 4 & 5 \\ -\midrule -u_n & 1 & 2 & 4 & 8 & 16 & 32 \\ -\bottomrule -\end{NiceArray}$ -\end{enumerate} -\end{minipage} - +\begin{NiceMatrixBlock}[auto-columns-width] +$\begin{array}{c} +\begin{bNiceMatrix} + 9 & 17 \\ -2 & 5 + \end{bNiceMatrix} \\ \\ +\begin{bNiceMatrix} + 1 & 1245345 \\ 345 & 2 +\end{bNiceMatrix} +\end{array}$ +\end{NiceMatrixBlock} +\medskip +\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.} @@ -1073,7 +1071,7 @@ Les environnements de \pkg{nicematrix} permettent de composer des rangées et de \label{exterior} Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$ (et non $1$). Il en est de même pour -la «première rangée». +la «première colonne». \begin{Verbatim} $\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots] @@ -1095,6 +1093,10 @@ L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\ & C_1 & \Cdots & & C_4 & \end{pNiceMatrix}\] +\medskip +Les lignes pointillées ont été tracées avec les outils présentés p.~\pageref{Cdots}. + + \bigskip Il y a plusieurs remarques à formuler. % @@ -1171,16 +1173,11 @@ L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\ \emph{Remarques} \begin{itemize}[beginpenalty=10000] -\item Comme on peut le voir dans l'exemple précédent, un filet horizontal (tracé avec |\hline|) ne s'étend pas -dans les colonnes extérieures et un filet vertical (spécifié par un caractère «\verb+|+» dans le préambule du -tableau) ne s'étend pas dans les rangées extérieures.\footnote{Ce dernier point n'est pas valable si on a chargé, - en plus de \pkg{nicematrix}, l'extension \pkg{arydshln}. Les extensions \pkg{nicematrix} et \pkg{arydshln} ne - 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+|+.} - -Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais), on aura -peut-être intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}. +\item Comme on peut le voir dans l'exemple précédent, les filets horizontaux et verticaux ne s'étendent pas dans +les rangées et colonnes extérieures. + +Néanmoins, si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais), on +aura sans doute intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}. \item Une spécification de couleur présente dans |code-for-first-row| s'applique à une ligne pointillée tracée dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/color|). Idem pour les autres. \item Sans surprise, une éventuelle option |columns-width| (décrite p.~\pageref{width}) ne s'applique pas à la @@ -1192,476 +1189,540 @@ dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/c +\section{Les lignes en pointillés continues} -\section[Les lignes en pointillés pour séparer les rangées et les colonnes]{Les lignes en pointillés pour séparer les rangées\\ et les colonnes} +\label{Cdots} +À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies : |\Ldots|, +|\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|. Ces commandes sont conçues pour être utilisées à la place de |\dots|, +|\cdots|, |\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans \pkg{nicematrix}, est une + variante de |\ddots| avec les points allant vers le haut. Si \pkg{mathdots} est chargée, la + version de \pkg{mathdots} est utilisée. Elle correspond à la commande |\adots| de \pkg{unicode-math}.} +\newcounter{fniddots} +\setcounter{fniddots}{\thefootnote} -Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande |\hdottedline| (fournie -par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes |\hline| et |\hdashline| -(cette dernière étant une commande de \pkg{arydshln}). +\smallskip +Chacune de ces commandes doit être utilisée seule dans la case du tableau et elle trace une ligne en pointillés +entre les premières cases non vides\footnote{La définition précise de ce qui est considéré comme une «case vide» + est donnée plus loin (cf. p.~\pageref{empty-cells}).} situées de part et d'autre de la case courante. Bien +entendu, pour |\Ldots| et |\Cdots|, c'est une ligne horizontale ; pour |\Vdots|, c'est une ligne verticale et pour +|\Ddots| et |\Iddots|, ce sont des lignes diagonales. On peut changer la couleur d'une ligne avec +l'option~|color|.\footnote{Il est aussi possible de changer la couleur de toutes ces lignes pointillées avec + l'option |xdots/color| (\textsl{xdots} pour rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) : + cf. p.~\pageref{customization}). +}\par\nobreak -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=9.5cm] -\begin{pNiceMatrix} -1 & 2 & 3 & 4 & 5 \\ -~emphase#\hdottedline@ -6 & 7 & 8 & 9 & 10 \\ -11 & 12 & 13 & 14 & 15 -\end{pNiceMatrix} +\bigskip +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +\begin{bNiceMatrix} +a_1 & \Cdots & & & a_1 \\ +\Vdots & a_2 & \Cdots & & a_2 \\ + & \Vdots & \Ddots[color=red] \\ +\\ +a_1 & a_2 & & & a_n +\end{bNiceMatrix} +\end{BVerbatim} +$\begin{bNiceMatrix} +a_1 & \Cdots & & & a_1 \\ +\Vdots & a_2 & \Cdots & & a_2 \\ + & \Vdots & \Ddots[color=red] \\ +\\ +a_1 & a_2 & & & a_n +\end{bNiceMatrix}$ + + + + +\interitem +Pour représenter la matrice nulle, on peut choisir d'utiliser le codage suivant :\par\nobreak + +\bigskip +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +\begin{bNiceMatrix} +0 & \Cdots & 0 \\ +\Vdots & & \Vdots \\ +0 & \Cdots & 0 +\end{bNiceMatrix} +\end{BVerbatim} +$\begin{bNiceMatrix} +0 & \Cdots & 0 \\ +\Vdots & & \Vdots \\ +0 & \Cdots & 0 +\end{bNiceMatrix}$ + +\bigskip +On peut néanmoins souhaiter une matrice plus grande. Habituellement, dans un tel cas, les utilisateurs de LaTeX +ajoutent une nouvelle ligne et une nouvelle colonne. Il est possible d'utiliser la même méthode avec +\pkg{nicematrix} :\par\nobreak + +\bigskip +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +\begin{bNiceMatrix} +0 & \Cdots & \Cdots & 0 \\ +\Vdots & & & \Vdots \\ +\Vdots & & & \Vdots \\ +0 & \Cdots & \Cdots & 0 +\end{bNiceMatrix} \end{BVerbatim} -$\begin{pNiceMatrix} -1 & 2 & 3 & 4 & 5 \\ -\hdottedline -6 & 7 & 8 & 9 & 10 \\ -11 & 12 & 13 & 14 & 15 -\end{pNiceMatrix}$ +$\begin{bNiceMatrix} +0 & \Cdots & \Cdots & 0 \\ +\Vdots & & & \Vdots \\ +\Vdots & & & \Vdots \\ +0 & \Cdots & \Cdots & 0 +\end{bNiceMatrix}$ +\bigskip +Dans la première colonne de cet exemple, il y a deux instructions |\Vdots| mais une seule ligne en pointillés sera +tracée (il n'y a pas d'objets qui se superposent dans le fichier \textsc{pdf} résultant\footnote{Et il n'est pas + possible de tracer une ligne |\Ldots| et une ligne |\Cdots| entre les mêmes cases.}). \bigskip -Dans les environnements avec un préambule explicite (comme |{NiceArray}|, |{pNiceArray}|, etc.), il est possible de -dessiner un trait vertical en pointillés avec le spécificateur «|:|». +En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus rapidement avec le codage suivant +:\par\nobreak -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=9.5cm] -\begin{pNiceArray}{CCCC~emphase#:@C} -1 & 2 & 3 & 4 & 5 \\ -6 & 7 & 8 & 9 & 10 \\ -11 & 12 & 13 & 14 & 15 -\end{pNiceArray} +\bigskip +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +\begin{bNiceMatrix} +0 & \Cdots & & 0 \\ +\Vdots & & & \\ + & & & \Vdots \\ +0 & & \Cdots & 0 +\end{bNiceMatrix} \end{BVerbatim} -$\begin{pNiceArray}{CCCC:C} -1 & 2 & 3 & 4 & 5 \\ -6 & 7 & 8 & 9 & 10 \\ -11 & 12 & 13 & 14 & 15 -\end{pNiceArray}$ +$\begin{bNiceMatrix} +0 & \Cdots & & 0 \\ +\Vdots & & & \\ + & & & \Vdots \\ +0 & & \Cdots & 0 +\end{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{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 +pourquoi l'extension \pkg{nicematrix} fournit une commande~|\Hspace| qui est une variante de |\hspace| transparente +pour la construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak \bigskip -Ces lignes en pointillés ne s'étendent pas dans les rangées et colonnes extérieures.\par\nobreak +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +\begin{bNiceMatrix} +0 & \Cdots & ~emphase#\Hspace*{1cm}@ & 0 \\ +\Vdots & & & \Vdots \\~emphase#[1cm]@ +0 & \Cdots & & 0 +\end{bNiceMatrix} +\end{BVerbatim} +$\begin{bNiceMatrix} +0 & \Cdots & \Hspace*{1cm} & 0 \\ +\Vdots & & & \Vdots \\[1cm] +0 & \Cdots & & 0 +\end{bNiceMatrix}$ + +\subsection{L'option nullify-dots} +Considérons la matrice suivante qui a été composée classiquement avec l'environnement |{pmatrix}| de +\pkg{amsmath}.\par\nobreak \medskip -\begin{BVerbatim}[baseline=c,boxwidth=9.5cm] -$\begin{pNiceArray}{CCC:C}% - [first-row,last-col, - code-for-first-row = \color{blue}\scriptstyle, - code-for-last-col = \color{blue}\scriptstyle ] -C_1 & C_2 & C_3 & C_4 \\ -1 & 2 & 3 & 4 & L_1 \\ -5 & 6 & 7 & 8 & L_2 \\ -9 & 10 & 11 & 12 & L_3 \\ -\hdottedline -13 & 14 & 15 & 16 & L_4 -\end{pNiceArray}$ +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +$A = \begin{pmatrix} +h & i & j & k & l & m \\ +x & & & & & x +\end{pmatrix}$ \end{BVerbatim} -$\begin{pNiceArray}{CCC:C}% - [first-row,last-col, - code-for-first-row = \color{blue}\scriptstyle, - code-for-last-col = \color{blue}\scriptstyle ] -C_1 & C_2 & C_3 & C_4 \\ -1 & 2 & 3 & 4 & L_1 \\ -5 & 6 & 7 & 8 & L_2 \\ -9 & 10 & 11 & 12 & L_3 \\ -\hdottedline -13 & 14 & 15 & 16 & L_4 -\end{pNiceArray}$ - -\bigskip -Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour indiquer dans le préambule un trait -vertical en pointillés avec l'option |letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|. +$A = \begin{pmatrix} +h & i & j & k & l & m \\ +x & & & & & x +\end{pmatrix}$ \bigskip -\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie \pkg{nicematrix}) est chargée, les traits -verticaux et horizontaux que l'on insère rendent le tableau plus large ou plus long d'une quantité égale à la -largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+» mais pas pour |\cline|.}. Avec -\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|» ont le même effet. +Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie de la matrice est +modifiée.\par\nobreak -\section{La largeur des colonnes} -\label{width} +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +$B = \begin{pmatrix} +h & i & j & k & l & m \\ +x & \ldots & \ldots & \ldots & \ldots & x +\end{pmatrix}$ +\end{BVerbatim} +$B = \begin{pmatrix} +h & i & j & k & l & m \\ +x & \ldots & \ldots & \ldots & \ldots & x +\end{pmatrix}$ -Dans les environnements avec un préambule explicite (comme |{NiceArray}|, |{pNiceArray}|, etc.), il est possible de -fixer la largeur d'une colonne avec les lettres classiques |w| et |W| de l'extension \pkg{array}. Dans les -environnements de \pkg{nicematrix}, les cases des colonnes de ce type sont composées en mode mathématique (alors -que dans |{array}| de \pkg{array}, elles sont composées en mode texte). +\bigskip +Par défaut, avec \pkg{nicematrix}, si nous remplaçons |{pmatrix}| par |{pNiceMatrix}| et |\ldots| par |\Ldots|, la +géométrie de la matrice n'est pas changée.\par\nobreak \medskip \begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\begin{pNiceArray}{~emphase#Wc{1cm}@CC} -1 & 12 & -123 \\ -12 & 0 & 0 \\ -4 & 1 & 2 -\end{pNiceArray}$ +$C = \begin{pNiceMatrix} +h & i & j & k & l & m \\ +x & \Ldots & \Ldots & \Ldots & \Ldots & x +\end{pNiceMatrix}$ \end{BVerbatim} -$\begin{pNiceArray}{Wc{1cm}CC} -1 & 12 & -123 \\ -12 & 0 & 0 \\ -4 & 1 & 2 -\end{pNiceArray}$ - +$C = \begin{pNiceMatrix} +h & i & j & k & l & m \\ +x & \Ldots & \Ldots & \Ldots & \Ldots & x +\end{pNiceMatrix}$ \bigskip -Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la largeur \emph{minimale} de toutes -les colonnes de la matrice directement avec l'option |columns-width|. +On pourrait toutefois préférer la géométrie de la première matrice $A$ et vouloir avoir la même géométrie avec une +ligne en pointillés continue dans la seconde rangée. C'est possible en utilisant l'option |nullify-dots| (et une +seule instruction |\Ldots| suffit).\par\nobreak \medskip \begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\begin{pNiceMatrix}[~emphase#columns-width = 1cm@] -1 & 12 & -123 \\ -12 & 0 & 0 \\ -4 & 1 & 2 +$D = \begin{pNiceMatrix}[~emphase#nullify-dots@] +h & i & j & k & l & m \\ +x & \Ldots & & & & x \end{pNiceMatrix}$ \end{BVerbatim} -$\begin{pNiceMatrix}[columns-width = 1cm] -1 & 12 & -123 \\ -12 & 0 & 0 \\ -4 & 1 & 2 +$D = \begin{pNiceMatrix}[nullify-dots] +h & i & j & k & l & m \\ +x & \Ldots & & & & x \end{pNiceMatrix}$ \medskip -Noter que l'espace inséré entre deux colonnes (égal à 2 |\arraycolsep|) n'est pas supprimé (il est évidemment -possible de le supprimer en mettant |\arraycolsep| à~$0$ avant). +L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes) horizontalement mais aussi +verticalement. -\bigskip -Il est possible de donner la valeur spéciale |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.\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 + +\subsection{La commande \textbackslash Hdotsfor} + +Certaines personnes utilisent habituellement la commande |\hdotsfor| de l'extension \pkg{amsmath} pour tracer des +lignes en pointillés horizontales dans une matrice. Dans les environnements de \pkg{nicematrix}, il convient +d'utiliser |\Hdotsfor| à la place pour avoir les lignes en pointillés similaires à toutes celles tracées par +l'extension \pkg{nicematrix}. + +Comme avec les autres commandes de \pkg{nicematrix} (comme |\Cdots|, |\Ldots|, |\Vdots|, etc.), la ligne en +pointillés tracée par |\Hdotsfor| s'étend jusqu'au contenu des cases de part et d'autre. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\begin{pNiceMatrix}[~emphase#columns-width = auto@] -1 & 12 & -123 \\ -12 & 0 & 0 \\ -4 & 1 & 2 +\begin{BVerbatim}[baseline=c,boxwidth=7cm] +$\begin{pNiceMatrix} +1 & 2 & 3 & 4 & 5 \\ +1 & ~emphase#\Hdotsfor{3}@ & 5 \\ +1 & 2 & 3 & 4 & 5 \\ +1 & 2 & 3 & 4 & 5 \end{pNiceMatrix}$ \end{BVerbatim} -$\begin{pNiceMatrix}[columns-width = auto] -1 & 12 & -123 \\ -12 & 0 & 0 \\ -4 & 1 & 2 +$\begin{pNiceMatrix} +1 & 2 & 3 & 4 & 5 \\ +1 & \Hdotsfor{3} & 5 \\ +1 & 2 & 3 & 4 & 5 \\ +1 & 2 & 3 & 4 & 5 \end{pNiceMatrix}$ \bigskip -Sans surprise, il est possible de fixer la largeur minimale de toutes les colonnes de toutes les matrices dans une -certaine portion de document avec la commande |\NiceMatrixOptions|.\par\nobreak +Néanmoins, si ces cases sont vides, la ligne en pointillés s'étend seulement dans les cases spécifiées par +l'argument de |\Hdotsfor| (par conception). \medskip -\begin{BVerbatim}[baseline=c,boxwidth=8.5cm] -~emphase#\NiceMatrixOptions{columns-width=10mm}@ +\begin{BVerbatim}[baseline=c,boxwidth=7cm] $\begin{pNiceMatrix} -a & b \\ c & d -\end{pNiceMatrix} -= -\begin{pNiceMatrix} -1 & 1245 \\ 345 & 2 +1 & 2 & 3 & 4 & 5 \\ + & ~emphase#\Hdotsfor{3}@ \\ +1 & 2 & 3 & 4 & 5 \\ +1 & 2 & 3 & 4 & 5 \end{pNiceMatrix}$ \end{BVerbatim} -\begin{scope} -\NiceMatrixOptions{columns-width=10mm} $\begin{pNiceMatrix} -a & b \\ -c & d -\end{pNiceMatrix} -= -\begin{pNiceMatrix} -1 & 1245 \\ -345 & 2 +1 & 2 & 3 & 4 & 5 \\ + & \Hdotsfor{3} \\ +1 & 2 & 3 & 4 & 5 \\ +1 & 2 & 3 & 4 & 5 \end{pNiceMatrix}$ + +\medskip +Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande |\Hdotsfor| est utilisable lorsque +l'extension \pkg{colortbl} est chargée (mais vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la +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 de l'\pkg{amsmath} : |{matrix}|, |{pmatrix}|, 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 option du |\usepackage| (ce sont les trois + seules).} + +\smallskip + +\begin{itemize} +\item L'option |renew-dots|\par\nobreak + +Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|, |\iddots|\footnotemark[\thefniddots] et +|\hdotsfor| sont redéfinies dans les environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|, +|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de suspension «automatiques» de +|amsmath|) est aussi redéfinie et se comporte comme |\Ldots|. + +\item L'option |renew-matrix|\par\nobreak + +Avec cette option, l'environnement |{matrix}| est redéfini et se comporte comme |{NiceMatrix}| et il en est de même +pour les cinq variantes. +\end{itemize} + +\bigskip +Par conséquent, avec l'option |transparent|, un code classique donne directement le résultat fourni par +\pkg{nicematrix}.\par\nobreak + +\bigskip +\begin{scope} +\NiceMatrixOptions{transparent} +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +~emphase#\NiceMatrixOptions{transparent}@ +\begin{pmatrix} +1 & \cdots & \cdots & 1 \\ +0 & \ddots & & \vdots \\ +\vdots & \ddots & \ddots & \vdots \\ +0 & \cdots & 0 & 1 +\end{pmatrix} +\end{BVerbatim} +$\begin{pmatrix} +1 & \cdots & \cdots & 1 \\ +0 & \ddots & & \vdots \\ +\vdots & \ddots & \ddots & \vdots \\ +0 & \cdots & 0 & 1 +\end{pmatrix}$ \end{scope} -\bigskip -Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices auront leurs colonnes de la même -largeur, égale à la largeur de la case la plus large de toutes les matrices de la zone. Cette construction utilise -l'environnement |{NiceMatrixBlock}| avec l'option |auto-columns-width|\footnote{Pour le moment, c'est le seul - usage de l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}. -L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec la commande |\Block| présentée juste ci-dessous -(cf.~p.~\pageref{Block}). +\subsection{Les labels des lignes en pointillés} -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=8.5cm] -~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@ -$\begin{pNiceMatrix} -a & b \\ c & d -\end{pNiceMatrix} -= -\begin{pNiceMatrix} -1 & 1245 \\ 345 & 2 -\end{pNiceMatrix}$ -~emphase#\end{NiceMatrixBlock}@ +Les commandes |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| (ainsi que la commande |\line| dans +le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent en fait prendre deux arguments optionnels +spécifiés par les caractères |_| et |^| pour des labels situés au-dessous et au-dessus de la ligne. Les arguments +sont composés en mode mathématique avec |\scriptstyle|. + +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +$\begin{bNiceMatrix} +1 & \hspace*{1cm} & 0 \\[8mm] + & ~emphase#\Ddots^{n \text{ times}}@ & \\ +0 & & 1 +\end{bNiceMatrix}$ \end{BVerbatim} -\begin{NiceMatrixBlock}[auto-columns-width] -$\begin{pNiceMatrix} - a & b \\ c & d - \end{pNiceMatrix} -= - \begin{pNiceMatrix} - 1 & 1245 \\ 345 & 2 -\end{pNiceMatrix}$ -\end{NiceMatrixBlock} +$\begin{bNiceMatrix} +1 & \hspace*{1cm} & 0 \\[8mm] + & \Ddots^{n \text{ times}} & \\ +0 & & 1 +\end{bNiceMatrix}$ -\medskip -\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.} +\subsection{Personnalisation des lignes en pointillés} -\section{Les matrices par blocs} -\label{Block} +\label{customization} +Les lignes pointillées tracées par |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| (ainsi que par la +commande |\line| dans le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent être +paramétrées par trois options (que l'on met entre crochets après la commande) : +% +\begin{itemize} +\item |color| ; +\item |shorten| ; +\item |line-style|. +\end{itemize} + +Ces options peuvent aussi être fixées avec |\NiceMatrixOptions| ou bien au niveau d'un environnement mais elles +doivent alors être préfixées par |xdots|, ce qui fait que leurs noms deviennent : +% +\begin{itemize} +\item |xdots/color| ; +\item |xdots/shorten| ; +\item |xdots/line-style|. +\end{itemize} +% +Pour la clarté, dans la suite, on utilisera ces noms-là. -Cette partie, qui introduit une commande |\Block|, n'a pas de rapport direct avec l'environnement -|{NiceMatrixBlock}| présenté dans la section précédente. +\bigskip +\textbf{L'option xdots/color}\par\nobreak \smallskip -Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre -d'un rectangle de cases fusionnées. +L'option |xdots/color| indique bien entendu la couleur de la ligne tracée. On remarquera néanmoins que les lignes +tracées dans les rangées et colonnes extérieures (décrites plus loin) bénificient d'un régime spécial : cf. +p.~\pageref{exterior}. -La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc avec deux arguments. Le premier -argument est la taille de ce bloc avec la syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de -colonnes du bloc. Le deuxième argument, est, sans surprise, le contenu du bloc (en mode mathématique). Un nœud Tikz -correspondant à l'ensemble des cases fusionnées est créé sous le nom «$i$-$j$-block» où \textsl{nom} est le -nom donné au tableau. Si on a demandé la création des nœuds |medium|, alors un nœud de ce type est aussi créé pour -ce bloc avec un nom suffixé par |-medium|. -\medskip -Dans les exemples qui suivent, on utilise la commande |\arrayrulecolor| de \pkg{colortbl}. +\bigskip +\textbf{L'option xdots/shorten}\par\nobreak + +\smallskip +L'option |xdots/shorten| indique la marge qui est laissée aux deux extrémités de la ligne. Le nom s'inspire des options +«|shorten >|» et «|shorten <|» de Tikz, mais il faut remarquer que \pkg{nicematrix} ne propose que |xdots/shorten|. +La valeur initiale de ce paramètre est de $0.3$~em (il est conseillé d'utiliser une unité de mesure dépendante de +la fonte courante). -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=10.6cm] -\arrayrulecolor{blue} -$\begin{bNiceArray}{CCC|C}[margin] -~emphase#\Block{3-3}{A}@ & & & 0 \\ -& \hspace*{1cm} & & \Vdots \\ -& & & 0 \\ -\hline -0 & \Cdots& 0 & 0 -\end{bNiceArray}$ -\arrayrulecolor{black} -\end{BVerbatim} -\begin{scope} -\arrayrulecolor{blue} -$\begin{bNiceArray}{CCC|C}[margin] -\Block{3-3}{A} & & & 0 \\ -& \hspace*{1cm} & & \Vdots \\ -& & & 0 \\ -\hline -0 & \Cdots& 0 & 0 -\end{bNiceArray}$ -\arrayrulecolor{black} -\end{scope} \bigskip -On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple précédent. Comme il est composé en -mode mathématique, on ne peut pas directement utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est -pourquoi une option à mettre entre chevrons est proposée par |\Block| pour spécifier du code LaTeX qui sera inséré -\emph{avant} le début du mode mathématique. +\textbf{L'option xdots/line-style}\par\nobreak -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=10.6cm] -\arrayrulecolor{blue} -$\begin{bNiceArray}{CCC|C}[margin] -\Block{3-3}~emphase#<\Large>@{A} & & & 0 \\ -& \hspace*{1cm} & & \Vdots \\ -& & & 0 \\ -\hline -0 & \Cdots& 0 & 0 -\end{bNiceArray}$ -\arrayrulecolor{black} +\smallskip +Il faut savoir que, par défaut, les lignes de Tikz tracées avec le paramètre |dotted| sont composées de points +carrés et non pas ronds.\footnote{La raison de départ est que le format \textsc{pdf} comporte un système de description + de lignes en tiretés, qui, puisqu'il est incorporé dans le \textsc{pdf}, est affiché très rapidement par les + lecteurs de \textsc{pdf}. Il est facile à partir de ce type de ligne de créer des lignes de points carrés alors + qu'une ligne de points ronds doit être construite explicitement point par point.} + +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +\tikz \draw [dotted] (0,0) -- (5,0) ; \end{BVerbatim} -\begin{scope} -\arrayrulecolor{blue} -$\begin{bNiceArray}{CCC|C}[margin] -\Block{3-3}<\Large>{A} & & & 0 \\ -& \hspace*{1cm} & & \Vdots \\ -& & & 0 \\ -\hline -0 & \Cdots& 0 & 0 -\end{bNiceArray}$ -\arrayrulecolor{black} -\end{scope} +\tikz \draw [dotted] (0,0) -- (5,0) ; + +\bigskip +Voulant proposer des lignes avec des points ronds dans le style de celui de |\ldots| (au moins celui des fontes +\emph{Computer Modern}), l'extension \pkg{nicematrix} contient en interne son propre système de ligne en pointillés +(qui, au passage, n'utilise que \pkg{pgf} et non \pkg{tikz}). Ce style est appelé le style |standard|. Cette valeur +est la valeur initiale du paramètre |xdots/line-style|. + +\bigskip +Néanmoins (quand Tikz est chargé), on peut utiliser pour |xdots/line-style| n'importe quel style proposé par Tikz, +c'est-à-dire n'importe quelle suite d'options Tikz applicables à un chemin (à l'exception de «|color|», +«|shorten >|» et «|shorten <|»). +\medskip +Voici par exemple une matrice tridiagonale avec le style |loosely dotted| :\par\nobreak \medskip -Pour des raisons techniques, il n'est pas possible d'écrire |\Block{|$i$|-|$j$|}{<}| -(mais on peut écrire |\Block{|$i$|-|$j$|}<>{<}| avec le résultat attendu). +\begin{BVerbatim}[baseline=c] +$\begin{pNiceMatrix}[nullify-dots,~emphase#xdots/line-style=loosely dotted@] +a & b & 0 & & \Cdots & 0 \\ +b & a & b & \Ddots & & \Vdots \\ +0 & b & a & \Ddots & & \\ + & \Ddots & \Ddots & \Ddots & & 0 \\ +\Vdots & & & & & b \\ +0 & \Cdots & & 0 & b & a +\end{pNiceMatrix}$ +\end{BVerbatim} -\section{Les couleurs des rangées et des colonnes} +\[\begin{pNiceMatrix}[nullify-dots,xdots/line-style=loosely dotted] +a & b & 0 & & \Cdots & 0 \\ +b & a & b & \Ddots & & \Vdots \\ +0 & b & a & \Ddots & & \\ + & \Ddots & \Ddots & \Ddots & & 0 \\ +\Vdots & & & & & b \\ +0 & \Cdots & & 0 & b & a +\end{pNiceMatrix}\] -L'extension \pkg{colortbl} permet de colorier des cellules, des rangées ou des colonnes d'un tableau. Néanmoins, -l'affichage du \textsc{pdf} résultant n'est pas toujours parfait, en particulier quand on utilise également des -filets. Dans certains lecteurs de \textsc{pdf}, des filets verticaux semblent disparaître. De fines lignes -blanches peuvent également apparaître. -\medskip -La version 4.0 de \pkg{nicematrix} propose des outils similaires qui ne présentent pas ces inconvénients. Elle -propose une option |code-before| pour du code qui sera exécuté \emph{avant} le tracé du tableau. Dans ce -|code-before|, de nouvelles commandes sont disponibles : |\cellcolor|, |\rectanglecolor|, |\rowcolor|, -|\columncolor|, |\rowcolors| et |\chessboardcolors|. +\subsection{Les lignes pointillées et la clé hvlines} -\medskip -\begin{itemize} -\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de \pkg{colortbl}. +\label{dotted-and-hvlines} -Elle prend en arguments une couleur et une liste de cellules sous le format $i$-$j$ où $i$ est le numéro de ligne -et $j$ le numéro de colonne. +On a dit (cf. p. \pageref{hvlines}) que la clé |hvlines| trace tous les filets horizontaux et verticaux, exceptés +dans les blocs. En fait, avec cette clé, les filets ne sont pas non plus tracés dans les blocs virtuels délimités +par des cases reliées par des lignes pointillées. \medskip -\begin{scope} -\hfuzz=10cm -\begin{BVerbatim}[boxwidth=10cm,baseline=c] -\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@] -\hline -a & b & c \\ \hline -e & f & g \\ \hline -h & i & j \\ \hline -\end{NiceTabular} +\begin{BVerbatim}[baseline=c,boxwidth=11cm] +\NiceMatrixOptions{nullify-dots} +$\begin{pNiceMatrix}[rules/color=gray,~emphase#hvlines@,margin] +0 & \Cdots & & & & 0 \\ +1 & \Cdots & & & 1 & 2 \\ +0 & \Ddots & & & \Vdots & \Vdots \\ +\Vdots & \Ddots & & & & \\ + & & & & & \\ +0 & \Cdots & & 0 & 1 & 2 \\ +\end{pNiceMatrix}$ \end{BVerbatim} -\begin{NiceTabular}{|C|C|C|}[code-before = \cellcolor{red!15}{3-1,2-2,1-3}] -\hline -a & b & c \\ \hline -e & f & g \\ \hline -h & i & j \\ \hline -\end{NiceTabular} +\begin{scope} +\NiceMatrixOptions{nullify-dots} +$\begin{pNiceMatrix}[rules/color=gray,hvlines,margin] +0 & \Cdots & & & & 0 \\ +1 & \Cdots & & & 1 & 2 \\ +0 & \Ddots & & & \Vdots & \Vdots \\ +\Vdots & \Ddots & & & & \\ + & & & & & \\ +0 & \Cdots & & 0 & 1 & 2 \\ +\end{pNiceMatrix}$ \end{scope} -\bigskip -\item La commande |\rectanglecolor| prend trois arguments. Le premier est la couleur, les deux suivants fournissent -la case en haut à gauche et la case en bas à droite du rectangle. -\medskip -\begin{scope} -\hfuzz=10cm -\begin{BVerbatim}[boxwidth=10cm,baseline=c] -\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\rectanglecolor{red!15}{2-2}{3-3}@] -\hline -a & b & c \\ \hline -e & f & g \\ \hline -h & i & j \\ \hline -\end{NiceTabular} -\end{BVerbatim} -\begin{NiceTabular}{|C|C|C|}[code-before = \rectanglecolor{red!15}{2-2}{3-3}] -\hline -a & b & c \\ \hline -e & f & g \\ \hline -h & i & j \\ \hline -\end{NiceTabular} -\end{scope} +\section{Le code-after} +\label{code-after} -\bigskip -\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de \pkg{colortbl}. Son premier argument est la -couleur et le deuxième est une liste de numéros de rangées ou bien d'intervalles de rangées sous la forme -$a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à partir de la rangée~$a$). +L'option |code-after| peut être utilisée pour indiquer du code qui sera exécuté après la construction de la +matrice.\footnote{Il existe aussi une clé |code-before| décrite p.~\pageref{code-before}.} -\medskip +Une commande spéciale, nommée |\line| est disponible pour tracer directement des lignes en pointillés entre les +cases. Elle prend deux arguments correspondant aux deux cases à relier, chacun de la forme $i$-$j$ où $i$ est le +numéro de ligne et $j$ est le numéro de colonne. Elle peut par exemple être utilisée pour tracer une ligne entre +deux cases adjacentes comme dans l'exemple suivant. +\label{line-in-code-after} -\begin{scope} -\hfuzz=10cm -\begin{BVerbatim}[boxwidth=9cm,baseline=c] -$\begin{NiceArray}{LLL}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@] -a_1 & b_1 & c_1 \\ -a_2 & b_2 & c_2 \\ -a_3 & b_3 & c_3 \\ -a_4 & b_4 & c_4 \\ -a_5 & b_5 & c_5 \\ -a_6 & b_6 & c_6 \\ -a_7 & b_7 & c_7 \\ -a_8 & b_8 & c_8 \\ -a_9 & b_9 & c_9 \\ -a_{10} & b_{10} & c_{10} \\ -\end{NiceArray}$ -\end{BVerbatim} -% -$\begin{NiceArray}{LLL}% -[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}] -a_1 & b_1 & c_1 \\ -a_2 & b_2 & c_2 \\ -a_3 & b_3 & c_3 \\ -a_4 & b_4 & c_4 \\ -a_5 & b_5 & c_5 \\ -a_6 & b_6 & c_6 \\ -a_7 & b_7 & c_7 \\ -a_8 & b_8 & c_8 \\ -a_9 & b_9 & c_9 \\ -a_{10} & b_{10} & c_{10} \\ -\end{NiceArray}$ +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=11cm] +\NiceMatrixOptions{xdots/shorten = 0.6 em} +\begin{pNiceMatrix}[~emphase#code-after=\line{2-2}{3-3}@] +I & 0 & \Cdots &0 \\ +0 & I & \Ddots &\Vdots\\ +\Vdots &\Ddots & I &0 \\ +0 &\Cdots & 0 &I +\end{pNiceMatrix} +\end{BVerbatim} +\begin{scope} +\NiceMatrixOptions{xdots/shorten = 0.6 em} +$\begin{pNiceMatrix}[code-after=\line{2-2}{3-3}] +I & 0 & \Cdots &0 \\ +0 & I & \Ddots &\Vdots\\ +\Vdots &\Ddots & I &0 \\ +0 &\Cdots & 0 &I +\end{pNiceMatrix}$ \end{scope} +\medskip +Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on peut spécifier les instructions du +|code-after| à la fin de l'environnement, après le mot-clé |\CodeAfter|. Pour un exemple, voir page +\pageref{exemple-CodeAfter}. -\bigskip -\item La commande |\columncolor| doit son nom à la commande |\columncolor| de \pkg{colortbl}. Sa syntaxe est -similaire à celle de |\rowcolor|. -\bigskip -\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande |\rowcolors| de \pkg{xcolor}. Le -\emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les rangées avec les deux couleurs à partir -de la rangée dont le numéro est donné en premier argument. -\medskip +\section{Autres fonctionnalités} -\begin{scope} -\hfuzz=10cm -\begin{BVerbatim}[baseline=c,boxwidth=9cm] -\begin{NiceTabular}{LR}% -[~emphase#code-before = \rowcolor{red!15}{1} \rowcolors{3}{blue!10}{}@] -\toprule -Ville & habitants \\ -\midrule -Pau & 80000 \\ -Paris & 2000000 \\ -Toulouse & 700000 \\ -Reims & 40000 \\ -\bottomrule -\end{NiceTabular} -\end{BVerbatim} -\begin{NiceTabular}{LR}[code-before =\rowcolor{red!15}{1} \rowcolors{3}{blue!10}{}] -\toprule -Ville & habitants \\ -\midrule -Pau & 80000 \\ -Paris & 2000000 \\ -Toulouse & 700000 \\ -Reims & 40000 \\ -\bottomrule -\end{NiceTabular} -\end{scope} -\bigskip -\item La commande |\chessboardcolors| prend en arguments deux couleurs et colorie les cellules en quinconces avec -les deux couleurs. +\subsection{Utilisation du type de colonne S de siunitx} + +Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes +de type |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement +aucune macro privée de \pkg{siunitx}. \medskip -\begin{scope} -\hfuzz=10cm -\begin{BVerbatim}[baseline=c,boxwidth=9cm] -$\begin{pNiceMatrix}[R,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@] -1 & -1 & 1 \\ --1 & 1 & -1 \\ -1 & -1 & 1 -\end{pNiceMatrix}$ +\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm] +$\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row] +{C_1} & \Cdots & & C_n \\ +2.3 & 0 & \Cdots & 0 \\ +12.4 & \Vdots & & \Vdots \\ +1.45 \\ +7.2 & 0 & \Cdots & 0 +\end{pNiceArray}$ \end{BVerbatim} -$\begin{pNiceMatrix}% -[baseline=1, R, margin, code-before = \chessboardcolors{red!15}{blue!15}] -1 & -1 & 1 \\ --1 & 1 & -1 \\ -1 & -1 & 1 -\end{pNiceMatrix}$ -\end{scope} +$\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row] +{C_1} & \Cdots & & C_n \\ +2.3 & 0 & \Cdots & 0 \\ +12.4 & \Vdots & & \Vdots \\ +1.45 \\ +7.2 & 0 & \Cdots & 0 +\end{pNiceArray}$ -\end{itemize} +\medskip +En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}. -\section{Fonctionnalités avancées} +\subsection{Option d'alignement dans \{NiceMatrix\}} -\subsection{Option d'alignement dans NiceMatrix} +\label{key-R} Les environnements sans préambule (|{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, etc.) proposent les options -|l| et |r| (possédant |L| et |R| comme alias) qui imposent des colonnes alignées à gauche ou à -droite.\footnote{Cela reprend une partie des fonctionnalités proposées par les environnements |{pmatrix*}|, - |{bmatrix*}|, etc. de \pkg{mathtools}.} +|l| et |r| (possédant |L| et |R| comme alias) qui imposent des colonnes alignées à gauche ou à droite. \medskip \begin{BVerbatim}[baseline=c,boxwidth=10cm] @@ -1675,7 +1736,10 @@ $\begin{bNiceMatrix}[R] \sin x & \cos x \end{bNiceMatrix}$ - +\medskip +Il existe aussi l'option |S| qui impose que toutes les colonnes soient des colonnes |S| de \pkg{siunitx} (si cette +extension est chargée).\footnote{Cela reprend une partie des fonctionnalités proposées par les environnements |{pmatrix*}|, + |{bmatrix*}|, etc. de \pkg{mathtools}.} \subsection{La commande \textbackslash rotate} @@ -1790,8 +1854,9 @@ numéro de la rangée courante et le numéro de la colonne courante\footnote{On Bien entendu, l'utilisateur ne doit pas modifier les valeurs de ces compteurs qui sont utilisés en interne par \pkg{nicematrix}. -Dans le |code-after| (cf. p. \pageref{code-after}), |iRow| représente le nombre total de rangées (hors éventuelles -rangées extérieures) et |jCol| le nombre total de colonnes (hors potentielles colonnes extérieures). +Dans le |code-before| (cf. p. \pageref{code-before}) et dans le |code-after| (cf. p. \pageref{code-after}), |iRow| +représente le nombre total de rangées (hors éventuelles rangées extérieures) et |jCol| le nombre total de colonnes +(hors potentielles colonnes extérieures). \medskip \begin{BVerbatim}[baseline=c,boxwidth=10.6cm] @@ -1818,8 +1883,8 @@ $\begin{pNiceMatrix}[first-row, \medskip Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par d'autres extensions que -\pkg{nicematrix} (ou tout simplement par l'utilisateur), ces compteurs sont masqués dans les environnements de -\pkg{nicematrix}. +\pkg{nicematrix} (ou tout simplement par l'utilisateur final), ces compteurs sont masqués dans les environnements +de \pkg{nicematrix}. \bigskip @@ -1838,164 +1903,458 @@ $C = ~emphase#\pAutoNiceMatrix@{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$ \end{Verbatim} -$C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$ +\[C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}\] + + + +\subsection{L'option light-syntax} + +\label{light-syntax} + +L'option |light-syntax| (inspirée de l'extension \pkg{spalign}) permet d'alléger la saisie des matrices, ainsi que +leur lisibilité dans le source TeX. Lorsque cette option est activée, on doit utiliser le point-virgule comme +marqueur de fin de rangée et séparer les colonnes par des espaces ou des tabulations. On remarquera toutefois que, +comme souvent dans le monde TeX, les espaces après les séquences de contrôle ne sont pas comptées et que les +éléments entre accolades sont considérés comme un tout. + + +\medskip +\begin{scope} +\begin{BVerbatim}[baseline=c,boxwidth=10cm] +$\begin{bNiceMatrix}[~emphase#light-syntax@,first-row,first-col] +{} a b ; +a 2\cos a {\cos a + \cos b} ; +b \cos a+\cos b { 2 \cos b } +\end{bNiceMatrix}$ +\end{BVerbatim} +\end{scope} +% +$\begin{bNiceMatrix}[light-syntax,first-row,first-col] +{} a b ; +a 2\cos a {\cos a + \cos b} ; +b \cos a+\cos b { 2 \cos b } +\end{bNiceMatrix}$ + +\medskip +On peut changer le caractère utilisé pour indiquer les fins de rangées avec l'option |end-of-row|. Comme dit +précédemment, la valeur initiale de ce paramètre est un point-virgule. + +\medskip +Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre d'éléments en verbatim (avec par +exemple la commande |\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option + |light-syntax| est utilisée, le contenu complet de l'environnement est chargé comme un argument de commande TeX. + L'environnement ne se comporte plus comme un «vrai» environnement de LaTeX qui se contente d'insérer des + commandes avant et après.} + +\subsection{L'environnement \{NiceArrayWithDelims\}} + +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 ou asymétriques. + +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=11cm] +$\begin{~emphase#NiceArrayWithDelims@} + {\downarrow}{\uparrow}{CCC}[margin] +1 & 2 & 3 \\ +4 & 5 & 6 \\ +7 & 8 & 9 +\end{~emphase#NiceArrayWithDelims@}$ +\end{BVerbatim} +% +$\begin{NiceArrayWithDelims} + {\downarrow}{\uparrow}{CCC}[margin] +1 & 2 & 3 \\ +4 & 5 & 6 \\ +7 & 8 & 9 +\end{NiceArrayWithDelims}$ + + + + +\section{Utilisation de Tikz avec nicematrix} + +\label{name} + +\subsection{Les nœuds correspondant aux contenus des cases} + +L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide) du tableau considéré. Ces nœuds sont +utilisés, entre autres, pour tracer les lignes en pointillés entre les cases du tableau. + +\smallskip +Tous les nœuds du document doivent avoir des noms deux à deux distincts et le nom de ces nœuds doit donc faire +intervenir le numéro de l'environnement courant. Les environnements créés par \pkg{nicematrix} sont en effet +numérotés par un compteur global interne. + +\smallskip +Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et de la colonne~$j$ a pour nom +|nm-|$n$|-|$i$|-|$j$. + +\smallskip +La commande |\NiceMatrixLastEnv| donne le numéro du dernier de ces environnements (pour LaTeX, il s'agit d'une +commande — complètement développable — et non d'un compteur). + +\smallskip +Il est néanmoins recommandé de passer plutôt par la clé |name|. Celle-ci permet de donner un nom à l'environnement. +Une fois l'environnement nommé, les nœuds sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où +\textsl{nom} est le nom donné au tableau et $i$ et $j$ les numéros de rangée et de colonne de la case considérée. +On peut les utiliser avec \textsc{pgf} mais l'utilisateur final préférera sans doute utiliser Tikz (qui est une +sur-couche de \textsc{pgf}). Il faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas Tikz par défault. + +\bigskip +\begin{BVerbatim}[baseline=c,boxwidth=11cm] +$\begin{pNiceMatrix}[name=~emphase#ma-matrice@] +1 & 2 & 3 \\ +4 & 5 & 6 \\ +7 & 8 & 9 +\end{pNiceMatrix}$ +\tikz[remember picture,overlay] + \draw ~emphase#(ma-matrice-2-2)@ circle (2mm) ; +\end{BVerbatim} +$\begin{pNiceMatrix}[name=ma-matrice] +1 & 2 & 3 \\ +4 & 5 & 6 \\ +7 & 8 & 9 +\end{pNiceMatrix}$ +\tikz[remember picture,overlay] + \draw (ma-matrice-2-2) circle (2mm) ; + +\medskip +Ne pas oublier les options |remember picture| et |overlay|. + + +\bigskip +Dans le |code-after|, et si Tikz est chargé, les choses sont plus simples. On peut (et on doit) désigner les nœuds +sous la forme $i$-$j$ : il n'y a pas besoin de préciser l'environnement qui est évidemment l'environnement courant. + + +\medskip +\begin{BVerbatim}[baseline=c,boxwidth=11cm] +$\begin{pNiceMatrix} +1 & 2 & 3 \\ +4 & 5 & 6 \\ +7 & 8 & 9 +\CodeAfter +\tikz \draw ~emphase#(2-2)@ circle (2mm) ; +\end{pNiceMatrix}$ +\end{BVerbatim} +$\begin{pNiceMatrix} +1 & 2 & 3 \\ +4 & 5 & 6 \\ +7 & 8 & 9 +\CodeAfter +\tikz \draw (2-2) circle (2mm) ; +\end{pNiceMatrix}$ + + + +\bigskip +Dans l'exemple suivant, nous avons surligné tous nœuds de la matrice (on explique plus loin la technique utilisée : +cf. p. \pageref{highlight}). + +\[\begin{pNiceMatrix} +a & a + b & a + b + c \\ +a & a & a + b \\ +a & a & a +\CodeAfter +\begin{tikzpicture}[ + every node/.style = + { + blend mode = multiply, + inner sep = 0 pt , + fill = red!15 + } + ] +\node [fit = (1-1)] {} ; +\node [fit = (1-3)] {} ; +\node [fit = (2-2)] {} ; +\node [fit = (3-1)] {} ; +\node [fit = (3-3)] {} ; +\node [fit = (1-2)] {} ; +\node [fit = (2-1)] {} ; +\node [fit = (2-3)] {} ; +\node [fit = (3-2)] {} ; +\end{tikzpicture} +\end{pNiceMatrix}\] + + +\subsection{Les «nœuds moyens» et les «nœuds larges»} + + +En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds supplémentaires (\emph{extra nodes} en +anglais) : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en +anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les seconds avec l'option +|create-large-nodes|.\footnote{Il existe aussi l'option |create-extra-nodes| qui est un alias pour la conjonction +de |create-medium-nodes| et |create-large-nodes|.} + +\medskip +Ces nœuds ne sont pas utilisés par défault par \pkg{nicematrix}. + +\medskip +Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-medium|» au nom des nœuds normaux. Dans +l'exemple suivant, on a surligné tous les «nœuds moyens». Nous considérons que cet exemple se suffit à lui-même +comme définition de ces nœuds. +\[\begin{pNiceMatrix}[ + create-medium-nodes, + code-after = {\begin{tikzpicture} + [every node/.style = {fill = red!15, + blend mode = multiply, + inner sep = 0 pt}, + name suffix = -medium] + \node [fit = (1-1)] {} ; + \node [fit = (1-2)] {} ; + \node [fit = (1-3)] {} ; + \node [fit = (2-1)] {} ; + \node [fit = (2-2)] {} ; + \node [fit = (2-3)] {} ; + \node [fit = (3-1)] {} ; + \node [fit = (3-2)] {} ; + \node [fit = (3-3)] {} ; + \end{tikzpicture}}] +a & a + b & a + b + c \\ +a & a & a + b \\ +a & a & a +\end{pNiceMatrix}\] + -\subsection{Les options hlines, vlines et hvlines} +\medskip +Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-large|» au nom des nœuds normaux. Dans l'exemple +suivant, on a surligné tous les «nœuds larges». Nous considérons que cet exemple se suffit à lui-même comme +définition de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les rangées et colonnes extérieures + (pour ces rangées et colonnes, voir p.~\pageref{exterior}).} -\label{hvlines} +\[\begin{pNiceMatrix}[ + create-large-nodes, + code-after = {\begin{tikzpicture} + [every node/.style = {blend mode = multiply, + inner sep = 0 pt}, + name suffix = -large] + \node [fit = (1-1),fill = red!15] {} ; + \node [fit = (1-3),fill = red!15] {} ; + \node [fit = (2-2),fill = red!15] {} ; + \node [fit = (3-1),fill = red!15] {} ; + \node [fit = (3-3),fill = red!15] {} ; + \node [fit = (1-2),fill = blue!15] {} ; + \node [fit = (2-1),fill = blue!15] {} ; + \node [fit = (2-3),fill = blue!15] {} ; + \node [fit = (3-2),fill = blue!15] {} ; + \end{tikzpicture}}] +a & a + b & a + b + c \\ +a & a & a + b \\ +a & a & a +\end{pNiceMatrix}\] -Dans les environnements de \pkg{nicematrix}, on peut bien entendu ajouter des filets horizontaux entre les rangées -avec la commande~|\hline| et des filets verticaux avec le spécificateur ``\verb+|+'' dans le préambule de -l'environnement. Par souci de commodité, l'extension \pkg{nicematrix} fournit aussi l'option |hlines| (resp. -|vlines|) qui impose directement que tous les filets horizontaux (resp. verticaux) soient tracés (à l'exception, -très naturelle, des filets extérieurs aux rangées et colonnes extérieures). L'option |hvlines| est la conjonction -des options |hlines| et |vlines|. \medskip -Dans l'exemple suivant, on utilise la commande |\arrayrulecolor| de \pkg{colortbl}. - - +Les «nœuds larges» de la première colonne et de la dernière colonne peuvent apparaître trop petits pour certains +usages. C'est pourquoi il est possible d'utiliser les options |left-margin| et |right-margin| pour ajouter de +l'espace des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la première colonne et de la +dernière colonne. Dans l'exemple suivant, nous avons utilisé les options |left-margin| et +|right-margin|.\footnote{Les options |left-margin| et |right-margin| prennent des dimensions comme valeurs mais, si + aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et elle est égale à |\arraycolsep| (par + défaut, 5~pt). Il existe aussi une option |margin| pour fixer à la fois |left-margin| et |right-margin|.} +\[\begin{pNiceMatrix}[ + create-large-nodes,left-margin,right-margin, + code-after = {\begin{tikzpicture} + [every node/.style = {blend mode = multiply, + inner sep = 0 pt}, + name suffix = -large] + \node [fit = (1-1),fill = red!15] {} ; + \node [fit = (1-3),fill = red!15] {} ; + \node [fit = (2-2),fill = red!15] {} ; + \node [fit = (3-1),fill = red!15] {} ; + \node [fit = (3-3),fill = red!15] {} ; + \node [fit = (1-2),fill = blue!15] {} ; + \node [fit = (2-1),fill = blue!15] {} ; + \node [fit = (2-3),fill = blue!15] {} ; + \node [fit = (3-2),fill = blue!15] {} ; + \end{tikzpicture}}] +a & a + b & a + b + c \\ +a & a & a + b \\ +a & a & a +\end{pNiceMatrix}\] \medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] -\arrayrulecolor{blue} -$\begin{NiceArray}{CCCC}[~emphase#hvlines@,first-row,first-col] - & e & a & b & c \\ -e & e & a & b & c \\ -a & a & e & c & b \\ -b & b & c & e & a \\ -c & c & b & a & e -\end{NiceArray}$ -\arrayrulecolor{black} -\end{BVerbatim} -% -\arrayrulecolor{blue} -$\begin{NiceArray}{CCCC}[hvlines,first-row,first-col] - & e & a & b & c \\ -e & e & a & b & c \\ -a & a & e & c & b \\ -b & b & c & e & a \\ -c & c & b & a & e -\end{NiceArray}$ -\arrayrulecolor{black} +Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options |extra-left-margin| et +|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges». Dans l'exemple suivant, nous +avons utilisé |extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt. +\[\begin{pNiceMatrix}[ + create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt, + code-after = {\begin{tikzpicture} + [every node/.style = {blend mode = multiply, + inner sep = 0 pt}, + name suffix = -large] + \node [fit = (1-1),fill = red!15] {} ; + \node [fit = (1-3),fill = red!15] {} ; + \node [fit = (2-2),fill = red!15] {} ; + \node [fit = (3-1),fill = red!15] {} ; + \node [fit = (3-3),fill = red!15] {} ; + \node [fit = (1-2),fill = blue!15] {} ; + \node [fit = (2-1),fill = blue!15] {} ; + \node [fit = (2-3),fill = blue!15] {} ; + \node [fit = (3-2),fill = blue!15] {} ; + \end{tikzpicture}}] +a & a + b & a + b + c \\ +a & a & a + b \\ +a & a & a +\end{pNiceMatrix}\] +\bigskip +\textbf{Attention} : Ces nœuds sont reconstruits à partir des contenus des cases et ne correspondent donc pas +nécessairement aux cases délimitées par des filets. \bigskip -Il y a néanmoins une différence entre l'utilisation de l'option |vlines| et du spécificateur «\verb+|+» dans le -préambule de l'environnement : les filets tracés par |vlines| traversent les double-filets horizontaux tracés par -|\hline\hline|. +\begin{minipage}[c]{7.5cm} +Voici un tableau qui a été composé de la manière suivante : \medskip -\begin{BVerbatim}[baseline=c,boxwidth=11.5cm] -$\begin{NiceArray}{CCCC}[vlines] \hline -a & b & c & d \\ \hline \hline -1 & 2 & 3 & 4 \\ -1 & 2 & 3 & 4 \\ \hline -\end{NiceArray}$ +\begin{BVerbatim} +\large +\begin{NiceTabular}{wl{2cm}LL}[hvlines] +fraise & amande & abricot \\ +prune & pêche & poire \\[1ex] +noix & noisette & brugnon +\end{NiceTabular} \end{BVerbatim} -% -$\begin{NiceArray}{CCCC}[vlines] -\hline -a & b & c & d \\ -\hline \hline -1 & 2 & 3 & 4 \\ -1 & 2 & 3 & 4 \\ -\hline -\end{NiceArray}$ +\end{minipage} +\hspace{1cm} +\begin{scope} +\large +\begin{NiceTabular}[c]{wl{2cm}LL}[hvlines] +fraise & amande & abricot \\ +prune & pêche & poire \\[1ex] +noix & noisette & brugnon +\end{NiceTabular} +\end{scope} -\bigskip -Dans le cas d'un environnement avec délimiteurs (par exemple |{pNiceArray}| ou |{pNiceMatrix}|), l'option |vlines| ne -trace pas de filets verticaux au niveau des deux délimiteurs (bien entendu). +\vspace{1cm} +\begin{minipage}[c]{7cm} +Ci-contre, on a colorié toutes les cases de ce tableau avec |\chessboardcolors|. +\end{minipage} +\hspace{1.5cm} +\begin{scope} +\large +\begin{NiceTabular}[c]{wl{2cm}LL}[hvlines,code-before = \chessboardcolors{red!15}{blue!15}] +fraise & amande & abricot \\ +prune & pêche & poire \\[1ex] +noix & noisette & brugnon +\end{NiceTabular} +\end{scope} -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=10.6cm] -\setlength{\arrayrulewidth}{0.2pt} -$\begin{pNiceMatrix}[vlines] -1 & 2 & 3 & 4 & 5 & 6 \\ -1 & 2 & 3 & 4 & 5 & 6 \\ -1 & 2 & 3 & 4 & 5 & 6 \\ -\end{pNiceMatrix}$ -\end{BVerbatim} -% + +\vspace{1cm} +\begin{minipage}[c]{7cm} +Voici maintenant tous les «nœuds larges» de ce tableau (sans utilisation de |margin| ni de |extra-margin|). +\end{minipage} +\hspace{1.5cm} \begin{scope} -\setlength{\arrayrulewidth}{0.2pt} -$\begin{pNiceMatrix}[vlines] -1 & 2 & 3 & 4 & 5 & 6 \\ -1 & 2 & 3 & 4 & 5 & 6 \\ -1 & 2 & 3 & 4 & 5 & 6 \\ -\end{pNiceMatrix}$ +\large +\begin{NiceTabular}[c]{wl{2cm}LL}[hvlines, + create-large-nodes, + code-after = {\begin{tikzpicture} + [every node/.style = {blend mode = multiply, + inner sep = 0 pt}, + name suffix = -large] + \node [fit = (1-1),fill = red!15] {} ; + \node [fit = (1-3),fill = red!15] {} ; + \node [fit = (2-2),fill = red!15] {} ; + \node [fit = (3-1),fill = red!15] {} ; + \node [fit = (3-3),fill = red!15] {} ; + \node [fit = (1-2),fill = blue!15] {} ; + \node [fit = (2-1),fill = blue!15] {} ; + \node [fit = (2-3),fill = blue!15] {} ; + \node [fit = (3-2),fill = blue!15] {} ; + \end{tikzpicture}}] +fraise & amande & abricot \\ +prune & pêche & poire \\[1ex] +noix & noisette & brugnon +\end{NiceTabular} \end{scope} -\subsection{L'option light-syntax} -\label{light-syntax} -L'option |light-syntax|\footnote{Cette option est inspirée de l'extension \pkg{spalign} de Joseph Rabinoff.} permet -d'alléger la saisie des matrices, ainsi que leur lisibilité dans le source TeX. Lorsque cette option est activée, -on doit utiliser le point-virgule comme marqueur de fin de rangée et séparer les colonnes par des espaces ou des -tabulations. On remarquera toutefois que, comme souvent dans le monde TeX, les espaces après les séquences de -contrôle ne sont pas comptées et que les éléments entre accolades sont considérés comme un tout. -\medskip -\begin{scope} -\begin{BVerbatim}[baseline=c,boxwidth=10cm] -$\begin{bNiceMatrix}[~emphase#light-syntax@,first-row,first-col] -{} a b ; -a 2\cos a {\cos a + \cos b} ; -b \cos a+\cos b { 2 \cos b } -\end{bNiceMatrix}$ -\end{BVerbatim} -\end{scope} -% -$\begin{bNiceMatrix}[light-syntax,first-row,first-col] -{} a b ; -a 2\cos a {\cos a + \cos b} ; -b \cos a+\cos b { 2 \cos b } -\end{bNiceMatrix}$ -\medskip -On peut changer le caractère utilisé pour indiquer les fins de rangées avec l'option |end-of-row|. Comme dit -précédemment, la valeur initiale de ce paramètre est un point-virgule. +\subsection{Les nœuds «row» et «col»} -\medskip -Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre d'éléments en verbatim (avec par -exemple la commande |\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option - |light-syntax| est utilisée, le contenu complet de l'environnement est chargé comme un argument de commande TeX. - L'environnement ne se comporte plus comme un «vrai» environnement de LaTeX qui se contente d'insérer des - commandes avant et après.} +L'extension \pkg{nicematrix} crée un nœud PGF-Tikz indiquant la position potentielle de chaque filet horizontal +(avec les noms |row-|$i$) et de chaque filet vertical (avec les noms |col-|$j$), comme décrit sur la figure +ci-dessous. Ces nœuds sont accessibles dans le |code-before| et dans le |code-after|. +\begin{center} +\begin{NiceTabular}{CCC}[hvlines,rules/width=1pt,rules/color=gray] +rose & tulipe & lys \\ +arum & iris & violette \\ +muguet & dahlia & souci +\CodeAfter +\tiny +\begin{tikzpicture} +\foreach \i in {1,2,3,4} + { + \fill [red] (row-\i) circle (0.5mm) ; + \node [red,anchor=east] at (row-\i) {row-\i} ; + } +\foreach \j in {1,2,3,4} + { + \fill [blue] (col-\j) circle (0.5mm) ; + \node [blue,anchor=north] at (col-\j) {col-\j} ; + } +\end{tikzpicture} +\end{NiceTabular} +\end{center} -\subsection{Utilisation du type de colonne S de siunitx} -Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes -de type |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement -aucune macro privée de \pkg{siunitx}. +\bigskip +Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par défaut), on peut donc accéder (dans le +|code-before| et le |code-after|) à l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe +|(row-|$i$\verb+-|col-+$j$|)|. -\medskip -\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm] -$\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row] -{C_1} & \Cdots & & C_n \\ -2.3 & 0 & \Cdots & 0 \\ -12.4 & \Vdots & & \Vdots \\ -1.45 \\ -7.2 & 0 & \Cdots & 0 -\end{pNiceArray}$ -\end{BVerbatim} -$\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row] -{C_1} & \Cdots & & C_n \\ -2.3 & 0 & \Cdots & 0 \\ -12.4 & \Vdots & & \Vdots \\ -1.45 \\ -7.2 & 0 & \Cdots & 0 -\end{pNiceArray}$ \medskip -En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}. - +\begin{Verbatim} +\[\begin{NiceMatrix}[ + code-before = + { +~emphase# \tikz \draw [fill = red!15] @ +~emphase# (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- @ +~emphase# (row-9-|col-5) -- (row-9-|col-6) |- cycle ; @ + } +] +1 \\ +1 & 1 \\ +1 & 2 & 1 \\ +1 & 3 & 3 & 1 \\ +1 & 4 & 6 & 4 & 1 \\ +1 & 5 & 10 & 10 & 5 & 1 \\ +1 & 6 & 15 & 20 & 15 & 6 & 1 \\ +1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\ +1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1 +\end{NiceMatrix}\] +\end{Verbatim} +% +\[\begin{NiceMatrix}[ + code-before = + { + \tikz \draw [fill = red!15] + (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- + (row-9-|col-5) -- (row-9-|col-6) |- cycle ; + } +] +1 \\ +1 & 1 \\ +1 & 2 & 1 \\ +1 & 3 & 3 & 1 \\ +1 & 4 & 6 & 4 & 1 \\ +1 & 5 & 10 & 10 & 5 & 1 \\ +1 & 6 & 15 & 20 & 15 & 6 & 1 \\ +1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\ +1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1 +\end{NiceMatrix}\] \section{Remarques techniques} @@ -2040,26 +2399,13 @@ C_1 & C_2 & C_3 & C_4 \end{scope} \medskip -Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements |{array}| (de \pkg{array}) et, dans ce -cas, |\OnlyMainNiceMatrix| est sans effet. +Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements |{tabular}| et |{array}| (de +\pkg{array}) et, dans ce cas, |\OnlyMainNiceMatrix| est sans effet. -\subsection{Le nom des nœuds PGF créés par nicematrix} - -Les nœuds PGF-Tikz créés par \pkg{nicematrix} peuvent être utilisés hors des environnements de \pkg{nicematrix} -après avoir nommé l'environnement concerné avec l'option |name| (cf. p.~\pageref{name}). Il s'agit là de la méthode -conseillée mais on décrit néanmoins maintenant le nom Tikz interne de ces nœuds. - -Les environnements créés par \pkg{nicematrix} sont numérotés par un compteur global interne. La commande -|\NiceMatrixLastEnv| donne le numéro du dernier de ces environnements (pour LaTeX, il s'agit d'une commande — -complètement développable — et non d'un compteur). - -Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et de la colonne~$j$ a pour nom -|nm-|$n$|-|$i$|-|$j$. Les noms des nœuds |medium| et |large| correspondants s'obtiennent en suffixant par |-medium| -et |-large|. \subsection{Lignes diagonales} @@ -2185,91 +2531,14 @@ Avec cette option, des espaces extérieurs de longueur |\arraycolsep| seront ins -\subsection{Un problème technique avec l'argument de \textbackslash\textbackslash} - - -Pour des raisons techniques, si vous utilisez l'argument optionnel de la commande |\\|, l'espace vertical sera -aussi ajouté au nœud («normal») correspondant à la case précédente. - - -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] - \begin{pNiceMatrix} - a & \frac AB \\~emphase#[2mm]@ - b & c - \end{pNiceMatrix} -\end{BVerbatim} -$\begin{pNiceMatrix}[ - code-after = {\tikz \node [inner sep = 0pt, - fill = red!15, - blend mode = multiply, - fit = (1-2) ] {} ; } ] -a & \frac AB \\[2mm] -b & c -\end{pNiceMatrix}$ - -\bigskip -Il y a deux solutions pour résoudre ce problème. La première solution est d'utiliser une commande TeX pour insérer -l'espace entre les deux rangées. - -\medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] - \begin{pNiceMatrix} - a & \frac AB \\ - ~emphase#\noalign{\kern2mm}@ - b & c - \end{pNiceMatrix} -\end{BVerbatim} -$\begin{pNiceMatrix}[ - code-after = {\tikz \node [inner sep = 0pt, - fill = red!15, - blend mode = multiply, - fit = (1-2) ] {} ; } ] -a & \frac AB \\ -\noalign{\kern2mm} -b & c -\end{pNiceMatrix}$ +\subsection{Incompatibilités} -\bigskip -L'autre solution est d'utiliser la commande |\multicolumn| dans la case précédente : +L'extension \pkg{nicematrix} n'est pas compatible with \pkg{threeparttable}. \medskip -\begin{BVerbatim}[baseline=c,boxwidth=11cm] - \begin{pNiceMatrix} - a & ~emphase#\multicolumn1C{\frac AB}@ \\[2mm] - b & c - \end{pNiceMatrix} -\end{BVerbatim} -$\begin{pNiceMatrix}[ - code-after = {\tikz \node [inner sep = 0pt, - fill = red!15, - blend mode = multiply, - fit = (1-2) ] {} ; } ] -a & \multicolumn1C{\frac AB} \\[2mm] -b & c -\end{pNiceMatrix}$ - -\subsection{Environnements obsolètes} - -La version 3.0 de \pkg{nicematrix} a introduit l'environnement |{pNiceArray}| (et ses variantes) avec les options -|first-row|, |last-row|, |first-col| et |last-col|. - -Par conséquent, les environnements suivants, présents dans les versions précédentes de \pkg{nicematrix} ont été -supprimés. -% -\begin{itemize} -\item |{NiceArrayCwithDelims}| ; -\item |{pNiceArrayC}|, |{bNiceArrayC}|, |{BNiceArrayC}|, |{vNiceArrayC}|, -|{VNiceArrayC}| ; -\item |{NiceArrayRCwithDelims}| ; -\item |{pNiceArrayRC}|, |{bNiceArrayRC}|, |{BNiceArrayRC}|, |{vNiceArrayRC}|, -|{VNiceArrayRC}|. -\end{itemize} - -Le code correspondant est toutefois encore présent à la fin du fichier |nicematrix.sty|, après une -commande |\file_input_stop:|. - +L'extension \pkg{nicematrix} n'est pas parfaitement compatible avec l'extension \pkg{arydshln} (parce que cette +extension redéfinit de nombreuses commandes internes de \pkg{array}). \section{Exemples} @@ -2402,11 +2671,9 @@ a_p & &&a_0 & & &b_1 \\ \end{scope} \vspace{2cm} -Un exemple avec un système linéaire (le trait vertical a été tracé en bleu avec les outils de -\pkg{colortbl}):\par\nobreak +Un exemple avec un système linéaire:\par\nobreak \begin{Verbatim} -\arrayrulecolor{blue} $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle] 1 & 1 & 1 &\Cdots & & 1 & 0 & \\ 0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\ @@ -2415,10 +2682,9 @@ $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle] \Vdots & & &\Ddots & & 0 & \\ 0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1 \end{pNiceArray}$ -\arrayrulecolor{black} \end{Verbatim} -\arrayrulecolor{blue} + \[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle] 1 & 1 & 1 &\Cdots & & 1 & 0 & \\ 0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\ @@ -2427,7 +2693,7 @@ $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle] \Vdots & & &\Ddots & & 0 & \\ 0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1 \end{pNiceArray}\] -\arrayrulecolor{black} + \subsection{Des lignes pointillées qui ne sont plus pointillées} @@ -2617,19 +2883,16 @@ a_{41} & a_{42} & a_{43} & a_{44} On remarquera que les traits que l'on vient de tracer sont dessinés \emph{après} la matrice sans modifier la position des composantes de celle-ci. En revanche, les traits tracés par |\hline|, le spécificateur «\verb+|+» ou -les options |hlines| et |vlines| «écartent» les composantes de la matrice (quand l'extension \pkg{array} est -chargée, ce qui est toujours le cas avec \pkg{nicematrix}).\footnote{En revanche les traits tracés par |\ncline| - n'écartent pas les lignes de la matrice.} +les options |hlines|, |vlines| et |hvlines| «écartent» les composantes de la matrice.\footnote{Pour la commande + |\cline|, voir la remarque p.~\pageref{remark-cline}.} \vspace{1cm} - -L'extension \pkg{nicematrix} est construite au-dessus de l'environnement |{array}| et, par conséquent, il est -possible d'utiliser l'extension \pkg{colortbl} dans les environnements de \pkg{nicematrix}. Les possibilités de -réglage de \pkg{colortbl} sont néanmoins assez limitées. C'est pourquoi nous proposons une autre méthode pour -surligner une rangée de la matrice. Nous créons un nœud Tikz rectangulaire qui englobe les nœuds de la deuxième -rangée en utilisant les outils de la bibliothèque Tikz \pkg{fit}. Ce nœud est rempli après la construction de la -matrice. Pour que l'on puisse voir le texte \emph{sous} le nœud, nous devons utiliser la transparence avec le -|blend mode| égal à |multiply|. +Il est possible de colorier une rangée avec |\rowcolor| dans le |code-before| (ou avec |\rowcolor| de +\pkg{colortbl} dans la première case de la rangée ). Les possibilités de réglages sont néanmoins limitées. C'est +pourquoi nous présentons ici une autre méthode pour surligner une rangée de la matrice. Nous créons un nœud Tikz +rectangulaire qui englobe les nœuds de la deuxième rangée en utilisant les outils de la bibliothèque Tikz +\pkg{fit}. Ce nœud est rempli après la construction de la matrice. Pour que l'on puisse voir le texte \emph{sous} +le nœud, nous devons utiliser la transparence avec le |blend mode| égal à |multiply|. \tikzset{highlight/.style={rectangle, @@ -2941,3 +3204,8 @@ documentation ici présente, ainsi que le code source commenté et un historique \end{document} + + + + + -- cgit v1.2.3