自動確定 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 中的最後一個節點<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}

上述程式碼的輸出

相關內容