自动确定 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}

上述代码的输出

相关内容