森林树木边界框被箭头不适当地扩大

森林树木边界框被箭头不适当地扩大

我正在排版一些带箭头的树。不幸的是,箭头改变边界框的程度比它们实际占用的空间更大。

我想找到一种方法来将树的边界框设置为图片的实际大小,或者甚至只是让边界框不受箭头的影响。

forest确实包括创建适合树的节点的选项,并且它有选项use as bounding box,但后者只能用于树节点,而不能用于以不同方式创建的节点。

有没有一种通用的方法可以实现这一点,即无需手动更改间距?我正在排版许多这种类型的树,我不希望对每棵树都单独进行此操作。

最小工作示例:

\documentclass{article}
\usepackage[linguistics]{forest}
\usepackage{blindtext}

\begin{document}
    \blindtext
    
    awawa
    \begin{forest}
        [a[b, name=b][1[2[3[c, name=c]]]]]
        {\draw[->] (b) to[out=west, in=south] (c);}
    \end{forest}
    
    \blindtext
\end{document}

树的边界框向左和向下扩展太多

这棵树的边界框向左和向下扩展太多,我认为这是因为箭头的控制点。

答案1

边界框如此大的原因是它包含了曲线路径的控制点:

在此处输入图片描述

\pgfresetboundingbox要设置不带附加箭头的边界框,请使用树后的命令。然后使用\useasboundingbox将边界框设置为包含所有树节点的矩形。可以使用代码创建该节点

\node(BB)[use as bounding box, inner sep=0, outer sep=0, fit to=tree]{};

在森林节点的代码之后。问题是箭头可能会与周围的文本重叠:

在此处输入图片描述

因此您需要添加一些垂直空间。这一切都被编码到一个宏中,\myboundingbox该宏接受一个可选参数来在树下添加垂直空间。

在此处输入图片描述

以下是代码:

\documentclass{article}
\usepackage[linguistics]{forest}
\usepackage{blindtext}
\newcommand{\myboundingbox}[1][0]{
    \node(BB)[use as bounding box, inner sep=0, outer sep=0, fit to=tree]{};
    \pgfresetboundingbox\useasboundingbox(BB.north west)rectangle([yshift=-#1]BB.south east);
}

\begin{document}
    \blindtext
    
    awawa
    \begin{forest}
        [a[b, name=b][1[2[3[c, name=c]]]]]
        \draw[->] (b) to[out=west, in=south] (c);
        \myboundingbox[3ex]      
    \end{forest}
    
    \blindtext
\end{document}

相关内容