Forest:建立不佔用空間的虛擬節點?

Forest:建立不佔用空間的虛擬節點?

我想建立一個虛擬節點,它在樹的頂部不佔用任何空間,以便對齊,以便樹的第一個標記節點與範例編號對齊。設定l sep=0pt顯然是不夠的。我還需要設定什麼才能實現這一目標?

微量元素:

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex\begin{forest}
[, phantom
    [{Jane is ...}, tier=words]
    [AjP
        [Specifier
            [very, tier=words]
        ]
        [Aj'
            [Aj
                [fond, tier=words]
            ]
            [PP
                [{of Cheetah}, roof, tier=words]
            ]
        ]
    ]
]
\end{forest}\xe

\end{document}

具有空頂部節點的樹佔用了不需要的空間

答案1

我無法使用目前版本的 重現您的問題forest。但在當前版本中,您可以新增baseline到任何節點以使該節點成為樹的基線。

(不相關的語言學註釋:「說明符」是語法位置的名稱,而不是樹中的語法類別或節點,並且通常不應出現在樹中。)

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex
\begin{forest}
[,phantom,
    [{Jane is ...}, tier=words]
    [AjP,baseline
        [Specifier
            [very, tier=words]
        ]
        [Aj'
            [Aj
                [fond, tier=words]
            ]
            [PP
                [{of Cheetah}, roof, tier=words]
            ]
        ]
    ]
]
\end{forest}
\xe

\end{document}

程式碼的輸出

答案2

phantom您實際上根本不需要根。您只需刪除第一個子項目的邊緣並指定根的對齊方式。

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex
\begin{forest}
  where n children=0{tier=words}{}
  [AjP, calign child=2
    [Jane is \dots, no edge]
      [Specifier
          [very]
      ]
      [Aj'
          [Aj
              [fond]
          ]
          [PP
              [of Cheetah, roof]
          ]
      ]
  ]
\end{forest}
\xe

\end{document}

不含體模的對準

答案3

在 v2.0.3 之前,只要使用 key,Forest 就會設定基線節點(錨點將與基線對齊的節點)baseline,即使它是在phantom不是由 TikZ 繪製的節點上使用的。人們本以為這會導致 TikZ 錯誤,但事實並非如此。

一旦在 TikZ 中創建了一個節點,它的名稱甚至在群組之外仍然存在(我猜這可以被認為是一個錯誤),「節點」位於(0,0),如下所示:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
  \node(foo){};
\end{tikzpicture}

\begin{tikzpicture}
  \draw[->] (-1,1) -- (foo.center) -- (1,1);
\end{tikzpicture}

\end{document}

TikZ 持久節點名稱錯誤

將上述內容與 Forest 重用節點名稱(通常預設命名根)的事實結合起來node@2,您就會遇到問題。如果您將基線節點設為根(就像語言學庫所做的那樣)並製作根幻像(就像排版並排樹通常所做的那樣),TikZ 會有效地將基線設為y=0.結果由 OP 範例顯示。

現在,Forest 2.0.3(修正了 引入的問題draw tree method)變得聰明,不再指示 TikZ 將基線節點設定為幻像節點(更準確地說,任何未繪製的節點)。因此,從這個版本開始,不再為並排語言樹設定基線。結果正如 TikZ 手冊所承諾的那樣,“圖片的下端放在周圍文字的基線上”,如下例所示。 (節點為drawn 是為了更好地查看對齊情況。)

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{gb4e}

\begin{document}
\begin{exe}
\ex\begin{forest}
  for tree=draw
  [,phantom
    [VP[V][DP]]
    [VP[V][DP]]
  ]
\end{forest}
\end{exe}
\end{document}

這是使用 Forest v2.0.3 - v2.1.4 編譯上述程式碼時所得到的結果。

由 v2.0.3 - 2.1.4 編譯

絕對明確的是:我認為這是預期的行為。然而,這並不意味著它是想要的行為...這就是為什麼 v2.1.5 的語言學庫試圖變得更聰明:粗略地說,它將基線設置為“第一個非幻像節點”。在我們的範例中,這是左側副總裁,因此我們得到:

2.1.5編譯的

(臨時說明:Forest 2.1.5 已提交給 CTAN,也可在GitHub.)

現在,不可否認,在OP的範例中,所有這些都沒有任何幫助,因為「第一個非幻像節點」解析為Jane is ....語言學中的新基準預設值適用於並排樹的常見情況;對於任何不尋常的事情,只需設置baseline手動設定即可,如艾倫的回答

相關內容