tikz 矩阵中节点之间的水平箭头

tikz 矩阵中节点之间的水平箭头

我对下图中箭头调平的简化方法很感兴趣(一个非常缩小的例子)

\begin{tikzpicture}
\matrix (m) [matrix of math nodes, row sep=3.5em, column sep=3.5em]
 {A & A[1] \\
  A' & A'[1] \\};
\path[-stealth]
 (m-1-1) edge node [above] {$x$} (m-1-2)
 (m-2-1) edge node [above] {$y$} (m-2-2)
 (m-1-1) edge node [right] {$z$} (m-2-1)
 (m-1-2) edge node [right] {$t$} (m-2-2);
\end{tikzpicture}

产生

正如您所看到的,水平箭头毕竟不是那么水平。根据答案和评论这个问题我了解到 a) 添加会使nodes={anchor=east}水平箭头变直,但会使垂直箭头倾斜,而 b)(m-1-1) edge node [above] {$x$} (m-1-2)(m-1-1) edge node [above] {$x$} (m-1-1.west -| m-1-2.west)等替换可以完成这项工作,但坦率地说有点麻烦。c) 添加\phantom{foo}到每个节点以确保它们具有相同的高度(或者更确切地说是相同的中心)也是如此。

由于我有相当多不同的、更复杂的图表需要绘制(并且已经绘制成矩阵),有什么好的方法可以全局修复每个图表中绘制箭头的网格在 tikz 矩阵环境中? 如果我遗漏了一些显而易见的东西,我不会感到惊讶(实际上,我希望如此),因为这似乎比在文本中引入幻影字符更容易做到。

答案1

Amatrix of nodes或 amatrix of math nodes将节点的锚点固定为base。这意味着当节点的内容不相似时,节点的中心和节点的基线锚点不在同一高度。在这种情况下AA[1]具有不同的基线。

(m-1-1)(m-1-2)是指向m-1-1.centerm-1-2.center锚点的引用,它们不在水平线上。

如果将节点的锚点更改为center,节点将改变其垂直对齐方式以将中心置于水平线上。nodes={anchor=center}将完成工作。

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of math nodes, row sep=3.5em, column sep=3.5em, nodes={anchor=center}]
 {A & A[1] \\
  A' & A'[1] \\};
\path[-stealth]
 (m-1-1) edge node [above] {$x$} (m-1-2)
 (m-2-1) edge node [above] {$y$} (m-2-2)
 (m-1-1) edge node [right] {$z$} (m-2-1)
 (m-1-2) edge node [right] {$t$} (m-2-2);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容