我正在尝试使用 tikz 图形的森林库创建树形图。编译时,整个图片移出了 tikz 边界框。有什么建议可以让图片居中吗?
有问题的 tikzpicture 是这个(是的,它不是真的很简单,但仍然应该足够简单。
由于它使用了 tikz 图库,所以编译时需要 lualatex。
\documentclass[]{beamer}
\usepackage[linguistics,external]{forest}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,shapes.geometric,arrows,hobby,backgrounds,calc,arrows.meta}
\usetikzlibrary{graphs,graphdrawing}
\begin{document}
\begin{tikzpicture}[show background rectangle]
\newcommand{\plus}{\color{darkgreen}{$+$}}
\newcommand{\minus}{\color{darkred}{$-$}}
% [every node/.style={edge={thick,blue}}]
\colorlet{darkred}{red!80!black}
\colorlet{darkgreen}{green!80!black}
\begin{forest}
%aligns the bottom lines
for tree={
where n children=0{tier=terminal,!u.tier=second,!uu.tier=third}{},
}
[ {$\{m_7,m_{11}\}$}
[{$\{m_8,m_9\}$}
[{$\{m_1,m_2,m_4\}$}
[{$\{m_1,m_3\}$}
[1][2],
]
[{$\{\dots\}$}
[3][4\\\plus]
]
]
[{$\{m_7\}$}
[ {$\{m_7\}$}
[{5\\\minus},for ancestors={edge={darkred,very thick}},edge={darkred,very thick}][6]
]
[ {$\{\dots\}$}
[7\\\plus][8\\\plus]
]
]
]
[{$\{\dots\}$}
[{$\{\dots\}$}[9\\\minus][10]]
[{$\{\dots\}$}[11][12\\\minus]]
]
]
\end{forest}
\end{tikzpicture}
\end{document}
答案1
答案2
Forest 使用tikzpicture
和嵌套它们不受支持,并且通常会产生奇怪的结果。因此,Herbert 的回答是正确的。但是,您的代码中还有其他几个潜在的陷阱 - 主要是where
inside的使用for tree
。所以,这是您的代码的一个稍微清理过的版本。我还展示了如何使用 Ti 添加框架钾Z,如果您愿意的话。只需删除该tikz+
行即可将其删除。
where
您在 中使用for tree
是不明智的。在最好的情况下,它效率低下。在最坏的情况下,它会带来麻烦并可能导致奇怪的效果。这是因为where
已经这样做了for tree
。要么使用where
,要么使用 ,if
而不是where
。
$
您可以通过合理使用 来避免节点混乱math content
。您不希望多行节点使用这种方法,但它适用于所有非终端节点。
\documentclass[border=10pt]{standalone}
\usepackage[linguistics]{forest}
\begin{document}
{% use a group if the definitions should be local (as we're losing the tikzpicture)
\newcommand{\plus}{\color{darkgreen}{$+$}}%
\newcommand{\minus}{\color{darkred}{$-$}}%
\colorlet{darkred}{red!80!black}%
\colorlet{darkgreen}{green!80!black}%
\begin{forest}
%aligns the bottom lines
% don't nest a where in a for tree as where already does for tree - it can do strange things
% using math content saves cluttering the nodes with $, but we don't want this for the last level, as these are multiline
where n children=0{tier=terminal,!u.tier=second,!uu.tier=third}{math content},
tikz+={\draw (current bounding box.south west) rectangle (current bounding box.north east);},
[{\{m_7,m_{11}\}}
[{\{m_8,m_9\}}
[{\{m_1,m_2,m_4\}}
[{\{m_1,m_3\}}
[1][2]
]
[{\{\dots\}}
[3][4\\\plus]
]
]
[{\{m_7\}}
[ {\{m_7\}}
[{5\\\minus},for ancestors={edge={darkred,very thick}},edge={darkred,very thick}][6]
]
[ {\{\dots\}}
[7\\\plus][8\\\plus]
]
]
]
[{\{\dots\}}
[{\{\dots\}}[9\\\minus][10]]
[{\{\dots\}}[11][12\\\minus]]
]
]
\end{forest}%
}
\end{document}
其输出与赫伯特的没有什么不同。