我正在尝试绘制两片森林,而且已经成功了。现在我想在中间添加一个等值箭头 (\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}
双色箭需要一些技巧:
- 标准的计算机现代箭头有圆形的末端线,所以我们需要剪掉它们;
- 箭头的边界框没有完全包含它们,所以我们需要在顶部进行“负剪辑”。
两个箭头高度相同,但由于颜色对比太强烈,导致颜色差异造成视觉错觉。