숲: 공간을 차지하지 않는 팬텀 노드를 만드시겠습니까?

숲: 공간을 차지하지 않는 팬텀 노드를 만드시겠습니까?

정렬 목적으로 트리 상단에 공간을 차지하지 않는 팬텀 노드를 생성하여 트리의 첫 번째 레이블이 지정된 노드가 예제 번호와 일치하도록 만들고 싶습니다. 설정 l sep=0pt만으로는 충분하지 않습니다. 이를 달성하려면 또 무엇을 설정해야 합니까?

MWE:

\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 이전에 Forest는 TikZ가 그리지 않은 노드 baseline에서 키가 사용된 경우에도 키가 사용될 때마다 기준 노드(앵커가 기준선에 정렬될 노드)를 설정했습니다 . phantom이로 인해 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 매뉴얼에서 약속한 대로 다음 예와 같이 "그림의 하단이 주변 텍스트의 기준선에 배치됩니다"입니다. ( draw정렬을 더 잘 볼 수 있도록 노드는 n입니다 .)

\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의 언어학 라이브러리가 더 똑똑해지려고 노력하는 이유입니다. 대략적으로 말하면 기준선을 "첫 번째 비팬텀 노드"로 설정합니다. 이 예에서는 왼쪽 VP이므로 다음과 같은 결과를 얻습니다.

2.1.5로 컴파일됨

(임시 설명: Forest 2.1.5는 이미 CTAN에 제출되었으며 다음 사이트에서도 사용 가능합니다.GitHub.)

이제 OP의 예에서는 "첫 번째 비 팬텀 노드"가 로 확인되므로 이 모든 것이 전혀 도움이 되지 않습니다 Jane is .... 언어학의 새로운 기본 기본값은 병렬 트리의 일반적인 경우에 적용됩니다. 평범하지 않은 경우에는 baseline다음의 조언에 따라 수동으로 설정하면 됩니다.앨런의 대답.

관련 정보