绘制 Latex 树并在其中制作箭头并更改空格

绘制 Latex 树并在其中制作箭头并更改空格

我目前正在打讲稿。今天,我必须用 Latex 制作一棵树。

风格/应用:文本框和\tiksstyle

标题:方程的类型

文本框的类型:

  1. 边框是黑色的
  2. 边框为白色。

平均能量损失

\begin{center}
\begin{tikzpicture} [node distance=3cm]



\tikzstyle{box} = [rectangle, minimum width=7cm, minimum height=2cm,text centered, draw=black, fill=white]
\tikzstyle{noboxshort} = [rectangle, minimum width=2cm, minimum height=1.98cm, text centered, draw=white, fill=white]

\node (1) [box] {Varia...};
\node (2) [box, below of=1] {Alge...};
\node (2.1) [noboxshort, below of=2, xshift=0cm] {Simple ...};
\node (2.2) [noboxshort, right of=2] {quadra...};
%\node (2.3) [box, right of=2.2] {trigno...};
%\node (2.4) [box, right of=2.3] {diff...};
%\node (3) [box, below of=] {Differ...};

\end{tikzpicture}
\end{center}


我遵循的教程:使用 TikZ 制作 LaTeX 图形:初学者教程(第 3 部分)— 创建流程图

我将使用一个示例来“掌握”其中的关键概念,nodes尤其是child命令:例子:一棵简单的树

修改

我想改变它:

(手绘,粗略解释修改内容) 在此处输入图片描述

  • 因为红色空间是从最左/最右箭头到矩形的空间,所以可自定义。
  • 粉色空间是箭头之间的空间,它们每个箭头相等,可定制。
  • (我不希望箭头最底部是开口的;它们下面应该有节点。)

谢谢,VScode 粉丝。

我也期待不同且简单的软件包和技术。哦,如果有人能解释如何更改文本框连接/箭头之间的空间,我将不胜感激。

附言:我尝试forest从 miktex 控制台和 Texmaker 安装包,miktex 给了我一段Error code:35 ssl error时间,但 Texmaker 根本没有安装它,并抱怨forest.sty不存在,也期待对此的解决方案。

答案1

问题有点不清楚,要构建哪种类型的图形:流程图、树等。根据应用程序的不同,可能会有允许以更抽象的方式指定图形的包。

这里有两种控制边的原点的方法:通过控制目标节点的位置隐式地控制,以及通过指定原点显式地控制。

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}% for left/below/... = ... of ...
\usetikzlibrary{calc}% for ($...$) coordinate computations
\begin{document}
\begin{tikzpicture}[
  activity/.style={draw,minimum width=1cm}
  ]
  \node[activity](A){A};
  \coordinate[below=of A](belowA);
  \node[activity,left=2mm of belowA](C){C};
  \node[activity,left=2mm of C](B){B};
  \node[activity,right=2mm of belowA](D){D};
  \node[activity,right=6mm of D](E){E};
  \path[->] (A) edge (B) edge (C) edge (D) edge (E);
\end{tikzpicture}

\begin{tikzpicture}[
  activity/.style={draw,minimum width=1cm}
  ]
  \node[activity](A){A};
  \coordinate[below=of A](belowA);
  \node[activity,left=5mm of belowA](C){C};
  \node[activity,left=of C](B){B};
  \node[activity,right=5mm of belowA](D){D};
  \node[activity,right=of D](E){E};
  \path[->] (A.south west) edge (B);
  \path[->] (A.south) edge (C);
  \path[->] ($(A.south)+(3mm,0)$) edge (D);
  \path[->] ($(A.south)+(4mm,0)$) edge (E);
\end{tikzpicture}
\end{document}

答案2

绘制所示的图像forest很简单:

\documentclass{article}
\usepackage{forest}
\usetikzlibrary{arrows.meta}

\begin{document}
    \begin{forest}
for tree = {
% nodes style
    draw, minimum width=12mm, minimum height=7mm,
% edges
    edge = {-{Straight Barb[angle=60:3pt 4]}, semithick},
% tree grow
    child anchor = north,
    l sep=17mm,
    s sep=5mm,
            }
[root
    [A
        [B] 
        [C]
        [D]
       [E]
    ]
]
    \end{forest}
\end{document}

在此处输入图片描述

编辑(1): 当节点之间的线没有箭头且底部没有节点时,上述 MWE 变为:

\documentclass{article}
\usepackage{forest}
\usetikzlibrary{arrows.meta}

\begin{document}
    \begin{forest}
for tree = {
% nodes style
if level = 2{}                                              % <---
            {draw, minimum width=12mm, minimum height=7mm}, % <---
% edges
    edge = {semithick}, % <---
% tree grow
    child anchor = north,
    l sep=17mm,
    s sep=5mm,
            }
[
    [ 
        [ ]
        [ ]
        [ ]
        [ ]
    ]
]
    \end{forest}
\end{document}

在此处输入图片描述

由于forest基于tikz,您可以使用其所有库,并通过为节点着色、放置阴影等方式使节点更加美观。有关详细信息,请参阅forest文档并在网站上搜索解决方案,或使用谷歌在其他地方搜索。

一个简单的虚拟示例:

\documentclass[margin=3mm]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta,
                shadows}

\begin{document}
    \begin{forest}
for tree = {
% nodes style
    draw, minimum width=12mm, minimum height=7mm, align=center,
if level = 2{fill=cyan!10, drop shadow}
            {fill=white, drop shadow},
% edges
    edge = {semithick},
% tree grow
    child anchor = north,
    l sep=17mm,
    s sep=5mm,
            }
[root, font=\bfseries
    [sub root\\ chapters
        [A]
        [B]
        [C]
        [D]
    ]
]
    \end{forest}
\end{document}

在此处输入图片描述

编辑(2) 由于您在安装新包时遇到一些问题,您可以同时尝试以下(onemore)纯tikz解决方案:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                calc, chains,
                positioning}

\begin{document}
    \begin{tikzpicture}[
node distance = 12mm and 6mm,
  start chain = A going right,
   arr/.style = {-Straight Barb, semithick},
   box/.style = {draw, semithick, 
                 text width=12mm, minimum height=7mm, align=center}
                        ]
    \begin{scope}[nodes={box, on chain}]
    \foreach \x in {A,B,C,D}
\node   {\x};    % name=A-\x
    \end{scope}
\node (n2)  [box, above=of $(A-2.north)!0.5!(A-3.north)$]   {};
\node (n1)  [box, above=of n2]                              {};
%
\draw[arr] (n1) -- (n2);
    \foreach \i [count=\j] in {A,B,C,D}
\draw[arr]  (n2) -- (A-\j.north);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容