pst-jtree; pstricks:在三个节点周围绘制一个框

pst-jtree; pstricks:在三个节点周围绘制一个框

我想在我排版使用的语法树的一部分周围画一个框pst-jtree。这是一个简化的示例:

\documentclass{article}

\usepackage{pstricks}
\usepackage{pst-jtree}

\begin{document}
    \jtree[scaleby=1.5 1]
        \! = {S}
            :{NP}! {VP} "{\psset{scaleby=1 1}}
            :{V}(<vert>{saw}) {NP}@NP "{\psset{scaleby=0.75 1}}
            :{D}(<vert>{the}@the ) {N}(<vert>{cat}@cat ).
        \! =:{D}(<vert>{The}) {N}(<vert>{dog}).
        \ncbox[nodesep=5pt, linearc=0.2]{the}{cat}
    \endjtree
\end{document}

这将产生以下输出:

在此处输入图片描述

但是,我希望框的顶部也包含 NP 节点,如下所示(使用图像编辑软件创建):

在此处输入图片描述

但是,我似乎找不到使用 来将一个框放在三个节点周围的方法pstricks。理想的情况是,如果有类似于tikzfit库提供的功能来执行此操作。(将树中的文本标记为 tikz 节点不起作用,因为 tikz 节点坐标始终位于边界框的顶部。)有什么方法可以做到这一点吗?

答案1

\documentclass{article}

\usepackage{pstricks}
\usepackage{pst-jtree}

\begin{document}
    \jtree[scaleby=1.5 1]
    \! = {S}
    :{NP}! {VP} "{\psset{scaleby=1 1}}
    :{V}(<vert>{saw}) {NP}@NP "{\psset{scaleby=0.75 1}}
    :{D}(<vert>{the}@the ) {N}(<vert>{cat}@cat ).
    \! =:{D}(<vert>{The}) {N}(<vert>{dog}).
    \psframe[framearc=0.2,linestyle=dashed](!\psGetNodeCenter{the} the.x 0.5 sub the.y 0.5 sub)
      (!\psGetNodeCenter{NP} \psGetNodeCenter{cat} cat.x 0.5 add NP.y 0.6 add)
    \endjtree
\end{document}

在此处输入图片描述

答案2

正如评论中指出的那样,所以用 画树要容易得多forest。但如果你坚持的话,只要稍微修改一下就可以了。现在很少有pstricks巫师了,而且我已经很久没用过它了,所以我当然不符合条件。

我已添加forest版本以供比较。

不必要的语言评论:终端节点和它们的类别标签之间的线在语法上不合理,因此<vert>应删除所有终端节点。

\documentclass{article}

\usepackage{pstricks}
\usepackage{pst-jtree}
\usepackage[linguistics]{forest}


\begin{document}
    \jtree[scaleby=1.5 1]
        \! = {S}
            :{NP}! {VP} "{\psset{scaleby=1 1}}
            :{V}(<vert>{saw}) {\Rnode[href=-2]{NP}{NP}}@NP "{\psset{scaleby=0.75 1}}
            :{D}(<vert>{the}@the ) {N}(<vert>{cat}@cat ).
        \! =:{D}({The}) {N}(<vert>{dog}).
        \ncbox[nodesep=5pt,boxsize=3,offset=1.5,linearc=.5]{the}{NP}
    \endjtree
    
\begin{forest}
[S
    [NP [D\\the] [N\\dog]]
    [VP [V\\saw]
        [NP,tikz={\node[draw,rounded corners,fit to=tree]{};} [D\\the][N\\cat]]
    ]
]
\end{forest}
\end{document}

代码输出

相关内容