вМВЭ ниже я определил
\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}