
Это расширениеэтот вопрос. В лингвистике часто необходим анализ слов, и я думаю, что TikZ — это отличный инструмент, чтобы привнести немного жизни, цвета и, прежде всего, ясности в сцену. Я не обладаю навыками, чтобы сделать это, поэтому я набросал набросок того, что я хотел бы сделать.
Используядругой вопросиследующий эскизВ качестве отправной точки я надеюсь, что какой-нибудь умный ум предложит гибкое решение.
Предварительный список критериев
- Скобки предназначены для обтекания определенных буквНЕДОСТИГНУТО
- Фигурные скобки должны иметь возможность перекрывать друг друга.НЕДОСТИГНУТО
- Расстояние между скобками и словом должно быть переменным(выполнено в другом вопросе)
- Описание Расстояние до скобы должно быть переменным(выполнено, см. обновление 2 апреля 2013 г.)
- Описание должно быть достаточно гибким, чтобы его можно было разместить где-нибудь далеко от скобки и соединить с скобкой пунктирной линией (или другим типом линии).(выполнено, см. обновление 2 апреля 2013 г.)
- Скобки должны быть такими, чтобы их можно было ставить как над, так и под словом.НЕДОСТИГНУТОсвоего рода см. ответ перкусса
- Гибкость и простота применения к целому абзацу слов (например, «Отче наш» на финском языке!) (TikZ вычисляет ширину скобок из указанных букв в слове)НЕДОСТИГНУТО
Пример анализа слова TikZ:
ОБНОВЛЯТЬ2 апреля 2013 г.: Критерии № 4 и № 5
Сегодня мне удалось выполнить критерии № 4 и № 5! Это халтурная работа, и ее, возможно, можно оптимизировать (ищу профессионала, который это сделает!).
Я взял код из другого вопроса и добавил
- Переменные
- отрегулируйте вертикаль(yshift=)расположение текста
- горизонтальный(xshift=)расположение текста
- настроить ширину описания(ширина текста=)
- Прилавок
- автоматические имена узлов
- связать описания с фигурными скобками(используя "текст#" и "фигурные скобки#")позволяет легко присоединить описания к правильным скобкам
Как это работает
Чтобы добавить скобку к слову, используйте команду \tikzbrace. Ниже показаны параметры и пример.
\tikzbrace[скобка yshift]{word}{description}[ширина текста=20ex][текст yshift][текст xshift]
например, в действии * Обратите внимание на избыточную ширину текста внутри переменной (не уверен, как это исправить — см. раздел «Немного путаницы»)
\tikzbrace[-1ex]{word}{Им.ед.ч. суффикс -me}[ширина текста=20ex][5ex][xshift=4cm]
Немного путаницы
Обратите внимание, что порядок переменных в команде\NewDocumentCommandсбивают с толку, и мне пришлось немного поэкспериментировать с их порядком. Вероятно, из-за порядка, в котором TikZ анализирует параметры. У меня также есть избыточныйширина текста=option жестко закодирован, но все равно необходимо включить текст width= в переменную. Может кто-то знает, как это исправить.
Почему я использую TikZ-Dependency?
Должны сработать две вещи:
- Ссылки на целые слова (для дословного перевода) (над словами)
И
- Все еще есть отдельные узлы, начинающиеся/заканчивающиеся на определенные буквы. (ниже слов)
Эту проблему можно решить, если кто-то знает, как решить критерий №2, используя буквы в качестве ссылок (часть гибкости этого проекта).
Делать
- Соответствие недостающим критериям (см. контрольный список выше, который я буду обновлять, пока не разрешу проблему)
- разрешить возврат каретки в описаниях (не работает даже при заданной ширине текста)Достигнуто (РЕШЕНИЕ: нужен параметр align= для узла описания, например align=left)
\documentclass[]{beamer}
\usepackage{fontspec}
\usepackage{tikz-dependency}
\newcounter{mycounter}
\setcounter{mycounter}{1}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,calc}
\usepackage{xparse}
% TikZ Command for Brace
\NewDocumentCommand{\tikzbrace}{O{-2.5ex} m m O{} O{1ex} O{} O{0ex}}{%
\tikz[remember picture]\coordinate (left brace coord);%
#2%
\tikz[remember picture]\coordinate (right brace coord);%
\begin{tikzpicture}[remember picture,overlay,
transform canvas={yshift=#1}]
\draw [decoration={amplitude=1ex,brace},decorate,#4] %
(right brace coord) -- (left brace coord)
node [#6,xshift=#7,midway,below=#5,font=\scriptsize] (text\arabic{mycounter}) {#3};
\path (right brace coord) -- (left brace coord) node[midway,yshift=#1] (brace\arabic{mycounter}) {\stepcounter{mycounter}};
\end{tikzpicture}%
}
\begin{document}
\begin{frame}{Satz 1}
\begin{dependency}[edge style={red,densely dotted}]
\begin{deptext}
\tikzbrace[-1ex]{Isae}{Vater} \& meidän, \& joka \& \tikzbrace[-1ex]{olet}{2Psg} \& \tikzbrace[-1ex]{taiva}{-\emph{issa}=pl (sg -\emph{ssa}) Inessiv, ähnlich Lokativ, e.g. talossa "in dem Haus"}[text width=20ex][10ex][xshift=0cm]\tikzbrace[-1ex]{issa}{-issa=pl von -ssa Inessiv (ähnlich wie Lokativ). Trägt die Bedeutung „in“
z.B talossa=in the house
}[text width=20ex][5ex][xshift=4cm],\\
\end{deptext}
\deproot[edge unit distance=1ex]{1}{Vater}
\deproot[edge unit distance=1ex]{2}{unserer}
\deproot[edge unit distance=1ex]{3}{wer}
\end{dependency}
% Lines - Description to Brace
\begin{tikzpicture}[remember picture, overlay]
\draw[red, dotted] (text4.north) to [out=90,in=270](brace4.south);
\draw[red, dotted] (text3.north) to [out=90,in=270](brace3.south);
\end{tikzpicture}
\end{frame}
\end{document}
решение1
Вы можете использовать одну и ту же идею с различными возможностями, такими как raise
декор, или смещать координаты, использовать якоря и т. д.
\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing,calc}
\begin{document}
\begin{tikzpicture}
\node[outer sep=0,inner sep=1pt] (w) {\Large Reenactment};
%The angle anchors
\draw[decoration={brace,raise=1mm},decorate,] (w.166) -- (w.13)
node[midway,above=2mm,align=center,anchor=south] {Some linguistic\\ text here};
% The explicit coord calc
\draw[decoration={brace,raise=1mm,mirror},decorate] (w.south west) -- ($(w.south)-(8mm,0)$)
coordinate [midway,below=2mm] (c1);
\draw[densely dashed] ([yshift=-2mm]c1) --++(0,-1cm) node[below] {Prefix-re};
\draw[decoration={brace,raise=20mm,mirror},decorate] (w.south west) -- (w.south);
\draw[decoration={brace,mirror},decorate]
([yshift=-3cm]w.south west) -- ([yshift=-3cm]w.south east);
\end{tikzpicture}
\end{document}
Размещение узла может быть выполнено через параметр midway
для середины или pos=number
. Смещение узла может быть достигнуто путем предоставления расстояния до above
или below
в качестве аргументов.