En elMWE A continuación he definido
\def\MaxRow{3}
\def\MaxColumn{4}
lo que significa que este código no funcionará si agrego una fila o una columna a la matriz sin ajustar también las constantes \MaxRow
y \MaxColumn
. ¿Existe una manera fácil de determinar
- el número máximo de filas y
- el número máximo de columnas
de un matrix of math nodes
?
En el código siguiente, estoy trazando una línea entre la entrada suroeste y la entrada noreste.
Código:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\def\MaxRow{3}
\def\MaxColumn{4}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of math nodes,
]{
1 & 2 & 3 & a\\
4 & 5 & 6 & b\\
7 & 8 & 9 & c\\
};
%% How to determine \MaxRow and \MaxColumn here?
\draw [red, thick, -latex](m-\MaxRow-1.south west) -- (m-1-\MaxColumn.north east);
\end{tikzpicture}
\end{document}
Respuesta1
Para mi sorpresa, es tan fácil como utilizar los recuentos internos \pgfmatrixcurrentrow
y \pgfmatrixcurrentcolumn
que no se ponen a cero una vez construida la matriz.
Por supuesto, estos valores sólo son válidos hasta que se construya la siguiente matriz.
Como alternativa, agregué una matrix with last
clave que configura matrices para que después de la matriz
<matrix name>-<row>-Z
hace referencia al último nodo de la fila<row>
,<matrix name>-Z-<column>
hace referencia al último nodo de la columna<column>
y<matrix name>-Z-Z
hace referencia al último nodo de la matriz.
(Esto se aplica a todos los nodos dentro de una celda, por lo que no es tan sencillo para matrices más complejas).
Código
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\newcommand*\MaxRow{\the\pgfmatrixcurrentrow}
\newcommand*\MaxColumn{\the\pgfmatrixcurrentcolumn}
\tikzset{
matrix with last/.default=Z,
matrix with last/.style={
every matrix/.append style={
nodes={
alias=\tikzmatrixname-\the\pgfmatrixcurrentrow-#1,
alias=\tikzmatrixname-#1-\the\pgfmatrixcurrentcolumn,
alias=\tikzmatrixname-#1-#1}}}}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of math nodes,
matrix with last
]{
1 & 2 & 3 & a\\
4 & 5 & 6 & b\\
7 & 8 & 9 & c\\
};
\draw[red, thick, -latex](m-\MaxRow-1.south west) -- (m-1-\MaxColumn.north east);
\draw[blue, bend left] (m-Z-1.south west) to (m-1-Z.north east) to (m-Z-Z.center);
\end{tikzpicture}
\end{document}
Respuesta2
Para obtener información, hay una manera de crear dicha figura con nicematrix
(y TikZ para dibujar la flecha).
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
$\begin{NiceMatrix}
1 & 2 & 3 & a \\
4 & 5 & 6 & b \\
7 & 8 & 9 & c
\CodeAfter
\tikz \draw [red,thick,-latex] (last-|1) -- (1-|last) ;
\end{NiceMatrix}$
\end{document}