我正在用 tikz 画一棵树,希望所有节点都具有相同的大小,而不管内容如何。
这是我的代码当前所做的:
这是我的代码:
\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 评估这一点时(在创建矩阵节点期间),它将假设pt
→ 0.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 corners
和align=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}