在 pstree 中排列叶节点

在 pstree 中排列叶节点

我是 TeX 新手,正在尝试制作语法树。我的目标是:

        X
       /           X            / \           X   \          / \   \         X   \   \        / \   \   \       A   B   C   D   E
a   b   c   d   e

其中底行包含一些下标。我的代码如下:

\pstree[levelsep=5ex]{ \TR{X} }{
  \pstree{ \TR{X} }{
    \pstree{ \TR{X} }{
      \pstree{ \TR{X} }{
        \TR{\shortstack{{\em A}\\a}}
        \TR{\shortstack{{\em B}\\b}}
      }
      \TR{\shortstack{{\em C}\\c}}
    }
    \TR{\shortstack{{\em D}\\d}}
  }
  \TR{\shortstack{{\em E}\\e}}
}

两个问题:

a) 如何将叶节点对齐到底部而不是紧邻其母节点下方?

b) 中元素的垂直间距shortstack不一致(可能是根据某种“如果合适”标准 - 如果上面的单词中有“j”或“g”,间距就会增加以适应向下的笔划)。有没有更好的方法可以将元素一个接一个地写在一起,并且始终具有相同的垂直间距?

编辑:根据要求,节点内部格式问题的最小示例:

\pstree[levelsep=5ex]{ \TR{Compare:} }{
  \TR{\shortstack{h\\j}}
  \TR{\shortstack{m\\n}}
}

注意“h”与“m”相比有多高(“j”和“n”为水平)。

答案1

使用\skiplevel{...}\skiplevels{<num>}...\endskiplevels可以将节点向下推一层(或<num>层),使它们与较低层的节点对齐。投影保持水平对齐,就像节点位于其原始层一样。

此外,除了使用,您还可以像下面的宏一样\substack在 中添加内容。它将和放置在 中(顶部对齐),居中对齐(两侧没有列间距)。此外,使用 排版tabular\stackit{<top>}{<bottom>}<top><bottom>tabular[t]@{}<top>强调 {\em ..}。所有基线都将垂直对齐。如果您有更复杂的叶子节点标签排列,那么还有其他替代方案:

在此处输入图片描述

\documentclass{article}
\usepackage{pst-tree}% http://ctan.org/pkg/pst-tree
% A macro to stack leave node contents: \stackit{<top>}{<bottom>}
\newcommand{\stackit}[2]{\begin{tabular}[t]{@{}c@{}}{\em #1}\\#2\end{tabular}}
\begin{document}
\pstree[levelsep=5ex,nodesep=3pt]{ \TR{X} }{
  \pstree{ \TR{X} }{
    \pstree{ \TR{X} }{
      \pstree{ \TR{X} }{
        \TR{\stackit{A}{a}}
        \TR{\stackit{B}{b}}
      }
      \skiplevel{\TR{\stackit{C}{c}}}
    }
    \skiplevels{2}\TR{\stackit{D}{d}}\endskiplevels
  }
  \skiplevels{3}\TR{\stackit{E}{e}}\endskiplevels
}
\end{document}​

答案2

你是指类似这样的东西吗skiplevel

\documentclass{article}
\usepackage{pst-tree}
\begin{document}

\pstree[treesep=1.2cm,levelsep=0.5cm]{ \TR{X} }{
  \pstree{ \TR{X} }{
    \pstree{ \TR{X} }{
      \pstree{ \TR{X} }{
        \TR{\shortstack{{\em A}\\a}}
        \TR{\shortstack{{\em B}\\b}}
      }
      \skiplevels{1}%\skiplevel{\Tn\Tn}
        \TR{\shortstack{{\em C}\\c}}
      \endskiplevels
      }
      \skiplevels{2}%\skiplevel{\Tn\Tn}
            \TR{\shortstack{{\em D}\\d}}
      \endskiplevels
    }
    \skiplevels{3}%\skiplevel{\Tn\Tn}
        \TR{\shortstack{{\em E}\\e}}
    \endskiplevels
  }
\end{document}

答案3

\documentclass{article}
\usepackage{pst-tree}
\newcommand\Stack[2][0.8]{{\def\arraystretch{#1}\tabular{@{}c@{}}#2\endtabular}}
\begin{document}

\pstree[levelsep=10mm,nodesep=1mm]{ \TR{X} }{
  \pstree[]{ \TR{X} }{
    \pstree{ \TR{X} }{
      \pstree[treesep=5mm]{ \TR{X} }{
        \TR{\Stack{\em A\\a}}
        \Tn
        \TR{\Stack{\em B\\b}}
        \Tn
      }
      \skiplevel{\TR{\Stack{\em C\\c}}}
    }
    \skiplevels{2}\TR{\Stack{\em D\\d}}\endskiplevels
  }
  \skiplevels{3}\TR{\Stack{\em E\\e}}\endskiplevels
}
\end{document}

在此处输入图片描述

相关内容