在森林环境中无法对齐右箭头

在森林环境中无法对齐右箭头

我正在尝试绘制两片森林,而且已经成功了。现在我想在中间添加一个等值箭头 (\Leftrightarrow),但要对齐。

目前我有以下代码:

\documentclass[a4paper,12pt]{article}

\usepackage{color,forest,tikz,amsmath,amsbsy,amsfonts,mathtools,amssymb,amsthm}

\begin{document}

\begin{center}
\begin{forest}
    for tree = {draw,circle,edge={black,thick},inner sep=2pt, minimum width= .25cm,
        font = \small, s sep = 1cm}
    [,fill=black, label = {u}
        [,fill=red]
        [,fill=red]
    ]
\end{forest}
$\qquad \Rightarrow \qquad$
\begin{forest}
    for tree = {draw,circle,edge={black,thick},inner sep=2pt, minimum width= .25cm,
        font = \small, s sep = 1cm}
    [,fill=red, label = {u}
        [,fill=black]
        [,fill=black]
    ]
\end{forest}
\end{center}

\end{document}

这给了我以下输出

在此处输入图片描述

我想用 Leftrightarrow 替换 Rightarrow(我可以自己做)并与两棵树对齐。除此之外,是否还可以将 Leftrightarrow 的一半涂成红色,另一半涂成黑色?如果可以,我想要的输出将是这样的: 在此处输入图片描述

如果无法用两种颜色绘制左右箭头,我也会接受普通的左右箭头!

提前感谢任何帮助!

答案1

请注意,该forest包会自动加载,tikz因此您不必在序言中重新加载它。同样,mathtools自动加载amsmath

由于tikz已经加载,您可以将双色箭头放置在tikzpicture树之间。

\qquad\tikz[baseline=-7mm]{\node[red,left]{$\Leftarrow$};\node{$\Rightarrow$}}\qquad

在此处输入图片描述

您可以随意调整高度。

通过将两个箭头并排放置,略微重叠,可制作出双箭头,这可能是您想要的,也可能不是您想要的。此外,两个箭头的重叠方式可能不是您想要的:

在此处输入图片描述

您可以使用\clip黑色箭头使连接变成正方形。以下是绘制剪辑版本的宏:

\newcommand{\Redblackarrow}[1][-7mm]{\tikz[baseline=#1]
    {\node[red,left]{$\Leftarrow$};\clip (-.18,-.2)rectangle(.2,.2);\node{$\Rightarrow$};}}

在此处输入图片描述

升高7mm是默认内置的,但您可以使用可选参数调整高度。例如,\Redblackarrow[-8mm]将升高箭头8mm而不是7mm

tikz对于双色角色,另一种解决方案是将角色剪成两半,然后对每半进行着色这里

完整代码如下:

\documentclass[a4paper,12pt]{article}

\usepackage{forest}

\newcommand{\Redblackarrow}[1][-6mm]{\tikz[baseline=#1]
    {\node[red,left]{$\Leftarrow$};\clip (-.18,-.2)rectangle(.2,.2);\node{$\Rightarrow$};}}

\begin{document}

\[
\begin{forest}
    for tree = {draw,circle,edge={black,thick},inner sep=2pt, minimum width= .25cm,
        font = \small, s sep = 1cm}
    [,fill=black, label = {u}
        [,fill=red]
        [,fill=red]
    ]
\end{forest}
\qquad\Redblackarrow\qquad
\begin{forest}
    for tree = {draw,circle,edge={black,thick},inner sep=2pt, minimum width= .25cm,
        font = \small, s sep = 1cm}
    [,fill=red, label = {u}
        [,fill=black]
        [,fill=black]
    ]
\end{forest}
\]

\end{document}

答案2

据我所知,forest没有提供垂直居中输出的方法。不过定义一个并不难。

\documentclass[a4paper,12pt]{article}
\usepackage{forest,mathtools,amssymb,amsthm}
\usepackage{trimclip}

\newenvironment{cforest}
  {\tabular{@{}c@{}}\forest}
  {\endforest\endtabular}

\newcommand{\cLeftrightarrow}[2]{%
  % #1 = left color, #2 = right color
  \clipbox{0pt 0pt {0.1\width} {-0.3\height}}{$\textcolor{#1}{\Leftarrow}$}%
  \clipbox{{0.1\width} 0pt 0pt {-0.3\height}}{$\textcolor{#2}{\Rightarrow}$}%
}

\begin{document}

\begin{center}
\begin{cforest}
    for tree = {draw,circle,edge={black,thick},inner sep=2pt, minimum width= .25cm,
        font = \small, s sep = 1cm}
    [,fill=black, label = {u}
        [,fill=red]
        [,fill=red]
    ]
\end{cforest}%
\qquad\cLeftrightarrow{red}{black}\qquad
\begin{cforest}
    for tree = {draw,circle,edge={black,thick},inner sep=2pt, minimum width= .25cm,
        font = \small, s sep = 1cm}
    [,fill=red, label = {u}
        [,fill=black]
        [,fill=black]
    ]
\end{cforest}
\end{center}

\end{document}

双色箭需要一些技巧:

  1. 标准的计算机现代箭头有圆形的末端线,所以我们需要剪掉它们;
  2. 箭头的边界框没有完全包含它们,所以我们需要在顶部进行“负剪辑”。

在此处输入图片描述

两个箭头高度相同,但由于颜色对比太强烈,导致颜色差异造成视觉错觉。

相关内容