Automatisierte Methode zur Ermittlung der maximalen Spalten-/Zeilenanzahl für die Tikz-„Matrix mathematischer Knoten“

Automatisierte Methode zur Ermittlung der maximalen Spalten-/Zeilenanzahl für die Tikz-„Matrix mathematischer Knoten“

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

Bildbeschreibung hier eingeben

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 \pgfmatrixcurrentcolumnsie 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 lastSchlüssel hinzugefügt, der Matrizen so einrichtet, dass nach der Matrix

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

Ausgabe des obigen Codes

verwandte Informationen