我观察到 @AndrewStacey 的一个奇怪行为matrixcells.dtx
。单元格给我一个完整的平铺,但当某些行比平均身高高平铺发生了偏移(见下面的图片和示例)。奇怪的是,当某些列比平均水平更宽平铺是正确的。
我已经从 Launchpad 查看了matrixcells.dtx
一段时间,试图找出问题所在,但一直无法解决它。
如能得到任何帮助或指点,我将不胜感激。
下面是一个清楚显示该问题的示例:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usetikzlibrary{fit}
\usetikzlibrary{matrix}
\usepackage{matrixcells}
\begin{document}
\begin{figure}
\begin{tikzpicture}[every node/.style={draw}]
\matrix (m) [matrix of nodes, label cells, inner sep=0pt, nodes={inner sep=0.2cm}] {
1 & $\frac{20}{\frac{30}{40}}$ \\
1 & $\frac{20}{\frac{30}{\frac{40}{\frac{50}{60}}}}$\\
10 & 2 \\
};
\begin{pgfonlayer}{background}
\node [fit = (m-cell-1-1) (m-cell-1-2), fill=red!7, inner sep=0pt] {};
\node [fit = (m-cell-2-1) (m-cell-2-2), fill=blue!7, inner sep=0pt] {};
\node [fit = (m-cell-3-1) (m-cell-3-2), fill=red!7, inner sep=0pt] {};
\end{pgfonlayer}
\end{tikzpicture}
\end{figure}
\begin{figure}
\begin{tikzpicture}[every node/.style={draw}]
\matrix (m) [matrix of nodes, label cells, inner sep=0pt, nodes={inner sep=0.2cm}] {
1 & $\frac{20}{\frac{30}{40}}$ & 20 \\
1 & $\frac{20}{\frac{30}{\frac{40}{\frac{50}{60}}}}$ & 0 \\
10 & 2000000000000000 & 1 \\
};
\begin{pgfonlayer}{background}
\node [fit = (m-cell-1-1) (m-cell-3-1), fill=red!7, inner sep=0pt] {};
\node [fit = (m-cell-1-2) (m-cell-3-2), fill=blue!7, inner sep=0pt] {};
\node [fit = (m-cell-1-3) (m-cell-3-3), fill=red!7, inner sep=0pt] {};
\end{pgfonlayer}
\end{tikzpicture}
\end{figure}
\end{document}
第二张图正确显示如下:
另一方面,第一个显示不正确,如下所示:
答案1
有两个问题导致了这个问题。matrixcells
做出两个假设来提供它的cells
。首先,节点应该锚定在base
。其次,节点的高度为1em
。第二个条件不太重要,只会导致微小的错位。
第一个条件是最重要的。stackexchange 上展示的大多数示例都使用matrix of math nodes
默认的base
锚点。
我继续在一个名为的库中修复了这个问题矩阵.骨架。它与 相当matrixcells
,几乎可以用作替代品。它提供了 github 和手册中描述的额外功能。一个额外的功能是添加column
和row
节点。因此,label cells
选项已被 选项取代label skeleton
。
cells
该 MWE 修复了该问题并展示了和的用法rows
:
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix.skeleton}
\begin{document}
\begin{tikzpicture}[every node/.style={draw}]
\matrix (m) [matrix of nodes, label skeleton, inner sep=0pt, nodes={inner sep=0.2cm}] {
1 & $\frac{20}{\frac{30}{40}}$ \\
1 & $\frac{20}{\frac{30}{\frac{40}{\frac{50}{60}}}}$\\
10 & 2 \\
};
\begin{pgfonlayer}{background}
\node [fit = (m-row-1), fill=red!7, inner sep=0pt] {};
\node [fit = (m-cell-2-1) (m-cell-2-2), fill=blue!7, inner sep=0pt] {};
\node [fit = (m-row-3), fill=red!7, inner sep=0pt] {};
\end{pgfonlayer}
\end{tikzpicture}
\end{document}