我目前正在打讲稿。今天,我必须用 Latex 制作一棵树。
风格/应用:文本框和\tiksstyle
标题:方程的类型
文本框的类型:
- 边框是黑色的
- 边框为白色。
平均能量损失
\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}