如何在矩阵锚点中使用复杂表达式?

如何在矩阵锚点中使用复杂表达式?

请看下图:

在此处输入图片描述

我已经这样做了:

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{matrix,positioning,arrows}

\tikzset{
    >=stealth',
    box/.style={%
       rectangle, 
       rounded corners, 
       draw=black, very thick, solid,
       text width=10em, 
       minimum height=3em, 
       align=center, 
       inner sep=.3333em
    },
    vbox/.style={%
        matrix of nodes,
        nodes = {box},
        draw,
      dashed,
        column sep=.8cm,
        row sep=.8cm,
        inner sep=.2cm
    }
}

\begin{document}

\begin{tikzpicture}[node distance=2cm]
   \matrix (A) [vbox]{
        A11 & A12 \\
    };

   \matrix (B) [vbox, matrix anchor=B-2-1.south, above=of A-1-1.north-|A.center] {
        B11\\ B21 \\
    };

    \begin{scope}[red]
    \draw (A-1-1.north)--(A-1-2.north);
    \draw[<->] (B-2-1.south) -- (A-1-1.north-|A.center) node[midway,right] {node distance = 2cm};
    \end{scope}
\end{tikzpicture}
\end{document}

如您所见,我首先绘制矩阵 A,然后放置矩阵 B matrix anchor=B-2-1.south, above=of A-1-1.north-|A.center

现在,我想反过来做,先用矩阵 B,然后用矩阵 A,类似matrix anchor=A-1-1.north-|A.center, below=of B-2-1.south。但TiKZ我不喜欢这样matrix anchor

我已测试了和的几种组合{},但()均未成功。

可以做到吗?如果不行,我怎样才能将矩阵 A 放在矩阵 B 之后?

答案1

首先,如果我没记错的A-1-1.north-|A.center[yshift=-inner ysep amount]A.north,切换到

   \matrix (B) [vbox] {
        B11\\ B21 \\
    };

   \matrix (A) [vbox, matrix anchor=north, below={2cm-2mm} of B-2-1.south]{
        A11 & A12 \\
    };

在您的技术中,问题主要在于结果不是矩阵的锚点。此外,TikZ 会尝试查看您是否提供了包含点的参数,.否则它会认为它是外部矩阵矩形的锚点。

但在这两种情况下,最终都会将右侧部分<node>.<anchor>发送给\pgfmatrix{}{anchor}{}{}{shift}{}{}命令。左侧部分将转换为移位。这就是为什么复杂部分在被解析为坐标之前最终会变成错误参数的原因。

相关内容