사용할 때forest
언어 구문 트리를 그리기 위한 패키지를 사용 하는 경우 프로그래밍 방식의 형식 지정을 용이하게 하기 위해 forest
/ 에서 볼 수 있는 별도의 "노드"로 유지하면서 특정 터미널 노드와 해당 부모 사이에 선이 그려지는 것을 어떻게 방지할 수 있습니까?TikZ
다음은 원하는 출력의 예입니다(아래 MWE에 제공된 현재 해결 방법을 사용하여 생성됨).
현재 해결 방법에는 너무 많은 수동 개입이 필요한 다음이 포함됩니다.
- 단일 노드를 생성한 다음 구문 범주(있는 경우)와 해당 어휘 구현(있는 경우) 사이에 강제로 줄 바꿈을 적용하여 "터미널 노드"와 해당 "상위" 사이의 줄을 제거합니다
[DP\\the apple]
. - 어휘 항목이 있는 터미널 노드에는 패키지로 색상을 지정하여 이러한 항목을 수동으로 장식합니다
xcolor
(예[DP\\\textcolor{blue}{the apple}]
: .
이상적으로는 환경 내에 다음 코드와 같은 것을 프로그래밍 방식으로 적용할 수 있기를 바랍니다 forest
.
for tree={
if n children=0{
text=blue
}{},
}
그러나 위의 코드 조각을 추가하면 다음과 같은 원하지 않는 출력이 생성됩니다.
나는 해결책이 "어휘적 터미널 노드" 유형(예: 비어 있거나 구문 범주 대신 어휘 유형인 터미널 노드)을 설정한 다음 해당 노드에만 텍스트 장식을 적용하는 것과 관련이 있을 수 있다고 생각합니다. 유형. 그러나 내에서 이 작업을 수행하는 방법 forest
이나 이것이 좋은/최적의 솔루션인지 잘 모르겠습니다 .
최소 작업 예(현재 해결 방법)
\documentclass[a4paper]{article}
% ----- Package Imports -----
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
\usepackage[svgnames]{xcolor} % Custom colours
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees
\begin{document}
\begin{forest}
[CP
[\phantom{X}]
[C'
[C]
[TP
[\phantom{X},name=TP-spec]
[T'
[T\\\textcolor{blue}{$\varnothing_{\text{past}}$},name=TP-head]
[VoiceP
[DP\\\textcolor{blue}{Bill}]
{\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
[Voice'
[Voice\\\textcolor{blue}{$\varnothing_{\text{active}}$}]
[VP
[DP]
[V'
[V\\{[}FORM preterite{]}\\\textcolor{blue}{ate}]
[DP\\\textcolor{blue}{the apple}]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}
답변1
노드에 적용하면 no edge
상위 노드에 대한 가장자리가 그려지지 않습니다.
l sep=0
상위 노드와 l=0
하위 노드를 결합하면 서로 수직으로 가까워집니다.
inner ysep=0
하위 항목을 추가로 설정하고(이렇게 하면 카테고리와 어휘 내용이 좀 더 가까워짐) TikZ에서 Forest의 항목 align
(노드 내용을 환경에 배치하여 tabular
추가적인 수직 공간을 생성함)을 재정의 하면 결과가 가장 만족스럽습니다. align
: \forestset{align/.style={/tikz/align={#1}}}
.
\documentclass[a4paper]{article}
% ----- Package Imports -----
\usepackage[svgnames]{xcolor} % Custom colours
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees
\forestset{align/.style={/tikz/align={#1}}}
\begin{document}
\begin{forest}
for tree={
if n children=1{
l sep=0,
for 1={no edge, l=0, inner ysep=0, blue}
}{},
}
[CP
[\phantom{X}]
[C'
[C]
[TP
[\phantom{X},name=TP-spec]
[T'
[T[$\varnothing_{\text{past}}$,name=TP-head]]
[VoiceP
[DP[Bill]
{\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
]
[Voice'
[Voice[$\varnothing_{\text{active}}$]]
[VP
[DP]
[V'
[V\\{[}FORM preterite{]}[ate]]
[DP[the apple]]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}