编辑

编辑

我正在尝试在 qtree 中构建一个语法树,其中的 AVM 及其上面的类别作为节点。我尝试这样做的方法是使用多行节点标签,类别在第一行,AVM 在第二行。但是,输出的第一行和第二行之间的间距比我想要的要大,如下所示:

在此处输入图片描述

问题在于 S 和下面的 AVM、NP 和下面的 AVM 以及 N 和下面的 AVM 之间的空间量。我该如何减少这些元素之间的空间?

以下是我用于实现上图树的代码。我尝试减小 AVM 的间距,但并没有解决问题。

\documentclass[a4paper, 11pt]{article}
\usepackage{qtree}
\usepackage{avm}
  \avmvskip{.1ex}\avmhskip{.5em} % reduce spacing in avms

\begin{document}

\Tree[.S\\\begin{avm}\[HEAD&\[AGR&\[PER&3rd\\NUM&sg\]\]\]\end{avm}
        [.NP\\\begin{avm}\[HEAD&\[AGR\]\]\end{avm}
            [.N\\\begin{avm}\[HEAD\]\end{avm} Alex ] ] ]

\end{document}

答案1

虽然你可以手动添加负空间,但这可能相当繁琐。此外,这也使得确保一致性变得困难。

但是,您可以进行一些小技巧来想出一个解决方案,让您能够利用和。您还需要进行破解的原因是因为节点第一行之前的垂直空间太小,而且似乎没有提供任何直接的方法来调整它qtree\qleafhook\qlabelhook\qshow@textqtree

但请注意,这种方法现在已经过时了,而且qtree灵活性远不如当前的替代方案。如果你画了很多树,那么切换到这种方法是值得的。(即使你画的树相对较少,也可能值得。)foresttikz-qtree

\documentclass[a4paper, 11pt]{article}
\usepackage{qtree,avm,array}
\avmvskip{.1ex}\avmhskip{.5em}
\makeatletter
\renewcommand{\qshow@text}[3][c]{% from qtree.sty
  {%
    #2{%
      \begin{tabular}[t]
        {@{\hskip\qtreepadding}#1@{\hskip\qtreepadding}}%
        \\
        #3%
      \end{tabular}%
    }%
  }%
}
\newcommand\qlabelhook{\setlength\partopsep{10cm}\setlength\extrarowheight{-10pt}}
\newcommand\qleafhook{\setlength\extrarowheight{-10pt}}
\makeatother
\begin{document}
\Tree[.S\\\begin{avm}\[HEAD&\[AGR&\[PER&3rd\\NUM&sg\]\]\]\end{avm}
  [.NP\\\begin{avm}\[HEAD&\[AGR\]\]\end{avm}
    [.N\\\begin{avm}\[HEAD\]\end{avm} Alex
    ]
  ]
]
\end{document}

调整垂直间距

编辑

例如,这里有三个 Forest 版本。第一个使用默认间距。第二个和第三个avm以不同的方式使用自定义样式。

avm第二种方法只是修改了间距,而第三种方法通过将冒号后面的任何内容视为在该环境中包装的材料,消除了在每个节点中使用环境的需要。

我不熟悉,avm现在也没有时间研究细节,所以方括号大小的间距不太正确。如果有人知道如何纠正这个问题,请告诉我!(或者当然发布答案。)

\documentclass[border=10pt]{standalone}
\usepackage[linguistics]{forest}
\usepackage{avm,array}
\avmvskip{.1ex}\avmhskip{.5em}
\forestset{%
  avm/.style={%
    TeX={\setlength\extrarowheight{-10pt}},
    before typesetting nodes={%
      for tree={%
        split option={content}{:}{content,make avm},
      },
    },
  },
  make avm/.style={%
    content+={%
      \\\begin{avm}#1\end{avm}
    },
  },
}
\begin{document}
\begin{forest}
  [S\\\begin{avm}\[HEAD&\[AGR&\[PER&3rd\\NUM&sg\]\]\]\end{avm}
    [NP\\\begin{avm}\[HEAD&\[AGR\]\]\end{avm}
      [N\\\begin{avm}\[HEAD\]\end{avm}
        [Alex
        ]
      ]
    ]
  ]
\end{forest}
\begin{forest}
  avm
  [S\\\begin{avm}\[HEAD&\[AGR&\[PER&3rd\\NUM&sg\]\]\]\end{avm}
    [NP\\\begin{avm}\[HEAD&\[AGR\]\]\end{avm}
      [N\\\begin{avm}\[HEAD\]\end{avm}
        [Alex
        ]
      ]
    ]
  ]
\end{forest}
\begin{forest}
  avm
  [S:\[HEAD&\[AGR&\[PER&3rd\\NUM&sg\]\]\]
    [NP:\[HEAD&\[AGR\]\]
      [N:\[HEAD\]
        [Alex
        ]
      ]
    ]
  ]
\end{forest}
\end{document}

以下是输出的比较:

输出结果比较

相关内容