答案1
这里只是荣幸地提到一个上面似乎没有提到的选项:来自图书馆的树graphdrawing
。优点是代码短,缺点是你必须使用。1lualatex
这是一个例子。2
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{trees}
\begin{document}
\begin{tikzpicture}[rn/.style={label={[anchor=center,circle,draw,minimum
size=5pt,inner sep=0pt]center:}},
graphs/every graph/.style={anchor at={(0,0.5em-0.5*\pgfmatrixcurrentrow*1em)},
empty nodes,tree layout,level distance=1em, sibling
distance=1em,grow=90,nodes={circle,fill,minimum size=3pt,inner sep=0pt,outer sep=0pt}}]
\matrix[row sep=1em,column sep=1em]{
\node{1}; & \graph { 1[rn]}; \\
\node{2}; & \graph { 1[rn]--2}; \\
\node{3}; & \graph[anchor at={(0,-1em)}] { 1[rn]--2--3}; &
\graph { 1[rn]--{2,3}}; \\
\node{4}; & \graph { 1[rn]--2--3--4}; &
\graph { 1[rn]--2--{3,4}};
& \graph { 1[rn]--{2,3--4}};
& \graph { 1[rn]--{2,3,4}};\\
};
\end{tikzpicture}
\end{document}
1为避免冗长的讨论:我并不是说 有什么问题lualatex
。但是,您无法将上述内容上传到 arXiv,在我看来这是一个缺点。
2我不太喜欢那些没有明确例子来支持其论述的帖子。
答案2
在某种程度上,这是一个基于意见的问题,因为具体软件包的实用性实际上取决于您自己。您链接的两个问题也显示了与您在图片中显示的树完全不同的树。不过,我会尝试列出您可能使用哪些标准来决定软件包。
您所绘制的表示形式是否是正式意义上的(有根)树(即,图中任意两个顶点都由一条路径连接,并具有指定的根)?如果是,那么特定的树绘制包(如
tikz-qtree
、forest
和pst-tree
、pst-jtree
)xytree
可能合适。如果您绘制的表示形式不是树,那么这些包可能不是最佳解决方案,而 TikZ 图形绘制方法可能在这里有所帮助。如果表示形式是正式意义上的树,则以下标准是相关的。在这里,我将考虑 5 个包:,,,,,。
tikz-qtree
我不考虑基本的 TikZ 树方法,因为我发现它们的输入语法非常笨拙,但 TikZ 确实具有更有用的通用图形绘制功能。forest
pst-tree
pst-jtree
xytree
- 输入语法简单(这
tikz-qtree
方面forest
显然胜出) - 能够与任何引擎一起使用(TikZ 方法显然胜出
pstricks
) - 需要用边标签或节点之间的其他连接来注释树(
forest
一般情况下获胜,但istgame
如果您正在绘制这些树,那么游戏树的专门包也非常好。)
- 输入语法简单(这
所有pstricks
基于的方法都存在类似的共同问题:它们依赖于使用latex+dvips
(或可能xelatex
),并且它们的输入语法通常不是特别友好。 TikZ 方法与引擎无关(尽管一些高级库使用lualatex
)。