Автоматизированный способ определения максимального количества столбцов/максимального количества строк для «матрицы математических узлов» Tikz

Автоматизированный способ определения максимального количества столбцов/максимального количества строк для «матрицы математических узлов» Tikz

вМВЭ ниже я определил

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

что означает, что этот код не будет работать, если я случайно добавлю строку или столбец в матрицу, не скорректировав константы \MaxRowи \MaxColumn. Есть ли простой способ определить

  • максимальное количество строк и
  • максимальное количество столбцов

из matrix of math nodes?

В коде ниже я рисую линию между юго-западным входом и северо-восточным входом.

введите описание изображения здесь

Код:

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

решение1

К моему удивлению, это так же просто, как использовать внутренние счетчики, \pgfmatrixcurrentrowи \pgfmatrixcurrentcolumnони не сбрасываются после построения матрицы.

Конечно, эти значения действительны только до тех пор, пока не будет построена следующая матрица.


В качестве альтернативы я добавил matrix with lastключ, который настраивает матрицы таким образом, что после матрицы

  • <matrix name>-<row>-Zссылается на последний узел в строке <row>,
  • <matrix name>-Z-<column>ссылается на последний узел в столбце <column>и
  • <matrix name>-Z-Zссылается на последний узел в матрице.

(Это применимо к каждому узлу внутри ячейки, поэтому для более сложных матриц это не так просто.)

Код

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

решение2

Для информации, есть способ создать такую ​​фигуру с помощью nicematrix(и TikZ, чтобы нарисовать стрелку).

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

Вывод кода выше

Связанный контент