今天运行旧的 Latex 代码时遇到了麻烦(我猜是因为相应的包发生了变化)。问题是现在 Latex 给我带来了许多与节点名称相关的错误。我应该做哪些更改才能让它再次工作?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}[>=stealth,sloped]
\tikzstyle{hn}=[circle,draw,inner sep=0.01]
\tikzstyle{sn}=[circle,draw,inner sep=0.01,fill=black]
\matrix (tree) [%
matrix of nodes,
minimum size=0.6cm,
column sep=0.8cm,
row sep=0.1cm,
]
{
& & & & & \node[sn]{}; \\
& & & & \node[sn]{}; & \\
& & & \node[sn]{}; & & \node[sn]{}; \\
& & \node[sn]{}; & & \node[sn]{}; & \\
& \node[hn]{}; & & \node[hn]{}; & & \node[sn]{}; \\
\node[hn]{}; & & \node[hn]{}; & & \node[hn]{}; & \\
& \node[hn]{}; & & \node[hn]{}; & & \node[sn]{}; \\
& & \node[hn]{}; & & \node[hn]{}; & \\
& & & \node[hn]{}; & & \node[sn]{}; \\
& & & & \node[sn]{}; & \\
& & & & & \node[sn]{}; \\
};
\draw[-] (tree-6-1)--(tree-5-2){};
\draw[-] (tree-6-1)--(tree-7-2){};
\draw[-] (tree-5-2)--(tree-4-3){};
\draw[-] (tree-5-2)--(tree-6-3){};
\draw[-] (tree-7-2)--(tree-6-3){};
\draw[-] (tree-7-2)--(tree-8-3){};
\draw[-] (tree-4-3)--(tree-3-4){};
\draw[-] (tree-4-3)--(tree-5-4){};
\draw[-] (tree-6-3)--(tree-5-4){};
\draw[-] (tree-6-3)--(tree-7-4){};
\draw[-] (tree-8-3)--(tree-7-4){};
\draw[-] (tree-8-3)--(tree-9-4){};
\draw[-] (tree-3-4)--(tree-2-5){};
\draw[-] (tree-3-4)--(tree-4-5){};
\draw[-] (tree-5-4)--(tree-4-5){};
\draw[-] (tree-5-4)--(tree-6-5){};
\draw[-] (tree-7-4)--(tree-6-5){};
\draw[-] (tree-7-4)--(tree-8-5){};
\draw[-] (tree-9-4)--(tree-8-5){};
\draw[-] (tree-9-4)--(tree-10-5){};
\draw[-] (tree-2-5)--(tree-1-6){};
\draw[-] (tree-2-5)--(tree-3-6){};
\draw[-] (tree-4-5)--(tree-3-6){};
\draw[-] (tree-4-5)--(tree-5-6){};
\draw[-] (tree-6-5)--(tree-5-6){};
\draw[-] (tree-6-5)--(tree-7-6){};
\draw[-] (tree-8-5)--(tree-7-6){};
\draw[-] (tree-8-5)--(tree-9-6){};
\draw[-] (tree-10-5)--(tree-9-6){};
\draw[-] (tree-10-5)--(tree-11-6){};
\end{tikzpicture}
Figure 1.
\end{document}
答案1
你只需要改变一切
\node[hn]{};
到
|[hn]|
节点也类似sn
。当\node
在单元格开头使用时,它不会自动命名,但您可以使用向单元格添加选项|[...]|
。
话虽如此,但可能还有更好、更方便的方法来画这样的树。不过我不是树木专家,所以我把这个留给其他人吧。
其他一些评论:
\draw[-] (tree-6-1)--(tree-5-2){};
:末尾[-]
的 和都不需要。{}
通常建议使用
\tikzset{stylename/.style={...}}
而不是tikzstyle
。不过,在这种情况下,您要在 中定义样式tikzpicture
,我只需这样做\begin{tikzpicture}[>=stealth,sloped, hn/.style={circle,draw,inner sep=0.01}, sn/.style={circle,draw,inner sep=0.01,fill=black}]
答案2
这是绘制提到的图形的更方便的方法之一Torbjørn T.。从技术上讲,该图不是树。因此,我尝试将其排版为树,但只取得了部分成功。但是,使用模块化 Sugiyama 布局算法(由 Ti 实现)钾Z,取得了令人满意的结果。
由于此程序使用自动算法来布局树,因此需要 LuaTeX。如果您由于没有 而出现错误luatex85.sty
,只需删除该行\RequirePackage{luatex85}
,因为只有较新版本的引擎才需要此行。如果您使用标准类而不是 ,则可能不需要加载该包standalone
。
\RequirePackage{luatex85}
\documentclass[multi,tikz,border=10pt]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered}
\begin{document}
\begin{tikzpicture}
\graph [layered layout, grow=0, sibling distance=10mm, nodes={circle, draw, as= }]
{
0 -- { 11 -- { 21 -- { 31 -- { 41[fill] -- { 51[fill], 52[fill] }, 42 -- { 52, 53[fill] } } , 32 -- { 42, 43 -- { 53, 54[fill] } } } , 22 -- { 32 , 33 -- { 43, 44[fill] -- { 54, 55[fill] } } } } , 12 -- { 22 , 23[fill] -- { 33, 34[fill] -- { 44, 45[fill] -- { 55, 56[fill] } } } } }
}
;
\end{tikzpicture}
\end{document}