
중괄호 {} 안에 노드를 정의하려고 합니다.
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\Tree [.CP \node(y){here}; [.C$'$ C [.TP \edge[roof]; {Some text \node(x){here};} ]]]
\end{tikzpicture}
\end{document}
tikz-qtree가 'Some text here' 문자열을 단일 단위로 처리하도록 하기를 원하므로 {} 환경 내에서 노드 x를 정의해야 합니다. 그러나 첫 번째 또는 두 번째 닫는 괄호 뒤에 세미콜론을 넣으면 작동하지 않습니다.
답변1
지붕이 있는 노드 내부의 텍스트는 내부적으로 노드 자체이고 노드 내에 노드를 삽입할 수 없으므로 이 문제를 약간 다른 방식으로 공격해야 합니다. 기본 아이디어는 지붕이 있는 노드의 상위 노드를 대신 명명된 노드로 만드는 것입니다. 그런 다음 각 노드의 화살표 등을 표시하려면 상위 노드를 기준으로 화살표의 시작점을 오프셋해야 합니다. 예는 다음과 같습니다.
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\Tree [.CP \node(y){here}; [.C$'$ C [.\node(x){TP}; \edge[roof]; {Some text here} ]]]
\draw [->] (x.south)++(.9,-1) to[out=-90,in=-90,looseness=2] (y.south);
\end{tikzpicture}
\end{document}
좀 더 간단한 대체 방법은 지붕 문자 자체를 노드로 정의한 다음 매개변수를 사용하여 [xshift]
화살표의 시작점을 원하는 지점으로 이동하는 것입니다.
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\Tree [.CP \node(y){here}; [.C$'$ C [.TP \edge[roof]; \node(x){Some text here}; ]]]
\draw [->] ([xshift=2.5em]x.south) to[out=-90,in=-90,looseness=2] (y.south);
\end{tikzpicture}
\end{document}
답변2
누군가의 눈에 띄지 않을 경우를 대비해 나는 forest
나무를 그릴 때를 선호하는 경향이 있습니다.
이 솔루션에서는 '여기'라는 단어를 수동으로 반복하거나 화살표 시작 위치를 수동으로 조정할 필요가 없습니다. 이는 설명서 20페이지의 예를 기반으로 한 것입니다. 비록 약간 잘못되었을 수도 있습니다.
triangle
지붕으로 사용됩니다- 스타일은
move={}{}
2개의 인수를 사용하여 정의됩니다. 첫 번째 인수는 콘텐츠를 복사해야 하는 노드를 지정합니다. 두 번째는 현재 노드에 추가할 추가 텍스트를 지정합니다.
나는 여러분이 정확히 이 작업을 수행하고 싶지 않을 것이라고 가정하고 있으므로 이는 바로 사용할 수 있는 솔루션이라기보다는 설명을 위한 것입니다. 제공한 예에서는 move={<specification of target node>}{Some text}
소스 노드의 내용을 로 지정하고 입력합니다 here
.
그런 다음 소스 노드는 을 포함하게 되고 Some text here
, 대상 노드는 포함하게 되며 , 소스 노드 바로 아래 지점과 대상 노드 바로 아래 지점 here
사이에 화살표가 그려집니다 .here
here
대상 노드를 지정하기 위해 '상대 노드 워크'를 사용했습니다. 그러나 , name=target
대상 노드에 동일하게 추가한 다음 을 넣을 수도 있는데 move={target}{Some text}
, 이는 대부분의 경우 더 간단할 것입니다. 아이디어를 보여주기 위해 이 대안을 트리에 주석 처리된 코드로 추가했습니다.
\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\begin{document}
\newlength{\sourcetextaddwidth}
\begin{forest}
for tree={
parent anchor=south,
child anchor=north,
fit=rectangle
},
move/.style n args=2{% page 20 of forest manual
before typesetting nodes={
TeX={
\settowidth{\sourcetextaddwidth}{#2}
},
#1.content={##1},
content={#2 ##1},
tikz={
\draw[->] (.south) +(.5\sourcetextaddwidth,0) to [out=south west, in=south] (#1);
},
},
},
[CP
[this is the target node to which text will be moved%, name=target
]
[C$'$
[C
]
[TP
[here, triangle, move={!r1}{Some text}% move={target}{Some text}
]
]
]
]
\end{forest}
\end{document}