如何让 TikZ 节点不改变对齐?

如何让 TikZ 节点不改变对齐?

我仍在努力渲染一个漂亮的块矩阵。我一直在使用 BMAT,但它与手头的问题无关。我想用线连接数组/矩阵/BMAT 中的各种条目,为此我使用了 TikZ。但是,我遇到了这个问题:当我用 TikZ 节点包围条目时(用于稍后绘制路径),它会改变垂直对齐方式并基本上搞砸了一切。

以下是 MWE:

\documentclass{article} 
\usepackage{tikz}

\begin{document}
\begin{equation}
\begin{array}{ccc}
 2 & \tikz \node {$0$}; & \frac{2}{3} \\
 0 & \frac{4}{3} & 0 \\
 -\frac{2}{3} & \tikz \node [inner sep=0pt,outer sep=0pt]{$0$}; & 
   \tikz \node [inner sep=0pt,outer sep=0pt]{$\frac{6}{5}$}; \\
 0 & -\frac{4}{5} & 0 \\
\end{array}
\end{equation}

\end{document}

输出:

矩阵中条目未对齐

如您所见,周围有节点的条目在垂直方向上不匹配,并且与其他条目的对齐方式不同。将outer sep和设置inner sep为零没有帮助......

有任何想法吗?

答案1

您可以使用\matrix提供的命令pgf/tikZ包。请参见下面的示例以获得一些启发。

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
  \begin{equation}
    \begin{tikzpicture}[baseline=(current bounding box.west)]
      \matrix [%
        matrix of math nodes,
        text centered
      ] {%
        2 & 0 & \frac{2}{3} \\
        0 & \frac{4}{3} & 0 \\
        -\frac{2}{3} & 0 & -\frac{4}{5} \\
      };
    \end{tikzpicture}
  \end{equation}
\end{document}

答案2

知道我在 pgf 手册中读到过一些关于此内容的内容,但记不清在哪里了。我刚刚又读了一遍,所以这里是其他答案。我仍然推荐 Thorsten 的解决方案,但我可以想象有时这是不可能的,所以这里是如何准确地完成问题中要求的:使用命令baseline上的选项\tikz。这会告诉 TeX 图片的“基线”应该在哪里(以及它应该在当前行的什么位置)。最棒的是,这是在绘制图片后计算出来的,因此可以利用在绘制图片时计算的信息。以下是一个例子:

\documentclass{article} 
\usepackage{tikz}

\tikzstyle{matnode} = [inner sep=0pt,outer sep=0pt,anchor=base,remember picture,overlay]

\begin{document}
\begin{equation}
\begin{array}{ccc}
 2 & \tikz \node[inner sep=0pt,outer sep=0pt] {$0$}; & \frac{2}{3} \\
 0 & \frac{4}{3} & 0 \\
 -\frac{2}{3} & \tikz \node [inner sep=0pt,outer sep=0pt]{$0$}; & \tikz \node [inner sep=0pt,outer sep=0pt,anchor=base]{$\frac{6}{5}$}; \\
 0 & -\frac{4}{5} & 0 \\
\end{array}
\begin{array}{ccc}
 2 & 0 & \frac{2}{3} \\
 0 & \frac{4}{3} & 0 \\
 -\frac{2}{3} & 0 & \frac{6}{5} \\
 0 & -\frac{4}{5} & 0 \\
\end{array}
\begin{array}{ccc}
 2 & \tikz[baseline=0pt] \node[matnode] (a) {$0$}; & \frac{2}{3} \\
 0 & \frac{4}{3} & 0 \\
 -\frac{2}{3} & \tikz[baseline=0pt] \node [matnode] (b) {$0$}; & \tikz[baseline=0pt] \node [matnode] (c) {$\frac{6}{5}$}; \\
 0 & -\frac{4}{5} & 0 \\
\end{array}
\end{equation}

\end{document}

顺便说一句,我使用了一个技巧来找出对齐方式是否正确。盯着屏幕上的文档,然后让你的眼睛“斜视”,直到一只眼睛看到一个版本,另一只眼睛看到另一个版本。然后任何错位都会导致文本“跳入”或“跳出”页面。你应该寻找大的跳跃,因为即使是像素差异也会很明显。

答案3

在这种情况下,我会选择“将所有内容放在一个图表中”的方法,但有时这是不可能的。另一种方法是将空节点放在您希望线路(或其他任何内容)到达的位置:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{equation}
\begin{array}{ccc}
 2 & \tikz \node[inner sep=0pt, outer sep=0pt]{};0 & \frac{2}{3} \\
 0 & \frac{4}{3} & 0 \\
 -\frac{2}{3} & \tikz \node[inner sep=0pt, outer sep=0pt] {};0 &
  \tikz \node[inner sep=0pt, outer sep=0pt]{};\frac{6}{5} \\
 0 & -\frac{4}{5} & 0 \\
\end{array} 
\end{equation}
\end{document} 

(不要忘记标记节点,并在用于定义它们的 tikz 命令之外引用它们,然后您需要添加选项remember pictureoverlay;有关pgfmanual这些内容的更多信息,请参阅)

相关内容