如何在不使用 \hspace 的情况下水平顶部对齐多个 \tikzpicture?

如何在不使用 \hspace 的情况下水平顶部对齐多个 \tikzpicture?

我的用例如下:

\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}

产生

tikz-qtree

如何才能实现与 相同的间距qtree?这样两个tikzpictures 和 到边框的每个间距都是相同的,而无需使用任何手动测量。此外,对齐应该在顶部,而不是底部。

答案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\nullcenter

您可以在没有环境的情况下执行相同操作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}

对齐树

相关内容