我仍在努力渲染一个漂亮的块矩阵。我一直在使用 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 picture
和overlay
;有关pgfmanual
这些内容的更多信息,请参阅)