\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{
actor/.style={
circle,
draw,
minimum size=10mm
}
}
\begin{figure}[h]
\centering
\begin{tikzpicture}[sibling distance=20mm, level distance=20mm]
\node[actor] {user}
child[dashed] {node[actor,solid] {1}
child[solid] {node[actor] {3}}
child[solid] {node[actor] {4}}}
child[dashed] {node[actor,solid] {2}};
\draw[red] (current bounding box.north west) rectangle (current bounding box.south east);
\end{tikzpicture}
\end{figure}
\end{document}
上述代码生成以下图像:
请注意,红色边界框与树完美贴合。
我想从图像中裁剪出节点“用户”,以便保留一小部分边缘。使用什么技术并不重要(即剪辑或边界框)。
红线代表边界框。在生成的图像中不需要它们。它们只是表明,在生成的图像中,边界框与树完美贴合。
将原始图像和预期结果并排可视化,将 tikz 图片包装在fbox
:
存在一个类似问题在 StackOverflow 上。问题没有要求将边界框捕捉到树上。答案在 tikz 图片的顶部应用剪辑:
\clip (-2.5,-4.5) rectangle (1.5,-1);
但是,我正在寻找一种更具程序性的解决方案,这样我就不必手动计算一些容易出错的适当数字。例如,考虑以下剪辑,我夸大了错误:
\clip (-2.3,-4.5) rectangle (1.5,-1);
如果我们用红色突出显示边界框,我们就会发现它是不正确的:
我正在寻找一种完全不产生间隙的解决方案。
答案1
像这样:
代码(当然不是更好):
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{
actor/.style={
circle,
draw,
minimum size=10mm
}
}
\begin{figure}[h]
\centering
\begin{tikzpicture}[sibling distance=20mm, level distance=20mm]
%\clip(-4,2) -- (4,-1);
\node[actor] {user}
child[dashed] {node[actor,solid] {1}
child[solid] {node[actor] {3}}
child[solid] {node[actor] {4}}}
child[dashed] {node[actor,solid] {2}};
\draw[red] (current bounding box.north west) rectangle (current bounding box.south east);
\fill[white] (current bounding box.north west) rectangle (3,-1);
\draw[red] (-2.5,-1)--(1.5,-1);
\end{tikzpicture}
\end{figure}
\end{document}
编辑:在之前添加这行代码\end{tikzpicture}
\draw (-2.8,-4.7) rectangle (1.8,-.8);
并且您得到了期望的结果: