仅包含 y 轴的矩阵单元问题

仅包含 y 轴的矩阵单元问题

我观察到 @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 和手册中描述的额外功能。一个额外的功能是添加columnrow节点。因此,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}

输出

相关内容