Tikz:裁剪树的顶部。将结果边界框捕捉到树上

Tikz:裁剪树的顶部。将结果边界框捕捉到树上
\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);

并且您得到了期望的结果:

在此处输入图片描述

相关内容