我想用 TikZ 制作一个矩阵,这样我就可以在一些元素周围放置一些漂亮的彩色框,但我遇到了一个问题:矩阵周围的括号太大,与元素相距太远,至少与常规相比\pmatrix
。这是一个例子:
\documentclass{article}
\usepackage{amsmath,tikz}
\usetikzlibrary{matrix}
\begin{document}
AMSMath:
\[ \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{pmatrix} \]
TikZ:
\[ \begin{tikzpicture}
\matrix[matrix of math nodes,left delimiter=(,right delimiter=)] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\ }; \end{tikzpicture} \]
TikZ without delimiters + AMSMath:
\[ \begin{pmatrix} \begin{tikzpicture}
\matrix[matrix of math nodes] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\ }; \end{tikzpicture} \end{pmatrix} \]
\end{document}
如果我不使用 TikZ 分隔符并将所有内容放在 内\pmatrix
,如在第三个示例中,括号看起来略有不同,但仍然太大。括号也会发生同样的事情。有办法解决这个问题吗?
答案1
分隔符可以通过以下样式进行移动every (left|right) delimiter
:
\documentclass[a5paper]{article}% (a5paper for smaller image width)
\usepackage{amsmath,tikz}
\usetikzlibrary{matrix}
\begin{document}
AMSMath:
\[ \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{pmatrix} \]
TikZ:
\[
\begin{tikzpicture}[
every left delimiter/.style={xshift=.75em},
every right delimiter/.style={xshift=-.75em},
]
\matrix[
matrix of math nodes,
left delimiter=(,
right delimiter=),
] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\
};
\end{tikzpicture}
\]
\end{document}
答案2
ATikZ matrix
是node
包含其他节点的,因此节点与括号之间的距离是inner sep
由于内部节点而产生的,第二个是inner sep
节点与矩阵边界之间的距离。
您可以将矩阵节点内部 sep 固定为 0pt,稍后再inner sep
为节点固定另一个(请参阅如何固定 TikZ 矩阵边框和其节点之间的一定距离?)。
\documentclass[a5paper]{article}% (a5paper for smaller image width)
\usepackage{amsmath,tikz}
\usetikzlibrary{matrix}
\begin{document}
AMSMath:
\[ \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{pmatrix} \]
TikZ: default inner sep
\[
\begin{tikzpicture}
\matrix[draw, %<- just used to show differences
matrix of math nodes,
left delimiter=(,
right delimiter=),
] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\
};
\end{tikzpicture}
\]
TikZ: matrix inner sep = 0pt
\[
\begin{tikzpicture}
\matrix[draw, %<- just used to show differences
inner sep=0pt, %<- set inner sep for all nodes
nodes={inner sep=.3333em}, %<- set another inner sep for inner nodes
matrix of math nodes,
left delimiter=(,
right delimiter=),
] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\
};
\end{tikzpicture}
\]
\end{document}
答案3
也许你想再减少一点内部分离,如下所示
\documentclass{article}
\usepackage{amsmath,tikz}
\usetikzlibrary{matrix}
\begin{document}
AMSMath:
\[ \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{pmatrix} \]
TikZ:
\[ \begin{tikzpicture}
\matrix[matrix of math nodes,left delimiter=(,right delimiter=),
outer sep = 0pt,inner sep=2pt] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\ }; \end{tikzpicture} \]
TikZ without delimiters + AMSMath:
\[ \begin{pmatrix} \begin{tikzpicture}
\matrix[matrix of math nodes] (m) {
1 & 2 & 3 \\
4 & 5 & 6 \\ }; \end{tikzpicture} \end{pmatrix} \]
\end{document}
答案4
虽然编码不方便,但通过做以下三件事可以得到与 AMSmath 版本合理的近似值:
将内部分离设置为
tikzpicture
或-.2pt
其他适当的小值;\strut
每行应用一个;使每列对齐方式
&
加倍 (&&
),并将所需的列分隔应用于每列的一个条目(此处针对&~~~&
第 1 行的每一列进行操作)
这是 MWE。
\documentclass{article}
\usepackage{amsmath,tikz}
\usetikzlibrary{matrix}
\begin{document}
AMSMath:
\[ \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{pmatrix} \]
TikZ:
\[ \begin{tikzpicture}[inner sep=-.2pt]
\matrix[matrix of math nodes,left delimiter=(,right delimiter=)] (m) {
\strut1 &~~~& 2 &~~~& 3 \\
\strut4 && 5 && 6 \\ }; \end{tikzpicture} \]
\end{document}