Автосегментарное представление в tikz-qtree

Автосегментарное представление в tikz-qtree

Вот чего я хочу добиться

Связывание от «мю» к «а»

и это:

Связь от «О» до «л»

Но все, что мне удалось сделать с помощью tikz-qtree, это следующее:

\documentclass[12pt,a4]{article}
\usepackage[utf8]{inputenc}
\usepackage{tipa,tikz,tikz-qtree}
\begin{document}

\begin{tikzpicture} [baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ a ] [.$\mu$ : ] ] ]
\end{tikzpicture}
\begin{tikzpicture} [baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ a ]  ] ]
\end{tikzpicture}

И это:

\begin{tikzpicture}[baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ l ] ]
[.R [.$\mu$ a ] [.$\mu$ l ] ] ]
\end{tikzpicture}
\begin{tikzpicture} [baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ : ] ]
[.R [.$\mu$ a ] [ l ] ] ]
\end{tikzpicture}
\end{document}

Что отображает:

введите описание изображения здесь

и

введите описание изображения здесь

Важная часть здесь — это привязка листьев к нескольким родительским элементам (было бы неплохо, если бы у меня была возможность сделать линию пунктирной). Теперь pst-asr не совсем достигает того, чего я хочу. Важно, чтобы у меня были moras ('mu's). (Кроме того, это пакет pstricks, что означает, что я должен набрать его в DVIPSPDF.) Я немного попробовал forest-package (особенно forest-GP1), но у меня тоже не получается заставить его работать так, как я хочу. Наконец, некоторые рекомендовали xyling, но я нахожу этот пакет очень сложным в использовании.

Есть ли какие-нибудь рекомендации?

Спасибо.

решение1

На самом деле, вы определенно были на правильном пути: некоторые незначительные дополнения к вашему коду работают хорошо. Это основано на том факте, что tikz-qtree.styможно использовать \nodes, которые можно называть, а имена использовать в качестве координат для \drawing. Второй пример немного сложнее в том, что линия рисуется между двумя деревьями, требуя, \begin{scope}...\end{scope}чтобы два дерева могли появляться рядом друг с другом. Вы можете настроить положение второго дерева, изменив количество xshift.

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture} [baseline]
\begin{scope}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ \node[red](a){a}; ] \node(m){$\mu$}; ] ]
\draw (m.south) -- (a.north);
\end{scope}
\begin{scope}[xshift=0.65in]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ a ]  ] ]
\end{scope}
\end{tikzpicture}

\begin{tikzpicture}[baseline]
\begin{scope}
\Tree
[.$\sigma$ [.O [ l ] ]
[.R [.$\mu$ a ] [.$\mu$ \node(l){l}; ] ] ]
\end{scope}
\begin{scope}[xshift=0.75in]
\Tree
[.$\sigma$ [.\node(O){O};  ]
[.R [.$\mu$ a ] [ l ] ] ]
\draw[dashed] (O.south) -- (l.north);
\end{scope}
\end{tikzpicture}

\end{document}

Что дает следующее:

Актуальные данные.

решение2

Это намного проще сделать с forest. Вы можете использовать phantomопцию, чтобы разместить деревья рядом, и поскольку каждый слог является дочерним узлом фантома, вы можете назвать узлы для ветвей мультидоменности. Поскольку эти линии рисуются с помощью обычных команд TikZ, вам также нужно сделать соответствующий дочерний фантом. Вы можете добавить любые украшения к линии (например, [dashed]) с помощью обычных опций TiKZ. Вот ваши два примера, которые были отработаны.

Сначала я установил стиль под названием , syllкоторый делает соединения узлов плотными, как мы привыкли видеть в лингвистике. Кроме того, поскольку мы хотим, чтобы сегменты выстраивались в линию друг с другом, а ветви расширялись до сегментарного слоя, я назначил все дочерние узлы ярусу seg. Я также создал пару макросов для слогов и мор.

\documentclass{article}
\usepackage{forest}
\newcommand{\syl}{$\sigma$}
\newcommand{\mor}{$\mu$}
\forestset{syll/.style=
   {for tree={parent anchor=south,child anchor=north,
              align=center,inner sep=0pt,
              where n children=0{tier=seg}{}}}}
\begin{document}
\begin{forest}syll
[,phantom, s sep=1em
[\syl [O [p,tier=seg ]]
      [R [\mor [a,name=aa] ] [\mor,name=M [,phantom] ]]]
[\syl [O [p,tier=seg ]]
      [R [\mor [a] ]]]
]
\draw (M.south) -- (aa.north);
\end{forest}

\begin{forest}syll
[,phantom, s sep=1em
[\syl [O [l ]]
      [R [\mor [a]] [\mor [l,name=LL]]]]
[\syl [O,name=O [,phantom] ]
      [R [\mor [a] [l]]]]
]
\draw[dashed] (O.south) -- (LL.north);
\end{forest}


\end{document}

вывод кода

решение3

Вы можете добиться желаемого в pst-asr, а если вы используете XeTeX, то все будет хорошо (что в любом случае рекомендуется для лингвистики). Я сейчас не перед компьютером, так что код и вывод позже!

РЕДАКТИРОВАТЬ

Вот код.

\documentclass{article}

\usepackage{pst-asr}
    \psset{everyasr=\tiershortcuts}
    \newpsstyle{dashed}{linestyle=dashed,dash=3pt 2pt}

\begin{document}

\newtier{con}
\psset{con=7ex (O)}
\newtier{sig}
\psset{sig=13ex (O)}
\asr[reptype=nots, sy=2ex ($\mu$)] |
    \@(0,ph){p}
    \@(1,ph){a}
    \@(3,ph){p}
    \@(4,ph){a}
    \@(1,sy){$\mu$}\-(1,ph)
    \@(2,sy){$\mu$}\-(1,ph)
    \@(4,sy){$\mu$}\-(4,ph)
    \@(0,con){O}\-(0,ph)
    \@(1,con){R}\-(1,sy)\-(2,sy)
    \@(3,con){O}\-(3,ph)
    \@(4,con){R}\-(4,sy)
    \@(.5,sig){$\sigma$}\-(0,con)\-(1,con)
    \@(3.5,sig){$\sigma$}\-(3,con)\-(4,con)
\endasr

\bigskip

\asr[reptype=nots, sy=2ex ($\mu$)] |
    \@(0,ph){l}
    \@(1,ph){a}
    \@(2,ph){l}
    \@(4,ph){a}
    \@(5,ph){l}
    \@(1,sy){$\mu$}\-(1,ph)
    \@(2,sy){$\mu$}\-(2,ph)
    \@(4,sy){$\mu$}\-(4,ph)
    \@(0,con){O}\-(0,ph)
    \@(1,con){R}\-(1,sy)\-(2,sy)
    \@(3,con){O}\-[style=dashed](2,ph)
    \@(4,con){R}\-(4,sy)\-(5,ph)
    \@(.5,sig){$\sigma$}\-(0,con)\-(1,con)
    \@(3.5,sig){$\sigma$}\-(3,con)\-(4,con)
\endasr

\end{document}

И на выходе.

выход

Связанный контент