如何使节点大小相同而不影响矩阵中的单元格

如何使节点大小相同而不影响矩阵中的单元格

我正在用 tikz 画一棵树,希望所有节点都具有相同的大小,而不管内容如何。

这是我的代码当前所做的:

树:根节点有 2x1 个单元格,左子节点有 3x3 个单元格,右子节点有 2x1 个单元格

这是我的代码:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{trees,matrix}
\begin{document}
\begin{tikzpicture}[level distance=2cm,
    sibling distance=3cm,
    outer_nodes/.style={shape=rectangle,rounded corners,draw,align=center,minimum height=4cm,minimum width=5cm},
    cells/.style={text height=0.2cm, text width=0.5cm, minimum height=0.2cm, minimum width=0.5}
]
\node[outer_nodes,matrix,matrix of nodes,ampersand replacement=\&] {
    \node {3};\&\node {6};\\
}
        child {
            node[outer_nodes,matrix,matrix of nodes,ampersand replacement=\&] {
                \node {$ct_1^5$};\&\node {$ct_2^5$};\&\node {$ct_3^5$};\\
                \node {$cd_1^5$};\&\node {$cd_2^5$};\&\node {$cd_3^5$};\\
                \node {-8}; \& \&\node { 8};\\
            }
        }
        child {
            node[outer_nodes,matrix,matrix of nodes,ampersand replacement=\&] {
                \node {3};\&\node {3};\\
            }
        };
\end{tikzpicture}
\end{document}

我尝试设置最小尺寸,但这也影响了单元格,使它们变得太大。通过再次指定来覆盖单元格最小尺寸不起作用。

我也尝试过调整最小值/文本高度/大小,但没有找到合适的组合。

答案1

您的示例中的这一行有两个错误:

cells/.style={text height=0.2cm, text width=0.5cm, minimum height=0.2cm, minimum width=0.5}

密钥cells已定义为

cells/.style={every cell/.append style={#1}}

即,将其值添加到every cell样式中。通过这样做,cells/.style您只是定义了一种cells从未被任何矩阵使用的样式。

此外,

minimum width=0.5

不包含节点。当 PGFmath 评估这一点时(在创建矩阵节点期间),它将假设pt0.5pt,这也不会执行任何操作,因为您的矩阵比这更宽。

你应该做

cells={
    text height=0.2cm, text width=0.5cm, minimum size=1pt}

minimum width即将和再次重置minimum height为默认长度(或仅为0pt),或使用every outer matrix仅适用于矩阵节点而不适用于矩阵单元中节点的样式:

outer_nodes/.style={
    shape=rectangle, rounded corners, draw, align=center,
    every outer matrix/.append style={
        minimum height=4cm,
        minimum width=5cm
    },
}

顺便说一句,其他选项如rounded cornersalign=center也将被矩阵的单元节点继承,但这要么是必需的(align=center对矩阵没有多大作用),要么不是问题(rounded corners不会被绘制)。


由于您已在使用,matrix of nodes因此不需要\node矩阵中的 s。而且该matrix库还提供了matrix of math nodes

我重新整理了你的一些风格。

如果您只需要该树中的数学矩阵,我建议使用实际的数学矩阵(例如matrix来自的环境amsmath),然后您也可以轻松使用graphs或(使用 LuaLaTeX)graphdrawing库或forest包。
我添加了两个使用相同节点样式的示例。(节点看起来有点不同,因为TikZ 节点使用的 s当然inner sep不会被应用。amsmath

代码

\documentclass[tikz]{standalone}
\usepackage{
  forest, % for forest environment
  amsmath % for matrix environment (not TikZ \matrix!)
}
\usetikzlibrary{trees, matrix, graphs}
\newcommand*\mymatrix[1]{$\begin{matrix}#1\end{matrix}$}
\begin{document}
\begin{tikzpicture}[
  level distance=2.5cm,
  sibling distance=3cm,
  matrix node/.style={
    matrix of math nodes, ampersand replacement=\&, matrix_nodes},
  matrix_nodes/.style={
    shape=rectangle, rounded corners, draw, align=center,
     every outer matrix/.append style={
       minimum height=18mm,
       minimum width =25mm
     },
  },
  cells={text height=0.2cm, text width=0.5cm},
]
\node[matrix node] {
    3 \& 6 \\
}
    child {
        node[matrix node] {
            ct_1^5 \& ct_2^5 \& ct_3^5 \\
            cd_1^5 \& cd_2^5 \& cd_3^5 \\
               -8  \&        \&      8 \\
        }
    }
    child {
        node[matrix node] {
            3 \& 3 \\
        }
    };
\end{tikzpicture}

\tikz[]
\graph[
  grow down sep,
  branch right sep,
  nodes={
    rounded corners,
    draw,
    minimum height=18mm,
    minimum width =25mm
  },
] {
  root/\mymatrix{3 & 6}
  -- {
    ch1/\mymatrix{
        ct_1^5 & ct_2^5 & ct_3^5 \\
        cd_1^5 & cd_2^5 & cd_3^5 \\
           -8  &        &      8
    },
    ch2/\mymatrix{3 & 3}
  }
};
\begin{forest}
  for tree={
    rounded corners,
    draw,
    minimum height=18mm,
    minimum width =25mm
  }
[\mymatrix{3 & 6}
  [\mymatrix{
     ct_1^5 & ct_2^5 & ct_3^5 \\
     cd_1^5 & cd_2^5 & cd_3^5 \\
        -8  &        &      8
  }]
  [\mymatrix{3 & 3}]
]
\end{forest}
\end{document}

输出

在此处输入图片描述

答案2

为了进行比较,下面是一个使用的解决方案forest

在此处输入图片描述

\documentclass{article}

\usepackage{forest, amsmath}

\begin{document}
\begin{forest}
for tree={draw, rounded corners, minimum width=7em, minimum height=10ex, s sep=5mm}
[$\begin{matrix}3 & 6\end{matrix}$
    [$\begin{matrix} ct_1^5 & ct_2^5 & ct_3^5 \\ cd_1^5 & cd_2^5 & cd_3^5 \\ -8 & & 8\end{matrix}$]
    [$\begin{matrix}3 & 3\end{matrix}$]
]
\end{forest}
\end{document}

相关内容