我想在 tikz 矩阵中构造复杂的东西(但我们不是都这样做),当我完成后,我希望矩阵的行和列沿着这些复杂事物的中心对齐。以下是出错的示例:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\matrix
{
\path node{a} node[right] {b}; \\
\node{c};\\
};
\end{tikzpicture}
\end{document}
您将看到第二行对齐在左边第一行。 tikz 手册中对此的原因解释得很清楚:行和列沿着单元格的“原点”对齐。
这意味着每个单元格都被视为具有原点(即 (0,0))的微型图片,并且所有这些点都放在网格上。由此可以清楚地看出,上图中发生的事情是 从 (0,0) 开始\path
并向右移动,同样\node
从 (0,0) 开始并向右移动,并且(正如所声称的)这两个原点排成一行。
不幸的是,这不是我想要的,而且没有明显的方法可以改变它。我想告诉 tikz,顶部单元格的“原点”是其边界框的中心。如果它是单个节点,那就很容易了:只需将其写[anchor = center]
为选项即可。
但我无法将路径放入节点中,因此无法直接执行此操作。虽然可以将 传递[xshift = <dimen>]
给\path
,但我必须在开始之前知道该移位是什么,而(因为它是这样的一个复杂的图形)我直到最后才知道,那时再进行坐标变换就太晚了。
我该怎么做?基本上,我想给出一个完全相对的构造,然后在其上贴上一个坐标系。或者,我想知道是否有任何矩阵选项可以做到这一点,而我忽略了。另一种选择:有没有其他方法可以在不使用矩阵的情况下实现这种对齐?
答案1
您不能将路径放在节点中,但您可以将路径放在节点中的 tikzpictures 中!比较第一行和第二行。我添加了一些样式,如 PGF (2.10) 手册第 17.3 节中所述。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[every node/.style={draw=black},font=\Huge]
\matrix[draw=red]
{
\node{a} node[right] {b}; \fill[blue] (0,0) circle (2pt); \\
\node{\tikz{\node{a} node[right] {b};}}; \fill[blue] (0,0) circle (2pt); \\
\node{c}; \fill[blue] (0,0) circle (2pt);\\
};
\end{tikzpicture}
\end{document}
注意外部环境中的选项如何tikzpicture
下降到\tikz
节点内部的组中。