我的用例如下:
\documentclass{article}
\usepackage{amsmath}
\usepackage[showframe]{geometry}
\usepackage{qtree}
\begin{document}
\Tree [.A B C [.D E ] ]
\Tree [.F [.G H ] I ]
\Tree [.J [.K [.L M M ] N ] O ]
\Tree [.F [.G H ] I ]
\end{document}
由于qtree
巧妙的水平对齐,产生了
现在,由于qtree
仅限于 5 个分支,因此我使用的tikz-qtree
基本上是 tikzpicture:
\documentclass{article}
\usepackage{amsmath}
\usepackage[showframe]{geometry}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{center}
\begin{tikzpicture}
\Tree [.A B C [.D E ] ]
\end{tikzpicture}
\begin{tikzpicture}
\Tree [.F [.G H ] I ]
\end{tikzpicture}
\begin{tikzpicture}
\Tree [.J [.K [.L M M ] N ] O ]
\end{tikzpicture}
\begin{tikzpicture}
\Tree [.F [.G H ] I ]
\end{tikzpicture}
\end{center}
\end{document}
产生
如何才能实现与 相同的间距qtree
?这样两个tikzpicture
s 和 到边框的每个间距都是相同的,而无需使用任何手动测量。此外,对齐应该在顶部,而不是底部。
答案1
如果你有很多 TikZ 图片想要在顶部对齐,你可以使用align at top
定义为
\tikzset{align at top/.style={baseline=(current bounding box.north)}}
宏\Tree
检查tikz-qtree
它们是否已经在 PGF 图片中,因此你可以简单地编写
\Tree [.A B C [.D E ] ]
\Tree [.F [.G H ] I ]
\Tree [.J [.K [.L M M ] N ] O ]
\Tree [.F [.G H ] I ]
并且它们会自动对齐到顶部。
但它们并没有沿着水平空间分布。
可以通过在TikZ 图片\hfill
之间添加 s来修复对齐问题。在第一个和最后一个元素之前需要一个附加元素。\Tree
\hfill
为了节省输入,我引入了一个环境spreadTrees
,该环境在每个 PGF/TikZ 图片前添加一个,并在环境末尾\hfill
附加一个最后一个。该环境包含在内,但实际上只需要环境包含的垂直空间。\hfill\null
center
您可以在没有环境的情况下执行相同操作center
(对于浮动)。这就是spreadTrees*
环境的作用。不过,水平放置略有不同。
\hspace*{\fill}
代替\hfill\null
\newenvironment{spreadTrees}{%
\expandafter\def\expandafter\pgfpicture\expandafter{\expandafter\hfill\pgfpicture}%
\center}{\hspace*{\fill}\par\endcenter}
\newenvironment{spreadTrees*}{%
%\noindent % (if not only used inside floats)
\expandafter\def\expandafter\pgfpicture\expandafter{\expandafter\hfill\pgfpicture}%
}{\hspace*{\fill}}
代码
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{tikz}
\usepackage{tikz-qtree}
\newenvironment{spreadTrees}{%
\expandafter\def\expandafter\pgfpicture\expandafter{\expandafter\hfill\pgfpicture}%
\center}{\hfill\null\endcenter}
\newenvironment{spreadTrees*}{%
%\noindent % (if not only used inside floats)
\expandafter\def\expandafter\pgfpicture\expandafter{\expandafter\hfill\pgfpicture}%
}{\hfill\null}
\begin{document}%
\begin{spreadTrees}
\Tree [.A B C [.D E ] ]
\Tree [.F [.G H ] I ]
\Tree [.J [.K [.L M M ] N ] O ]
\Tree [.F [.G H ] I ]
\end{spreadTrees}
\hrule
\begin{figure}[h]
\begin{spreadTrees*}
\Tree [.A B C [.D E ] ]
\Tree [.F [.G H ] I ]
\Tree [.J [.K [.L M M ] N ] O ]
\Tree [.F [.G H ] I ]
\end{spreadTrees*}
\caption{(Figure above)}
\end{figure}
\end{document}
输出
答案2
也许下面的内容会有所帮助:
\documentclass{article}
\usepackage{amsmath}
\usepackage[showframe]{geometry}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{center}
hello\\[-\baselineskip]
\raisebox{-\height}{\begin{tikzpicture}
\Tree [.A B C [.D E ] ]
\end{tikzpicture}}
\raisebox{-\height}{\begin{tikzpicture}
\Tree [.F [.G H ] I ]
\end{tikzpicture}}
\raisebox{-\height}{\begin{tikzpicture}
\Tree [.J [.K [.L M M ] N ] O ]
\end{tikzpicture}}
\raisebox{-\height}{\begin{tikzpicture}
\Tree [.F [.G H ] I ]
\end{tikzpicture}}\\
world
\end{center}
\end{document}