ImMWE Im Folgenden habe ich definiert
\def\MaxRow{3}
\def\MaxColumn{4}
Das bedeutet, dass dieser Code nicht funktioniert, wenn ich der Matrix eine Zeile oder Spalte hinzufüge, ohne auch die Konstanten \MaxRow
und anzupassen \MaxColumn
. Gibt es eine einfache Möglichkeit, dies zu bestimmen?
- die maximale Zeilenanzahl und
- die maximale Anzahl von Spalten
von einem matrix of math nodes
?
Im folgenden Code zeichne ich eine Linie zwischen dem südwestlichen Eingang und dem nordöstlichen Eingang.
Code:
\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}
Antwort1
Zu meiner Überraschung ist es so einfach, wie die internen Zählwerte zu verwenden \pgfmatrixcurrentrow
, und \pgfmatrixcurrentcolumn
sie werden nach der Erstellung der Matrix nicht zurückgesetzt.
Natürlich sind diese Werte nur bis zur Konstruktion der nächsten Matrix gültig.
Als Alternative habe ich einen matrix with last
Schlüssel hinzugefügt, der Matrizen so einrichtet, dass nach der Matrix
<matrix name>-<row>-Z
verweist auf den letzten Knoten in der Zeile<row>
,<matrix name>-Z-<column>
verweist auf den letzten Knoten in der Spalte<column>
und<matrix name>-Z-Z
verweist auf den letzten Knoten in der Matrix.
(Dies gilt für jeden Knoten innerhalb einer Zelle und ist daher bei komplexeren Matrizen nicht so einfach.)
Code
\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}
Antwort2
Zu Ihrer Information: Es gibt eine Möglichkeit, eine solche Figur zu erstellen nicematrix
(und TikZ zum Zeichnen des Pfeils).
\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}