Maneira automatizada de determinar o número máximo de colunas/linhas para a "matriz de nós matemáticos" do Tikz

Maneira automatizada de determinar o número máximo de colunas/linhas para a "matriz de nós matemáticos" do Tikz

NoMWE abaixo, eu defini

\def\MaxRow{3}
\def\MaxColumn{4}

o que significa que esse código não funcionará se eu adicionar uma linha ou coluna à matriz sem ajustar também as constantes \MaxRowe \MaxColumn. Existe uma maneira fácil de determinar

  • o número máximo de linhas e
  • o número máximo de colunas

de um matrix of math nodes?

No código abaixo estou traçando uma linha entre a entrada sudoeste e a entrada nordeste.

insira a descrição da imagem aqui

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}

Responder1

Para minha surpresa, é tão fácil quanto usar as contagens internas \pgfmatrixcurrentrowe \pgfmatrixcurrentcolumnelas não são zeradas após a construção da matriz.

Claro, estes valores só são válidos até que a próxima matriz seja construída.


Como alternativa, adicionei uma matrix with lastchave que configura matrizes para que depois da matriz

  • <matrix name>-<row>-Zfaz referência ao último nó em row <row>,
  • <matrix name>-Z-<column>faz referência ao último nó na coluna <column>e
  • <matrix name>-Z-Zfaz referência ao último nó da matriz.

(Isso se aplica a todos os nós dentro de uma célula, portanto não é tão simples para matrizes mais complexas.)

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}

Responder2

Para informação, existe uma maneira de criar tal figura com nicematrix(e TikZ para desenhar a seta).

\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}

Saída do código acima

informação relacionada