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}

上記コードの出力

関連情報