这个问题导致了一个新的方案的出现:
movement-arrows
是否有可能对gb4e
一个示例进行注释并且在示例中有一个移动箭头。
我目前正在使用gb4e
,我想要一个从“t”到“een auto”的箭头。我已经查看了其他软件包(xytree
,tikz
),但我找不到办法做到这一点
\documentclass[11pt]{article}
\usepackage{gb4e}
\begin{document}
\begin{xlist}
\ex \label{scramble-det}
\gll
... dat Jan een auto gisteren t gekregen heeft.\\
... that John a car yesterday t gotten has \\
... that John a car yesterday.
\end{xlist}
\end{document}
以下示例取自gb4e
文档,但我不理解它,因此无法修改它以满足我的需要:
答案1
更新:
请使用所示的答案的打包版本我的其他答案。
原始答案
这是使用我版本的流行宏来实现此目的的方法tikzmark
,因为gb4e
箭头版本使用起来非常麻烦。如果您需要将 real\tikzmark
用于其他目的,则需要更改我的代码中的宏名称。
这主要将来自不同来源的代码片段组合在一起。有两个问题需要解决:第一,用箭头连接注释中的单词;第二,在注释后添加一些空间以容纳箭头。
我创建了一个新的\ex
宏\arrowex
,作为带有箭头的示例。每个要用箭头连接的单词都会通过命令引入\tikzmark
。节点名称将与单词本身相同。最后,\arrow
宏会连接单词。
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand\tikzmark[1]{\tikz[remember picture, baseline=(#1.base)] \node[anchor=base,inner sep=0pt, outer sep=0pt] (#1) {#1};}
% This code from http://tex.stackexchange.com/q/55068/2693
\tikzset{
ncbar angle/.initial=90,
ncbar/.style={
to path=(\tikztostart)
-- ($(\tikztostart)!#1!\pgfkeysvalueof{/tikz/ncbar angle}:(\tikztotarget)$)
-- ($(\tikztotarget)!($(\tikztostart)!#1!\pgfkeysvalueof{/tikz/ncbar angle}:(\tikztotarget)$)!\pgfkeysvalueof{/tikz/ncbar angle}:(\tikztostart)$)
-- (\tikztotarget)
},
ncbar/.default=0.5cm,
}
% Thanks to Paul Gessler adn Percusse for code improvement here
\newcommand{\arrow}[2]{\begin{tikzpicture}[remember picture,overlay]
\draw[->,shorten >=3pt,shorten <=3pt] (#1.base) to [ncbar=\arrowht] (#2.base);
\end{tikzpicture}
\setlength{\arrowht}{0ex}
}
\usepackage{gb4e}
% The following code modified from
% http://permalink.gmane.org/gmane.comp.tex.linguistics/1036
% This adds some extra space after the first line
\newlength{\arrowht}
\setlength{\arrowht}{0ex}
\newcommand*\cgdepthstrut{{\vrule height 0pt depth \arrowht width 0pt}}
\renewcommand\eachwordone{\cgdepthstrut\rmfamily}
\renewcommand\glt{\vskip -\topsep}
\let\trans=\glt
\newcommand\arrowex{\setlength{\arrowht}{2.5ex}\ex}
\begin{document}
\begin{exe}
\ex\label{scramble-det}
\begin{xlist}
\arrowex
\gll
\ldots dat Jan \tikzmark{een} auto gisteren \tikzmark{t} gekregen heeft.\\
\ldots that John a car yesterday t gotten has \\
\ldots that John a car yesterday.
\arrow{t}{een}
\end{xlist}
\end{exe}
\begin{exe}
\ex\label{scramble-det}
\begin{xlist}
\ex
\gll
\ldots dat Jan een auto gisteren t gekregen heeft.\\
\ldots that John a car yesterday t gotten has \\
\ldots that John a car yesterday.
\end{xlist}
\end{exe}
\end{document}
答案2
最后,我终于兑现了我的评论,并将我原来的答案变成了一个包。底层代码不同,并且包允许上下箭头,所以我添加了一个单独的答案。该包还增加了带圆圈标签的可能性,以回答这个问题:
这是一个示例文档,展示了它的一些功能。
\documentclass[11pt]{article}
\usepackage{gb4e}
\usepackage{movement-arrows}
\begin{document}
\begin{exe}
\ex
\begin{xlist}
\ex{
\arrowgloss\gll\ldots dat Jan \mkword[een]{een auto} gisteren \mkword{t} gekregen heeft.\\
\ldots that John {a \hspace*{1em} car} yesterday t gotten has \\
\ldots that John a car yesterday.}
\mvarrow{t}{een}
\ex \mkword{Where} did this move from \mkword{t}?
\mvarrow[circ=1]{t}{Where}
\ex Another example.
\end{xlist}
\end{exe}
\begin{exe}
\ex
\begin{xlist}
\ex This \mkword{is} not \mkword[t]{<be>} verb movement.
\mvarrow{t}{is}
\ex It \mkword{PRES} not \mkword[be]{be} verb lowering.
\mvarrow[circ=2]{PRES}{be}
\end{xlist}
\end{exe}
\begin{exe}
\arrowstrut
\ex \mkword{What} \mkword{has} \mkword[twh]{<what>} \mkword[thas]{<has>}
moved?
\mvarrow[circ=1]{thas}{has}
\mvarrow*[circ=2]{twh}{What}
\end{exe}
\end{document}