pst-jtree:编译包含多棵树的文档时出现随机错误

pst-jtree:编译包含多棵树的文档时出现随机错误

我有一个文档,其中包含使用该pst-jtree包排版的许多语法树。我会大大不想将它们全部转换为另一个树制作包的格式(即,我不想使用qtree、、tikz-qtreeforest,因为这将涉及重做所有这些树)。

然而,我在编译此文档时遇到了一个问题:到目前为止,每次我编译它时,渲染树木时总会有一些奇怪的错误。例如:

一棵错位的树

这棵树是用以下代码制作的:

\newcommand{\abar}[1]{\ensuremath{\overline{\text{#1}}}}

\jtree[scaleby=0.75 1]
   \! = {AP}
       :{DP}(<vert>{\abar{D}}(<vert>{D}(<vert>{him)) 
        {\abar{A}}(<vert>{A}(<vert>{honest})).
\endjtree

当我单独编译这棵树时,它看起来如预期的那样(使用具有不同字体的 MWE):

\documentclass{article}

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

\newcommand{\abar}[1]{\ensuremath{\overline{\text{#1}}}}

\begin{document}
    \jtree[scaleby=0.75 1]
        \! = {AP}
            :{DP}(<vert>{\abar{D}}(<vert>{D}(<vert>{him)) 
             {\abar{A}}(<vert>{A}(<vert>{honest})).
    \endjtree
\end{document}

一棵好看的树

这个错误有些奇怪,因为它在编译包含许多树的文档时不一致。例如,当我截取屏幕截图时,上面的树恰好出现了上面显示的特定错误。但如果我尝试重新编译文档,它可能会正常,而其他树之一会出现类似的问题。或者它可能会出现不同的错误。据我所知,这些随机错误似乎只在文档包含大量树时才会发生(我的文档有 38 棵)。

有什么方法可以解决此错误?特别令人困惑的是它的随机性——每次我尝试编译时都会出现不同的错误,而且一切是否正确似乎取决于运气。我尝试过xelatex直接使用 以及 然后xelatex -no-pdf进行编译xdvipdfmx,但似乎没有什么区别。

我尝试过的另一件事是将每棵树保存在独立文档中并单独编译它们,然后包含 PDF。但这样做的一个问题是,边界框的计算方式似乎与直接在实际文档中创建树时的方式不同,因此包含的图像最终与示例数字不对齐,或者移动箭头被切断等。

主题似乎与关于这里,这表明这可能是一个pstricks问题(尽管我无法复制那里讨论的错误)。不幸的是,该链接没有提供任何可靠的解决方案,我和那位发帖人一样对为什么确定性算法每次运行时都会显示不同的随机错误感到困惑。

这是对 MWE 的尝试,它只是使用一些代码重复绘制同一棵树这里。当然,错误的随机性意味着它有时可能会按预期工作。

\documentclass{article}

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

\newcommand{\abar}[1]{\ensuremath{\overline{\text{#1}}}}

\usepackage{expl3}

\ExplSyntaxOn
\cs_new_eq:NN \Repeat \prg_replicate:nn
\ExplSyntaxOff

\begin{document}
    \Repeat{38}{%
        \jtree[scaleby=1.5 1]
            \! = {IP}
                :{DP}(<vartri>{this tree}) {\abar{I}}
                :{I}(<vert>{might}) {VP} "{\psset{scaleby=1}}
                :{AdvP}(<vartri>{not}) {\abar{V}}
                :{\abar{V}}(<vert>{V}(<vert>{work})) {AdvP}(<vartri>{correctly}).
        \endjtree\\
    }
\end{document}

编辑:我刚刚确认 MWE 确实会产生类似的错误。对我来说,第 10 页(树的 31-33 个重复)发生了以下情况:

两棵好树,后面跟着一棵坏树,它们都是由完全相同的代码生成的

答案1

如果你以这种方式使用它,会发生什么:

    \Repeat{38}{%
        \begingroup
        \jtree[scaleby=1.5 1]
        \! = {IP}
        :{DP}(<vartri>{this tree}) {\abar{I}}
        :{I}(<vert>{might}) {VP} "{\psset{scaleby=1}}
        :{AdvP}(<vartri>{not}) {\abar{V}}
        :{\abar{V}}(<vert>{V}(<vert>{work})) {AdvP}(<vartri>{correctly}).
        \endjtree
        \endgroup
        \par
    }

相关内容