![tikz 矩阵中节点之间的水平箭头](https://linux22.com/image/428702/tikz%20%E7%9F%A9%E9%98%B5%E4%B8%AD%E8%8A%82%E7%82%B9%E4%B9%8B%E9%97%B4%E7%9A%84%E6%B0%B4%E5%B9%B3%E7%AE%AD%E5%A4%B4.png)
我对下图中箭头调平的简化方法很感兴趣(一个非常缩小的例子)
\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
。这意味着当节点的内容不相似时,节点的中心和节点的基线锚点不在同一高度。在这种情况下A
和A[1]
具有不同的基线。
(m-1-1)
和(m-1-2)
是指向m-1-1.center
和m-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}