如何使 tikz 使矩阵的单元居中?

如何使 tikz 使矩阵的单元居中?

我想在 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节点内部的组中。

相关内容