这与括号内的 tikz 图片基线但这是另一个问题。
考虑以下 MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix} % for "matrix of math nodes"
\begin{document}
\begin{equation}
\begin{tikzpicture}[baseline=(current bounding box.center)]
\matrix[matrix of math nodes, draw, nodes={draw}] {
a & b & c \\
d & e & f \\
};
\end{tikzpicture}
\end{equation}
\end{document}
它产生以下输出:
我想消除矩阵内部节点与矩阵边界框之间的空间。将矩阵设置inner sep
为 0 可以实现这一点 --- 但它也会改变矩阵内部所有节点的内部 sep,这不是我想要的:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix} % for "matrix of math nodes"
\begin{document}
\begin{equation}
\begin{tikzpicture}[baseline=(current bounding box.center)]
\matrix[matrix of math nodes, draw, nodes={draw}, inner sep=0pt] {
a & b & c \\
d & e & f \\
};
\end{tikzpicture}
\end{equation}
\end{document}
我怎样才能改变矩阵节点的内部分离,同时保持其内部的节点不变?
我发现了一个几乎重复的问题,如何固定 TikZ 矩阵边框和其节点之间的一定距离?。但是,该问题的答案只是明确设置了节点的内部 sep,这是我想避免的 - 我想将每个节点的内部 sep 保留为如果它不在矩阵中则会具有的任何值。
答案1
随着风格/tikz/every outer matrix
您可以仅更改矩阵节点的样式,而不能更改矩阵的节点的样式。
代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix} % for "matrix of math nodes"
\tikzset{tight matrix/.style={every outer matrix/.append style={inner sep=+0pt}}}
\begin{document}
\begin{equation}
\begin{tikzpicture}[baseline=(current bounding box.center)]
\matrix[matrix of math nodes, draw, nodes={draw}, tight matrix] {
a & b & c \\
d & e & f \\
};
\end{tikzpicture}
\end{equation}
\end{document}
输出
答案2
据我所知,没有inner sep
参数matrix node
。因此,当某个inner sep
固定时,它决定了节点的内部分离,也决定了节点与矩阵边界之间的分离。为了避免这种行为,您应该使用 M. Al Jumaily 的解决方案:nodes={inner sep=...}
。
如果您不喜欢它,一个可能的替代方案是使用not draw
矩阵边框并用节点绘制它fit
。在这种情况下,您可以保留原始节点内部分隔(最初为 .3333em),并且可以将边框绘制到您决定的任何分隔。
以下代码展示了此解决方案。矩阵边框未绘制,并且添加了三个带有fit
节点的不同边框。
我认为这不是一个好的解决方案,因为您必须区分真实矩阵节点和拟合节点,并且您必须知道哪些内部节点更大才能将它们包含在fit
列表中。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix, fit} % for "matrix of math nodes"
\begin{document}
\begin{equation}
\begin{tikzpicture}[baseline=(current bounding box.center)]
\matrix[matrix of math nodes, nodes={draw}] (A) {
a & b & c \\
d & e & f \\
};
\node[fit={(A-1-1) (A-1-2) (A-2-3)}, inner sep=0pt, draw=green, inner sep=2pt] (B) {};
\node[fit={(A-1-1) (A-1-2) (A-2-3)}, inner sep=0pt, draw=blue, inner sep=0pt] (C) {};
\node[fit={(A-1-1) (A-1-2) (A-2-3)}, inner sep=0pt, draw=red, inner sep=5mm] (D) {};
\end{tikzpicture}
\end{equation}
\end{document}
答案3
此答案基于弗里茨的回答始终值得称赞。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{custom nodes/.style={
draw=red,
matrix of math nodes,
cells/.expanded={
nodes={draw=blue},
inner xsep=\pgfkeysvalueof{/pgf/inner xsep},
inner ysep=\pgfkeysvalueof{/pgf/inner ysep}
}
}}
\begin{document}
\begin{equation}
\begin{tikzpicture}[ baseline=(current bounding box.center)]
\matrix[custom nodes, inner sep=0pt] {
a & b & c \\
d & e & f \\
};
\end{tikzpicture}
\end{equation}
\end{document}