TikZ 矩阵分隔符太大

TikZ 矩阵分隔符太大

我想用 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 matrixnode包含其他节点的,因此节点与括号之间的距离是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 版本合理的近似值:

  1. 将内部分离设置为tikzpicture-.2pt其他适当的小值;

  2. \strut每行应用一个;

  3. 使每列对齐方式&加倍 ( &&),并将所需的列分隔应用于每列的一个条目(此处针对&~~~&第 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}

在此处输入图片描述

相关内容