
Я пытаюсь провести линию между узлом S и матрицей, но не могу заставить это работать. Что я делаю не так?
МВЭ:
\documentclass[a4paper,12pt]{article}
\usepackage{fontspec,tikz, tikz-qtree, multicol,avm,array}
\usetikzlibrary{matrix, positioning, trees, calc, arrows, fit,tikzmark,positioning}
\begin{document}
\begin{multicols}{2}
\begin{tikzpicture}
\begin{scope}
\Tree [.\tikzmark{S}{S} [.NP [.Det the ]
[.N cat ] ]
[.VP [.V sat ]
[.PP [.P on ]
[.NP [.Det the ]
[.N; mat ] ] ] ] ]
\end{scope}
\end{tikzpicture}
\columnbreak
\begin{avm}
\scriptsize
\[{} \tikzmark{PRED}{PRED} `avoid <SUBJ, OBJ>'; TNS $\neq$ PAST \cr
TOPIC \[ PRED `kind<COMP>' \cr
DEF +; LOC FAR; NUM SG \cr
COMP \[ PRED `of <OBJ>' \cr
OBJ \[ PRED `cake'\] \] \]\tikzmark{topic} \cr
SUBJ \[ PRED `pro'; NUM SG; PERS 1; CASE NOM\] \cr
OBJ \[ $\qquad$ \]\tikzmark{object} \cr
ADJ \[ PRED `usually'\] \]
\end{avm}
\begin{tikzpicture}[remember picture,overlay]
\draw[->] (pic cs:S)--(pic cs:PRED);
\draw[-] (pic cs:topic) to[out=0,in=0,looseness=2] (pic cs:object);
\end{tikzpicture}
\end{multicols}
\end{document}
решение1
Это связано с тем, как это tikz-qtree
работает. Подробное объяснение можно найти намой ответк\draw выравнивание при соединении узлов с помощью tikz-qtree, получение линии по центру
Копирование и вставка моего кода из этого ответа — это половина решения. Другая половина — удалить \tikzmark
из дерева. К сожалению, \tikzmark
страдает от той же проблемы, что и tikz-qtree
(как объяснено в этом ответе), поэтому ему потребуется аналогичная корректировка. К счастью, это не обязательно. Поскольку a tikz-qtree
находится внутри tikzpicture
среды, мы можем использовать обычную tikz
систему маркировки узлов для ссылки на узлы в a tikzpicture
. ( tikzmark
был разработан дляснаружиа tikzpicture
и на самом деле не следует использовать внутри, так как тогда он страдает отвложенный синдром tikzpicture.)
\documentclass[a4paper,12pt]{article}
%\url{https://tex.stackexchange.com/q/219072/86}
\usepackage{fontspec,tikz, tikz-qtree, multicol,avm,array}
\usetikzlibrary{matrix, positioning, trees, calc, arrows, fit,tikzmark,positioning}
\makeatletter
\def\unwind@subpic#1{%
% is #1 the current picture?
\edef\subpicid{#1}%
\ifx\subpicid\pgfpictureid
% yes, we're done
\else
% does #1 have a parent picture?
\expandafter\ifx\csname pgf@sh@pi@#1\endcsname\relax
% no, the original node was not inside the current picture
\pgf@xa=\pgf@x
\pgf@ya=\pgf@y
\pgfsys@getposition{\pgfpictureid}\pgf@shape@current@pos
\pgf@process{\pgfpointorigin\pgf@shape@current@pos}%
\advance\pgf@xa by-\pgf@x%
\advance\pgf@ya by-\pgf@y%
\pgf@process{\pgfpointorigin\subpic@parent@pos}%
\advance\pgf@xa by \pgf@x%
\advance\pgf@ya by \pgf@y%
\pgf@x=\pgf@xa
\pgf@y=\pgf@ya
\else
% yes, apply transform, save picture location, and move up to parent picture
\pgfsys@getposition{\csname pgf@sh@pi@#1\endcsname}\subpic@parent@pos%
{%
\pgfsettransform{\csname pgf@sh@nt@#1\endcsname}%
\pgf@pos@transform{\pgf@x}{\pgf@y}%
\global\pgf@x=\pgf@x
\global\pgf@y=\pgf@y
}%
\unwind@subpic{\csname pgf@sh@pi@#1\endcsname}%
\fi
\fi
}
\def\pgf@shape@interpictureshift#1{%
\def\subpic@parent@pos{\pgfpointorigin}%
\unwind@subpic{\csname pgf@sh@pi@#1\endcsname}%
}
\makeatother
\begin{document}
\begin{multicols}{2}
\begin{tikzpicture}[remember picture]
\begin{scope}
\Tree [. \node (S) {S}; [.NP [.Det the ]
[.N cat ] ]
[.VP [.V sat ]
[.PP [.P on ]
[.NP [.Det the ]
[.N; mat ] ] ] ] ]
\end{scope}
\end{tikzpicture}
\columnbreak
\begin{avm}
\scriptsize
\[{} \tikzmark{PRED}{PRED} `avoid <SUBJ, OBJ>'; TNS $\neq$ PAST \cr
TOPIC \[ PRED `kind<COMP>' \cr
DEF +; LOC FAR; NUM SG \cr
COMP \[ PRED `of <OBJ>' \cr
OBJ \[ PRED `cake'\] \] \]\tikzmark{topic} \cr
SUBJ \[ PRED `pro'; NUM SG; PERS 1; CASE NOM\] \cr
OBJ \[ $\qquad$ \]\tikzmark{object} \cr
ADJ \[ PRED `usually'\] \]
\end{avm}
\begin{tikzpicture}[remember picture,overlay]
\draw[->] (S)--(pic cs:PRED);
\draw[-] (pic cs:topic) to[out=0,in=0,looseness=2] (pic cs:object);
\end{tikzpicture}
\end{multicols}
\end{document}
решение2
Работает после переключения на pdfLaTeX. Для этого требуется удалить fontspec
из загруженных пакетов.
Я заметил, что проблема сохраняется при использовании XeLaTeX.