Forma automatizada de determinar el número máximo de columnas/filas para la "matriz de nodos matemáticos" de Tikz

Forma automatizada de determinar el número máximo de columnas/filas para la "matriz de nodos matemáticos" de Tikz

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 \MaxRowy \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.

ingrese la descripción de la imagen aquí

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 \pgfmatrixcurrentrowy \pgfmatrixcurrentcolumnque 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 lastclave que configura matrices para que después de la matriz

  • <matrix name>-<row>-Zhace 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-Zhace 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}

Salida del código anterior

información relacionada