如何改变箭头的大小?

如何改变箭头的大小?

使用 TikZ,如何让箭头自动延伸以容纳其上方和下方的文本? 这是我的代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage[edges]{forest}

\begin{document}
\begin{forest}
for tree={forked edge, anchor=west}
    [a, for tree={grow'=east}
        [b]
        [c]
        [d, name=out1
            [, name=in1, l sep=6pt, inner sep=-0.6pt
                [x, fork sep=0pt]
                [y, fork sep=0pt]
                [z, fork sep=0pt]
            ]
        ]
        [e]
    ]
\draw [->] (out1) -- (in1) node[midway, above] {now} node [midway, below]{united};
\end{forest}

\end{document}

在此处输入图片描述

答案1

如果要自动将箭头拉伸到其上方和下方标签文本的大小,则不能先绘制树,然后再绘制箭头,因为在绘制箭头时,子树已经绘制好了。相反,您需要以某种方式告诉 TiZ 在箭头指向的子树被画出来之前,箭头应该有多长。

您可以使用以下自定义样式来实现此目的connect,该样式有三个参数:绘制箭头的节点的名称、箭头上方标签的文本以及箭头下方标签的文本。该样式计算箭头上方和下方标签中的文本长度(以最长者为基准),添加一些填充(您可能需要更改它,它恰好20pt适合此示例),并自动将l相关子节点的选项设置为计算的长度。然后绘制箭头和标签。

\documentclass{article}
\usepackage{amsmath}
\usepackage[edges]{forest}

\forestset{
    connect/.style n args={3}{
        l={((max(width("#2"), width("#3"))+20)*1pt},
        append after command={
            \pgfextra{
                \draw[->] (#1) -- (\tikzlastnode) 
                    node[midway, above] {#2} 
                    node[midway, below] {#3};
            }
        }
    }
}

\begin{document}

\begin{forest}
for tree={forked edge, anchor=west}
    [a, for tree={grow'=east}
        [b]
        [c]
        [d, name=out1
            [, name=in1, l sep=6pt, inner sep=-0.6pt, connect={out1}{now}{united}
                [x, fork sep=0pt]
                [y, fork sep=0pt]
                [z, fork sep=0pt]
            ]
        ]
        [e]
    ]
\end{forest}

\begin{forest}
for tree={forked edge, anchor=west}
    [a, for tree={grow'=east}
        [b]
        [c]
        [d, name=out1
            [, name=in1, l sep=6pt, inner sep=-0.6pt, connect={out1}{now}{united in harmony}
                [x, fork sep=0pt]
                [y, fork sep=0pt]
                [z, fork sep=0pt]
            ]
        ]
        [e]
    ]
\end{forest}

\end{document}

在此处输入图片描述

答案2

因为您是在绘制箭头并在绘制完树木后添加箭头,所以 tikz 无法自动知道需要扩大距离才能容纳您的文本。假设您想让箭头保持在森林环境之外,您必须自己设置距离。

您想使用l参数来设置级别之间的距离:

\documentclass[tikz]{standalone}
\usepackage[edges]{forest}

\begin{document}
\begin{forest}
for tree={forked edge, anchor=west}
    [a, for tree={grow'=east}
        [b]
        [c]
        [d, name=out1
            [, name=in1, l=1in, inner sep=-0.6pt
                [x, fork sep=0pt]
                [y, fork sep=0pt]
                [z, fork sep=0pt]
            ]
        ]
        [e]
    ]
\draw [->] (out1) -- (in1) node[midway, above] {now} node [midway, below]{united};
\end{forest}

\end{document}

树木之间的距离固定

参见图 22https://texdoc.org/serve/forest/0以获得类似的例子和更多的解释。

相关内容