summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/adtrees
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-07-11 21:04:12 +0000
committerKarl Berry <karl@freefriends.org>2019-07-11 21:04:12 +0000
commit7559eb16050dce8cef70650604224db997445886 (patch)
treefef9221758a3d08bb43edaf54e3841fd08d5de2f /Master/texmf-dist/tex/latex/adtrees
parent7db6071b1ded2ed4dd2c31a1a67a43e6eaba756b (diff)
adtrees (11jul19)
git-svn-id: svn://tug.org/texlive/trunk@51618 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/adtrees')
-rw-r--r--Master/texmf-dist/tex/latex/adtrees/adtrees.sty657
1 files changed, 467 insertions, 190 deletions
diff --git a/Master/texmf-dist/tex/latex/adtrees/adtrees.sty b/Master/texmf-dist/tex/latex/adtrees/adtrees.sty
index 5d94825f81a..7cf97e3b0d2 100644
--- a/Master/texmf-dist/tex/latex/adtrees/adtrees.sty
+++ b/Master/texmf-dist/tex/latex/adtrees/adtrees.sty
@@ -1,14 +1,15 @@
-%%-------------------------------------------------------
+%-------------------------------------------------------
%% This package is deputed to draw AdTrees as defined by
%% F. Gobbo and M. Benini in "Constructive Adpositional
%% Grammars: Foundations of Constructive Linguistics",
%% Cambrdige Scholar Publishing
%%
-%% Version 1.0 - 2016/01/20
+%% Version 1.1 - 2019/07/11
%%-------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{adtrees}[2016/01/20 v1.0 Adtrees package]
+\ProvidesPackage{adtrees}[2019/07/11 v1.1 Adtrees package]
\RequirePackage{cancel}
+\RequirePackage{epic}
%%-------------------------------------------------------
%% We assume that \smaller is a command that reduces the
@@ -18,8 +19,8 @@
%% the right size when dealing with \normalsize trees.
%%-------------------------------------------------------
\@ifundefined{smaller}%
-{\gdef\@ATsmall{\small}}%
-{\gdef\@ATsmall{\smaller}}
+ {\gdef\@ATsmall{\small}}%
+ {\gdef\@ATsmall{\smaller}}
%%-------------------------------------------------------
%% Usually, the angle in adtrees is 60 degrees
@@ -36,7 +37,7 @@
\ATnormalangle
%%-------------------------------------------------------
-%% Firstly, we declare the internal variables
+%% First, we declare the internal variables
%%-------------------------------------------------------
\newskip\@ATlen % a temporay length
\newskip\@ATbp % the base point of a block
@@ -63,6 +64,8 @@
\newif\if@ATlinear % switch for linear vs tree format
\@ATlinearfalse % (usually false)
+\newif\if@ATtabul % switch for linear vs tree format
+\@ATtabulfalse % (usually false)
%%-------------------------------------------------------
%% The variable stack implementation
@@ -73,17 +76,20 @@
%% In this case, we know that the saved values are, in
%% fact, dimensions. We store them as numbers.
%%-------------------------------------------------------
+\newcount\@ATstackheight \@ATstackheight0
\def\@ATeos{X}
\edef\@ATstack{\@ATeos}
\def\@ATpush#1{%
-\def\@ATcons{\noexpand\@ATcons}%
-\expandafter\edef\expandafter\@ATstack\expandafter{%
-\@ATcons{#1}\@ATstack}}
+ \global\advance\@ATstackheight1%
+ \def\@ATcons{\noexpand\@ATcons}%
+ \expandafter\edef\expandafter\@ATstack\expandafter{%
+ \@ATcons{#1}\@ATstack}}
\def\@AT@top#1#2#3X{#2}
\def\@ATtop{\expandafter\@AT@top\@ATstack}
\def\@AT@pop#1#2#3X{%
-\def\@ATcons{\noexpand\@ATcons}%
-\expandafter\edef\expandafter\@ATstack\expandafter{#3\@ATeos}}
+ \global\advance\@ATstackheight-1%
+ \def\@ATcons{\noexpand\@ATcons}%
+ \expandafter\edef\expandafter\@ATstack\expandafter{#3\@ATeos}}
\def\@ATpop{\expandafter\@AT@pop\@ATstack}
%%-------------------------------------------------------
@@ -98,7 +104,9 @@
%%-------------------------------------------------------
\def\@ATadposition#1#2#3{%
\if@ATlinear%
- \ATlinearadpositionblock{#1}{#2}{#3}\else%%
+ \@ATlinearadpositionblock{#1}{#2}{#3}\else%
+ \if@ATtabul%
+ \@ATtabularadpositionblock{#1}{#2}{#3}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATsc\hbox{#3}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb\copy\@ATsc}%
@@ -112,7 +120,7 @@
\hbox to\@ATlen{\hfil\box\@ATsc\hfil}\nointerlineskip%
\ATpostadpositionskip}%
\@ATwt\dp\@ATu%
- \hbox{\raise\@ATwt\hbox{\box\@ATu}}\fi}
+ \hbox{\raise\@ATwt\hbox{\box\@ATu}}\fi\fi}
\def\@ATtree#1#2#3#4#5{%
\@ifnextchar[{\@ATadposb{#1}{#2}{#3}{#4}{#5}}%
{\@ATadposa{#1}{#2}{#3}{#4}{#5}}}
@@ -120,29 +128,33 @@
\@ATtreeparsed{#1}{#2}{#3}{#4}{\hbox{#5}}}
\def\@ATadposb#1#2#3#4#5[#6]{%
\@ATadposc{#1}{#2}{#3}{#4}{%
- \@ATadposd{#5}{\@ATsmall\ATAttributeBox{#6}}}}
+ \@ATadposd{#5}{\ATAttributeBox{#6}}}}
\def\@ATadposc#1#2#3#4#5{%
\@ifnextchar[{\@ATadposf{#1}{#2}{#3}{#4}{#5}}%
{\@ATadposa{#1}{#2}{#3}{#4}{#5}}}
\def\@ATadposd#1#2{\if@ATlinear%
- \ATlinearfirstattribute{#1}{#2}\else%
+ \@ATlinearfirstattribute{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularfirstattribute{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\vbox{%
\hbox to\@ATlen{\hfil\box\@ATsa\hfil}\nointerlineskip%
\ATfirstattrskip%
- \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi\fi}
\def\@ATadpose#1#2{\if@ATlinear%
- \ATlinearnextattribute{#1}{#2}\else%
+ \@ATlinearnextattribute{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularnextattribute{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\vbox{%
\hbox to\@ATlen{\hfil\box\@ATsa\hfil}\nointerlineskip%
\ATinterattrskip%
- \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi\fi}%
\def\@ATadposf#1#2#3#4#5[#6]{%
\@ATadposc{#1}{#2}{#3}{#4}{%
- \@ATadpose{#5}{\@ATsmall\ATAttributeBox{#6}}}}
+ \@ATadpose{#5}{\ATAttributeBox{#6}}}}
%%-------------------------------------------------------
%% The internal drawing procedure for binary adtrees.
@@ -184,62 +196,66 @@
%% and to limit register/memory usage.
%%-------------------------------------------------------
\def\@ATtreeparsed#1#2#3#4#5#6#7{%
-\if@ATlinear%
-\@ATadposition{#3}{#4}{#5}\ATlinearsubtrees{#6}{#7}\else%
-\sbox{\@ATta}{\ignorespaces#6\@killglue}%
-\@ATpush{\the\@ATbp}\@ATpush{\the\@ATwt}%
-\sbox{\@ATtb}{\ignorespaces#7\@killglue}%
-\setbox\@ATu\hbox{\usebox{\@ATta}\usebox{\@ATtb}}\@ATh\ht\@ATu%
-\setbox\@ATu\hbox{\usebox{\@ATta}}\@ATlen\ht\@ATu\advance\@ATlen -\@ATh%
-\edef\@ATtok{\@ATtop}\@ATpop\@ATwl\@ATtok%
-\edef\@ATtok{\@ATtop}\@ATpop\@ATbl\@ATtok%
-\@ATrl\@ATwl\advance\@ATrl -\@ATbl%
-\sbox{\@ATta}{\raisebox{-\@ATlen}{\usebox{\@ATta}}}%
-\setbox\@ATu\hbox{\usebox{\@ATtb}}\@ATwr\@ATwt\@ATlen\ht\@ATu%
-\advance\@ATlen -\@ATh\@ATbr\@ATbp\@ATrr\@ATwr\advance\@ATrr -\@ATbr%
-\sbox{\@ATtb}{\raisebox{-\@ATlen}{\usebox{\@ATtb}}}%
-\@ATskip\z@\@ATpiks\z@%
-\@ATunit\unitlength%
-\unitlength#1%
-\@ATlen\@ATbl\advance\@ATlen\@ATrr\advance\@ATlen 50\unitlength\relax%
-\ifdim\@ATlen<\@ATwl%
-\ifdim\@ATwr<\@ATwl\@ATpiks\@ATrl\advance\@ATpiks -\@ATrr%
-\advance\@ATpiks -50\unitlength\fi%
-\@ATlen\@ATwl\fi\relax%
-\ifdim\@ATlen<\@ATwr\@ATlen\@ATwr%
-\@ATskip\@ATbr\advance\@ATskip -\@ATbl%
-\advance\@ATskip -50\unitlength\fi\relax%
-\global\@ATbp\@ATbl\global\advance\@ATbp 25\unitlength%
-\global\advance\@ATbp \@ATskip\global\@ATwt\@ATlen%
-\setbox\@ATu\box\voidb@x%
-\unitlength\@ATunit%
-\hbox{\hspace*{\@ATskip}\usebox{\@ATta}\hspace*{-\@ATrl}%
-\@ATunit\unitlength%
-\unitlength#1%
-\edef\@AT@angle{#2}%
-{\ifnum\@AT@angle=120%
-\raisebox{\@ATh}{\begin{picture}(50,12.5)%
-\thicklines\put(25,12.5){\ATleftbranch{-2}{-1}{25}}%
-\put(25,12.5){\ATcircle{2}}%
-\put(25,9.5){\makebox(0,0)[t]{\@ATadposition{#3}{#4}{#5}}}%
-\thicklines\put(25,12.5){\ATrightbranch{2}{-1}{25}}%
-\end{picture}}%
-\else\ifnum\@AT@angle=90%
-\raisebox{\@ATh}{\begin{picture}(50,25)%
-\thicklines\put(25,25){\ATleftbranch{-1}{-1}{25}}%
-\put(25,25){\ATcircle{2}}%
-\put(25,19){\makebox(0,0)[t]{\@ATadposition{#3}{#4}{#5}}}%
-\thicklines\put(25,25){\ATrightbranch{1}{-1}{25}}%
-\end{picture}}%
-\else%
-\raisebox{\@ATh}{\begin{picture}(50,50)%
-\thicklines\put(25,50){\ATleftbranch{-1}{-2}{25}}%
-\put(25,50){\ATcircle{2}}%
-\put(25,35){\makebox(0,0)[t]{\@ATadposition{#3}{#4}{#5}}}%
-\thicklines\put(25,50){\ATrightbranch{1}{-2}{25}}%
-\end{picture}}\fi\fi}%
-\unitlength\@ATunit%
-\hspace*{-\@ATbr}\usebox{\@ATtb}\hspace*{\@ATpiks}}\fi}
+ \if@ATlinear%
+ \@ATlinearadpositionblock{#3}{#4}{#5}%
+ \@ATlinearsubtrees{#6}{#7}\else%
+ \if@ATtabul%
+ \vbox{\@ATtabularadpositionblock{#3}{#4}{#5}%
+ \@ATtabularsubtrees{#6}{#7}}\else%
+ \sbox{\@ATta}{\ignorespaces#6\@killglue}%
+ \@ATpush{\the\@ATbp}\@ATpush{\the\@ATwt}%
+ \sbox{\@ATtb}{\ignorespaces#7\@killglue}%
+ \setbox\@ATu\hbox{\usebox{\@ATta}\usebox{\@ATtb}}\@ATh\ht\@ATu%
+ \setbox\@ATu\hbox{\usebox{\@ATta}}\@ATlen\ht\@ATu\advance\@ATlen -\@ATh%
+ \edef\@ATtok{\@ATtop}\@ATpop\@ATwl\@ATtok%
+ \edef\@ATtok{\@ATtop}\@ATpop\@ATbl\@ATtok%
+ \@ATrl\@ATwl\advance\@ATrl -\@ATbl%
+ \sbox{\@ATta}{\raisebox{-\@ATlen}{\usebox{\@ATta}}}%
+ \setbox\@ATu\hbox{\usebox{\@ATtb}}\@ATwr\@ATwt\@ATlen\ht\@ATu%
+ \advance\@ATlen -\@ATh\@ATbr\@ATbp\@ATrr\@ATwr\advance\@ATrr -\@ATbr%
+ \sbox{\@ATtb}{\raisebox{-\@ATlen}{\usebox{\@ATtb}}}%
+ \@ATskip\z@\@ATpiks\z@%
+ \@ATunit\unitlength%
+ \unitlength#1%
+ \@ATlen\@ATbl\advance\@ATlen\@ATrr\advance\@ATlen 50\unitlength\relax%
+ \ifdim\@ATlen<\@ATwl%
+ \ifdim\@ATwr<\@ATwl\@ATpiks\@ATrl\advance\@ATpiks -\@ATrr%
+ \advance\@ATpiks -50\unitlength\fi%
+ \@ATlen\@ATwl\fi\relax%
+ \ifdim\@ATlen<\@ATwr\@ATlen\@ATwr%
+ \@ATskip\@ATbr\advance\@ATskip -\@ATbl%
+ \advance\@ATskip -50\unitlength\fi\relax%
+ \global\@ATbp\@ATbl\global\advance\@ATbp 25\unitlength%
+ \global\advance\@ATbp \@ATskip\global\@ATwt\@ATlen%
+ \setbox\@ATu\box\voidb@x%
+ \unitlength\@ATunit%
+ \hbox{\hspace*{\@ATskip}\usebox{\@ATta}\hspace*{-\@ATrl}%
+ \@ATunit\unitlength%
+ \unitlength#1%
+ \edef\@AT@angle{#2}%
+ {\ifnum\@AT@angle=120%
+ \raisebox{\@ATh}{\begin{picture}(50,12.5)%
+ \thicklines\put(25,12.5){\ATleftbranch{-2}{-1}{25}}%
+ \put(25,12.5){\ATcircle{2}}%
+ \put(25,9.5){\makebox(0,0)[t]{\@ATadposition{#3}{#4}{#5}}}%
+ \thicklines\put(25,12.5){\ATrightbranch{2}{-1}{25}}%
+ \end{picture}}%
+ \else\ifnum\@AT@angle=90%
+ \raisebox{\@ATh}{\begin{picture}(50,25)%
+ \thicklines\put(25,25){\ATleftbranch{-1}{-1}{25}}%
+ \put(25,25){\ATcircle{2}}%
+ \put(25,19){\makebox(0,0)[t]{\@ATadposition{#3}{#4}{#5}}}%
+ \thicklines\put(25,25){\ATrightbranch{1}{-1}{25}}%
+ \end{picture}}%
+ \else%
+ \raisebox{\@ATh}{\begin{picture}(50,50)%
+ \thicklines\put(25,50){\ATleftbranch{-1}{-2}{25}}%
+ \put(25,50){\ATcircle{2}}%
+ \put(25,35){\makebox(0,0)[t]{\@ATadposition{#3}{#4}{#5}}}%
+ \thicklines\put(25,50){\ATrightbranch{1}{-2}{25}}%
+ \end{picture}}\fi\fi}%
+ \unitlength\@ATunit%
+ \hspace*{-\@ATbr}\usebox{\@ATtb}\hspace*{\@ATpiks}}\fi\fi}
%%-------------------------------------------------------
%% The internal drawing procedure for right extensions
@@ -248,32 +264,34 @@
%% been truncated.
%%-------------------------------------------------------
\def\@ATright#1#2#3{%
-\if@ATlinear%
-#3\else%
-\sbox{\@ATtb}{\ignorespaces#3\@killglue}%
-\setbox\@ATu\hbox{\usebox{\@ATtb}}\@ATh\ht\@ATu\@ATwr\@ATwt%
-\@ATbr\@ATbp\@ATrr\@ATwr\advance\@ATrr -\@ATbr%
-\global\advance\@ATbp\ifdim\@ATbr<25pt -\@ATbp\else -25\unitlength\fi%
-\@ATwt\@ATrr\advance\@ATwt 25\unitlength\global\advance\@ATwt\@ATbp%
-\setbox\@ATu\box\voidb@x%
-\hbox{\hspace*{\@ATbp}%
-\@ATlen\unitlength%
-\unitlength#1%
-\edef\@AT@angle{#2}%
-\ifnum\@AT@angle=120%
-\raisebox{\@ATh}{\begin{picture}(25,12.5)%
-\thicklines\put(0,12.5){\ATrightbranch{2}{-1}{25}}%
-\end{picture}}%
-\else\ifnum\@AT@angle=90%
-\raisebox{\@ATh}{\begin{picture}(25,25)%
-\thicklines\put(0,25){\ATrightbranch{1}{-1}{25}}%
-\end{picture}}%
-\else%
-\raisebox{\@ATh}{\begin{picture}(25,50)%
-\thicklines\put(0,50){\ATrightbranch{1}{-2}{25}}%
-\end{picture}}\fi\fi%
-\unitlength\@ATlen%
-\hspace*{-\@ATbr}\usebox{\@ATtb}}\fi}
+ \if@ATlinear%
+ #3\else%
+ \if@ATtabul%
+ #3\else%
+ \sbox{\@ATtb}{\ignorespaces#3\@killglue}%
+ \setbox\@ATu\hbox{\usebox{\@ATtb}}\@ATh\ht\@ATu\@ATwr\@ATwt%
+ \@ATbr\@ATbp\@ATrr\@ATwr\advance\@ATrr -\@ATbr%
+ \global\advance\@ATbp\ifdim\@ATbr<25pt -\@ATbp\else -25\unitlength\fi%
+ \@ATwt\@ATrr\advance\@ATwt 25\unitlength\global\advance\@ATwt\@ATbp%
+ \setbox\@ATu\box\voidb@x%
+ \hbox{\hspace*{\@ATbp}%
+ \@ATlen\unitlength%
+ \unitlength#1%
+ \edef\@AT@angle{#2}%
+ \ifnum\@AT@angle=120%
+ \raisebox{\@ATh}{\begin{picture}(25,12.5)%
+ \thicklines\put(0,12.5){\ATrightbranch{2}{-1}{25}}%
+ \end{picture}}%
+ \else\ifnum\@AT@angle=90%
+ \raisebox{\@ATh}{\begin{picture}(25,25)%
+ \thicklines\put(0,25){\ATrightbranch{1}{-1}{25}}%
+ \end{picture}}%
+ \else%
+ \raisebox{\@ATh}{\begin{picture}(25,50)%
+ \thicklines\put(0,50){\ATrightbranch{1}{-2}{25}}%
+ \end{picture}}\fi\fi%
+ \unitlength\@ATlen%
+ \hspace*{-\@ATbr}\usebox{\@ATtb}}\fi\fi}
%%-------------------------------------------------------
%% The internal drawing procedure for left extensions
@@ -282,31 +300,33 @@
%% has been truncated.
%%-------------------------------------------------------
\def\@ATleft#1#2#3{%
-\if@ATlinear%
-#3\else%
-\sbox{\@ATta}{\ignorespaces#3\@killglue}%
-\setbox\@ATu\hbox{\usebox{\@ATta}}\@ATh\ht\@ATu\@ATwl\@ATwt%
-\@ATrl\@ATwl\advance\@ATrl -\@ATbp\global\advance\@ATbp 25\unitlength\relax%
-\global\@ATwt\ifdim\@ATbp<\@ATwl\@ATwl\else\@ATbp\fi\relax%
-\setbox\@ATu\box\voidb@x%
-\hbox{\usebox{\@ATta}\hspace*{-\@ATrl}%
-\@ATlen\unitlength%
-\unitlength#1%
-\edef\@AT@angle{#2}%
-\ifnum\@AT@angle=120%
-\raisebox{\@ATh}{\begin{picture}(25,12.5)%
-\thicklines\put(25,12.5){\ATleftbranch{-2}{-1}{25}}%
-\end{picture}}%
-\else\ifnum\@AT@angle=90%
-\raisebox{\@ATh}{\begin{picture}(25,25)%
-\thicklines\put(25,25){\ATleftbranch{-1}{-1}{25}}%
-\end{picture}}%
-\else%
-\raisebox{\@ATh}{\begin{picture}(25,50)%
-\thicklines\put(25,50){\ATleftbranch{-1}{-2}{25}}%
-\end{picture}}\fi\fi%
-\unitlength\@ATlen%
-\hspace*{-\@ATbp}\hspace*{\@ATwt}}\fi}%
+ \if@ATlinear%
+ #3\else%
+ \if@ATtabul%
+ #3\else%
+ \sbox{\@ATta}{\ignorespaces#3\@killglue}%
+ \setbox\@ATu\hbox{\usebox{\@ATta}}\@ATh\ht\@ATu\@ATwl\@ATwt%
+ \@ATrl\@ATwl\advance\@ATrl -\@ATbp\global\advance\@ATbp 25\unitlength\relax%
+ \global\@ATwt\ifdim\@ATbp<\@ATwl\@ATwl\else\@ATbp\fi\relax%
+ \setbox\@ATu\box\voidb@x%
+ \hbox{\usebox{\@ATta}\hspace*{-\@ATrl}%
+ \@ATlen\unitlength%
+ \unitlength#1%
+ \edef\@AT@angle{#2}%
+ \ifnum\@AT@angle=120%
+ \raisebox{\@ATh}{\begin{picture}(25,12.5)%
+ \thicklines\put(25,12.5){\ATleftbranch{-2}{-1}{25}}%
+ \end{picture}}%
+ \else\ifnum\@AT@angle=90%
+ \raisebox{\@ATh}{\begin{picture}(25,25)%
+ \thicklines\put(25,25){\ATleftbranch{-1}{-1}{25}}%
+ \end{picture}}%
+ \else%
+ \raisebox{\@ATh}{\begin{picture}(25,50)%
+ \thicklines\put(25,50){\ATleftbranch{-1}{-2}{25}}%
+ \end{picture}}\fi\fi%
+ \unitlength\@ATlen%
+ \hspace*{-\@ATbp}\hspace*{\@ATwt}}\fi\fi}%
%%-------------------------------------------------------
%% The internal procedure to draw a leaf.
@@ -320,7 +340,10 @@
{\@ATadlb{#1}{#2}}%
{\@ATadla{#1}{#2}}}
\def\@ATadla#1#2{%
- \if@ATlinear\ATlinearmorphemeblock{#1}{#2}\else%
+ \if@ATlinear\relax%
+ \@ATlinearmorphemeblock{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularmorphemeblock{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\setbox\@ATu\vbox{%
@@ -334,28 +357,32 @@
\@ATwt\ht\@ATu\advance\@ATwt-\ht\@ATsa%
\setbox\@ATu\hbox{\lower\@ATwt\hbox{\box\@ATu}}%
\global\@ATwt\wd\@ATu\global\@ATbp .5\@ATwt%
- \hbox{\box\@ATu}\fi}
+ \hbox{\box\@ATu}\fi\fi}
\def\@ATadlb#1#2[#3]{%
\@ATadlc{#1}{\@ATadld{#2}{\ATAttributeBox{#3}}}}
\def\@ATadlc#1#2{\@ifnextchar[%
{\@ATadlf{#1}{#2}}%
{\@ATadla{#1}{#2}}}
\def\@ATadld#1#2{\if@ATlinear%
- \ATlinearfirstattribute{#1}{#2}\else%
+ \@ATlinearfirstattribute{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularfirstattribute{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\vbox{%
\hbox to\@ATlen{\hfil\box\@ATsa\hfil}\nointerlineskip%
\ATfirstattrskip%
- \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi\fi}%
\def\@ATadle#1#2{\if@ATlinear%
- \ATlinearnextattribute{#1}{#2}\else%
+ \@ATlinearnextattribute{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularnextattribute{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\vbox{%
\hbox to\@ATlen{\hfil\box\@ATsa\hfil}\nointerlineskip%
\ATinterattrskip%
- \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi\fi}%
\def\@ATadlf#1#2[#3]{%
\@ATadlc{#1}{\@ATadle{#2}{\ATAttributeBox{#3}}}}
@@ -371,7 +398,10 @@
{\@ATadsb{#1}{#2}}%
{\@ATadsa{#1}{#2}}}
\def\@ATadsa#1#2{%
- \if@ATlinear\ATlinearsummaryblock{#1}{#2}\else%
+ \if@ATlinear\relax%
+ \@ATlinearsummaryblock{#1}{#2}\else%
+ \if@ATtabul\relax%
+ \@ATtabularsummaryblock{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATsc\hbox{\ATSummarySymbol}%
\setbox\@ATu\vbox{\copy\@ATsc\copy\@ATsa\copy\@ATsb}%
@@ -390,28 +420,32 @@
\@ATwt\ht\@ATu\advance\@ATwt-\ht\@ATsa%
\setbox\@ATu\hbox{\lower\@ATwt\hbox{\box\@ATu}}%
\global\@ATwt\wd\@ATu\global\@ATbp .5\@ATwt%
- \hbox{\box\@ATu}\fi}
+ \hbox{\box\@ATu}\fi\fi}
\def\@ATadsb#1#2[#3]{%
\@ATadsc{#1}{\@ATadsd{#2}{\ATAttributeBox{#3}}}}
\def\@ATadsc#1#2{\@ifnextchar[%
{\@ATadsf{#1}{#2}}%
{\@ATadsa{#1}{#2}}}
\def\@ATadsd#1#2{\if@ATlinear%
- \ATlinearfirstattribute{#1}{#2}\else%
+ \@ATlinearfirstattribute{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularfirstattribute{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\vbox{%
\hbox to\@ATlen{\hfil\box\@ATsa\hfil}\nointerlineskip%
\ATfirstattrskip%
- \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi\fi}%
\def\@ATadse#1#2{\if@ATlinear%
- \ATlinearnextattribute{#1}{#2}\else%
+ \@ATlinearnextattribute{#1}{#2}\else%
+ \if@ATtabul%
+ \@ATtabularnextattribute{#1}{#2}\else%
\setbox\@ATsa\hbox{#1}\setbox\@ATsb\hbox{#2}%
\setbox\@ATu\vbox{\copy\@ATsa\copy\@ATsb}\@ATlen\wd\@ATu%
\vbox{%
\hbox to\@ATlen{\hfil\box\@ATsa\hfil}\nointerlineskip%
\ATinterattrskip%
- \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}\fi\fi}%
\def\@ATadsf#1#2[#3]{%
\@ATadsc{#1}{\@ATadse{#2}{\ATAttributeBox{#3}}}}
@@ -455,9 +489,9 @@
%%
%% \ATSummarySymbol defines the symbol used for the summary
%%-------------------------------------------------------
-\def\ATMorphemeBox#1{#1\strut}
-\def\ATGrammarCharacterBox#1{$\mathrm{#1}$}
-\def\ATAttributeBox#1{\textsf{[#1]}}
+\def\ATMorphemeBox#1{\mbox{#1\strut}}
+\def\ATGrammarCharacterBox#1{\mbox{\@ATsmall$\mathrm{#1}$}}
+\def\ATAttributeBox#1{\mbox{\@ATsmall\textsf{[#1]}}}
\def\ATfirstattrskip{\vskip.7ex}
\def\ATinterattrskip{\vskip.5ex}
@@ -546,36 +580,24 @@
\def\@ATmu{\mu}
\def\@AT@shorttree#1#2#3#4#5{%
\@ATtree{#1}{#2}{\hbox{$#3$}}%
- {\@ATsmall\ATMorphemeBox{#4}}%
- {\@ATsmall\ATGrammarCharacterBox{#5}}}
-\def\ATl{\@AT@shorttree{\unitlength}{\@ATangle}%
- {\scriptstyle\leftarrow}}
-\def\ATlL#1{\@AT@shorttree{#1}{\@ATangle}%
- {\scriptstyle\leftarrow}}
-\def\ATlA#1{\@AT@shorttree{\unitlength}{#1}%
- {\scriptstyle\leftarrow}}
-\def\ATlLA#1#2{\@AT@shorttree{#1}{#2}%
- {\scriptstyle\leftarrow}}
-\def\ATr{\@AT@shorttree{\unitlength}{\@ATangle}%
- {\scriptstyle\rightarrow}}
-\def\ATrL#1{\@AT@shorttree{#1}{\@ATangle}%
- {\scriptstyle\rightarrow}}
-\def\ATrA#1{\@AT@shorttree{\unitlength}{#1}%
- {\scriptstyle\rightarrow}}
-\def\ATrLA#1#2{\@AT@shorttree{#1}{#2}%
- {\scriptstyle\rightarrow}}
-\def\ATb{\@AT@shorttree{\unitlength}{\@ATangle}%
- {\scriptstyle\leftrightarrow}}
-\def\ATbL#1{\@AT@shorttree{#1}{\@ATangle}%
- {\scriptstyle\leftrightarrow}}
-\def\ATbA#1{\@AT@shorttree{\unitlength}{#1}%
- {\scriptstyle\leftrightarrow}}
-\def\ATbLA#1#2{\@AT@shorttree{#1}{#2}%
- {\scriptstyle\leftrightarrow}}
+ {\ATMorphemeBox{#4}}%
+ {\ATGrammarCharacterBox{#5}}}
+\def\ATlLA#1#2{\@AT@shorttree{#1}{#2}{\scriptstyle\leftarrow}}
+\def\ATl{\ATlLA{\unitlength}{\@ATangle}}
+\def\ATlL#1{\ATlLA{#1}{\@ATangle}}
+\def\ATlA{\ATlLA{\unitlength}}
+\def\ATrLA#1#2{\@AT@shorttree{#1}{#2}{\scriptstyle\rightarrow}}
+\def\ATr{\ATrLA{\unitlength}{\@ATangle}}
+\def\ATrL#1{\ATrLA{#1}{\@ATangle}}
+\def\ATrA{\ATrLA{\unitlength}}
+\def\ATbLA#1#2{\@AT@shorttree{#1}{#2}{\scriptstyle\leftrightarrow}}
+\def\ATb{\ATbLA{\unitlength}{\@ATangle}}
+\def\ATbL#1{\ATbLA{#1}{\@ATangle}}
+\def\ATbA{\ATbLA{\unitlength}}
+\def\ATleLA#1#2{\ATlLA{#1}{#2}{$\@ATeps$}}
\def\ATle{\ATl{$\@ATeps$}}
\def\ATleL#1{\ATlL{#1}{$\@ATeps$}}
\def\ATleA#1{\ATlA{#1}{$\@ATeps$}}
-\def\ATleLA#1#2{\ATlLA{#1}{#2}{$\@ATeps$}}
\def\ATlc{\ATl{$\@ATepsc$}}
\def\ATlcL#1{\ATlL{#1}{$\@ATepsc$}}
\def\ATlcA#1{\ATlA{#1}{$\@ATepsc$}}
@@ -608,18 +630,16 @@
\def\ATbmuL#1{\ATbL{#1}{$\@ATmu$}}
\def\ATbmuA#1{\ATbA{#1}{$\@ATmu$}}
\def\ATbmuLA#1#2{\ATbLA{#1}{#2}{$\@ATmu$}}
-\def\ATxl{\@ATleft{\unitlength}{\@ATangle}}
-\def\ATxlL#1{\@ATleft{#1}{\@ATangle}}
-\def\ATxlA#1{\@ATleft{\unitlength}{#1}}
\def\ATxlLA#1#2{\@ATleft{#1}{#2}}
-\def\ATxr{\@ATright{\unitlength}{\@ATangle}}
-\def\ATxrL#1{\@ATright{#1}{\@ATangle}}
-\def\ATxrA#1{\@ATright{\unitlength}{#1}}
+\def\ATxl{\ATxlLA{\unitlength}{\@ATangle}}
+\def\ATxlL#1{\ATxlLA{#1}{\@ATangle}}
+\def\ATxlA{\ATxlLA{\unitlength}}
\def\ATxrLA#1#2{\@ATright{#1}{#2}}
-\def\ATs#1#2{\@ATads{\ATMorphemeBox{#1}}%
- {\ATGrammarCharacterBox{#2}}}
-\def\ATm#1#2{\@ATadl{\ATMorphemeBox{#1}}%
- {\ATGrammarCharacterBox{#2}}}
+\def\ATxr{\ATxrLA{\unitlength}{\@ATangle}}
+\def\ATxrL#1{\ATxrLA{#1}{\@ATangle}}
+\def\ATxrA{\ATxrLA{\unitlength}}
+\def\ATs#1#2{\@ATads{\ATMorphemeBox{#1}}{\ATGrammarCharacterBox{#2}}}
+\def\ATm#1#2{\@ATadl{\ATMorphemeBox{#1}}{\ATGrammarCharacterBox{#2}}}
%%-------------------------------------------------------
%% Public commands to write adtrees in linear format.
@@ -632,17 +652,95 @@
%% where t is the text. All these renderings are coded via
%% suitable blocks
%%-------------------------------------------------------
-\def\ATlinearise#1{\@ATlineartrue\hbox{#1}\@ATlinearfalse}
-\def\ATLinear{\@ATlineartrue}
-\def\ATNormal{\@ATlinearfalse}
+\def\ATLinear{\global\@ATlineartrue\global\@ATtabulfalse%
+ \gdef\@ATlinearadpositionblock{\ATlinearadpositionblock}%
+ \gdef\@ATlinearfirstattribute{\ATlinearfirstattribute}%
+ \gdef\@ATlinearnextattribute{\ATlinearnextattribute}%
+ \gdef\@ATlinearsubtrees{\ATlinearsubtrees}%
+ \gdef\@ATlinearmorphemeblock{\ATlinearmorphemeblock}%
+ \gdef\@ATlinearsummaryblock{\ATlinearsummaryblock}}
+\def\ATNormal{\global\@ATlinearfalse\global\@ATtabulfalse}
+\def\ATlinearise#1{\ATLinear\ensuremath{#1}\ATNormal}
-\def\ATlinearadpositionblock#1#2#3{%
- {#2}${}^{\hbox{#1}}_{\hbox{#3}}$}
-\def\ATlinearfirstattribute#1#2{{#1}:{#2}}
-\def\ATlinearnextattribute#1#2{{#1};{#2}}
+\def\ATlinearadpositionblock#1#2#3%
+ {{#2}\textsuperscript{#1}\textsubscript{#3}}
+\def\ATlinearfirstattribute#1{{#1}:}
+\def\ATlinearnextattribute#1{{#1};}
\def\ATlinearsubtrees#1#2{(#1,\linebreak[0] #2)}
-\def\ATlinearmorphemeblock#1#2{{#1}${}_{\hbox{#2}}$}
-\def\ATlinearsummaryblock#1#2{({#1})${}_{\hbox{#2}}$}
+\def\ATlinearmorphemeblock#1#2{{#1}\textsubscript{#2}}
+\def\ATlinearsummaryblock#1#2{\mbox{$\triangle($}%
+ \mbox{#1}\mbox{$)$}\textsubscript{#2}}
+\def\@ATlinearadpositionblock{\ATlinearadpositionblock}%
+\def\@ATlinearfirstattribute{\ATlinearfirstattribute}%
+\def\@ATlinearnextattribute{\ATlinearnextattribute}%
+\def\@ATlinearsubtrees{\ATlinearsubtrees}%
+\def\@ATlinearmorphemeblock{\ATlinearmorphemeblock}%
+\def\@ATlinearsummaryblock{\ATlinearsummaryblock}
+
+%%-------------------------------------------------------
+%% Public commands to write adtrees in tabular format.
+%%
+%% Essentially, an adtree is written as
+%% Ad^dir_GC(
+%% L,
+%% R)
+%% where Ad is the adposition, dir is the direction, GC
+%% is the grammar character, and L and R are the left and
+%% right subtrees respectively. Leaves are written as
+%% m_GC, where m is the morpheme, and summaries as (t)_GC
+%% where t is the text. All these renderings are coded via
+%% suitable blocks
+%%-------------------------------------------------------
+\def\ATTabular{\global\@ATtabultrue\global\@ATlinearfalse%
+ \gdef\@ATtabularadpositionblock{\ATtabularadpositionblock}%
+ \gdef\@ATtabularfirstattribute{\ATtabularfirstattribute}%
+ \gdef\@ATtabularnextattribute{\ATtabularnextattribute}%
+ \gdef\@ATtabularsubtrees{\ATtabularsubtrees}%
+ \gdef\@ATtabularmorphemeblock{\ATtabularmorphemeblock}%
+ \gdef\@ATtabularsummaryblock{\ATtabularsummaryblock}%
+ \@AT@tabcountreset}
+
+\newenvironment{ATtabulardisplay}
+{\ATTabular\unskip\hfill\break}
+{\ATNormal}
+
+\newenvironment{ATtabular}
+{\hbox\bgroup\ATTabular}
+{\egroup\ATNormal}
+
+\def\ATtabskip{\hspace*{.7em}}
+\def\ATtabindent{\hspace*{1em}}
+
+\newcount\@AT@tabcount
+\newcount\@AT@@tabcount
+\def\@AT@tabcountreset{\global\@AT@tabcount0}
+\def\AT@loop@tab{\@AT@@tabcount\@AT@tabcount%
+ \ifnum\@AT@@tabcount>0%
+ \loop\ATtabskip\advance\@AT@@tabcount-1%
+ \ifnum\@AT@@tabcount>0\repeat\else\relax\fi}
+
+\def\ATtabularadpositionblock#1#2#3{%
+ \hbox{\ATtabindent\AT@loop@tab%
+ {#2}\textsuperscript{#1}\textsubscript{#3}}}
+\def\ATtabularmorphemeblock#1#2{
+ \hbox{\ATtabindent\AT@loop@tab%
+ {#1}\textsubscript{#2}}}
+\def\ATtabularsummaryblock#1#2{
+ \hbox{\ATtabindent\AT@loop@tab%
+ \mbox{$\triangle($}%
+ \mbox{#1}\mbox{$)$}\textsubscript{#2}}}
+\def\ATtabularfirstattribute{\ATlinearfirstattribute}
+\def\ATtabularnextattribute{\ATlinearnextattribute}
+\def\ATtabularsubtrees#1#2{%
+ \advance\@AT@tabcount1%
+ \vbox{#1\relax#2}%
+ \advance\@AT@tabcount-1}
+\def\@ATtabularadpositionblock{\ATtabularadpositionblock}%
+\def\@ATtabularfirstattribute{\ATtabularfirstattribute}%
+\def\@ATtabularnextattribute{\ATtabularnextattribute}%
+\def\@ATtabularsubtrees{\ATtabularsubtrees}%
+\def\@ATtabularmorphemeblock{\ATtabularmorphemeblock}%
+\def\@ATtabularsummaryblock{\ATtabularsummaryblock}%
%%-------------------------------------------------------
%% Centring adtrees.
@@ -659,12 +757,191 @@
%%-------------------------------------------------------
\def\ATvcentre#1{%
\setbox\@ATsc\hbox{#1}%
- \@ATlen\dp\@ATsc\setbox\@ATsc\hbox{\raise\@ATlen\box\@ATsc}
+ \@ATlen\dp\@ATsc\setbox\@ATsc\hbox{\raise\@ATlen\box\@ATsc}%
\@ATlen.5\ht\@ATsc\hbox{\lower\@ATlen\box\@ATsc}}%
\def\AThcentre#1{%
\setbox\@ATsc\hbox{#1}%
- \@ATlen-.5\wd\@ATsc%
- \hbox{\kern\@ATlen\box\@ATsc}}
+ \@ATlen-.5\wd\@ATsc\hbox{\kern\@ATlen\box\@ATsc}}
\def\ATcentre#1{\AThcentre{\ATvcentre{#1}}}
%%-------------------------------------------------------
+%% Pathlike adtrees.
+%%
+%% A pathlike adtree is rendered by enclosing it into the
+%% pathlikeadtree environment.
+%%-------------------------------------------------------
+
+% the pieces the user may use and change
+\newskip\ATpathinterskip \ATpathinterskip.5em
+\newskip\ATpathunitlength \ATpathunitlength4ex
+\newskip\ATpicskip \ATpicskip.2ex
+\newskip\ATpathlinethickness \ATpathlinethickness.1em
+\def\ATnGCBox#1{\@ATsmall$\mathrm{#1}$}
+\def\ATlGCBox#1{\@ATsmall$\mathrm{#1}$}
+\newskip\ATpathlabelhspace \ATpathlabelhspace.3em
+\newskip\ATpathlabelvspace \ATpathlabelvspace1ex
+\def\ATpathpichook{}
+
+%\newenvironment{pathlikeadtree}
+\def\pathlikeadtree{\@ATpathlistinit}
+\def\endpathlikeadtree{\@ATpathlistend}
+
+% some internal declarations
+\newif\if@ATpathfirstnode
+\newbox\@ATpathbox \newbox\@ATpathlinebox
+\newcount\@ATanchor \newcount\@ATcells \newcount\@ATadppars
+\newcount\@ATpa \newcount\@ATpb \newcount\@ATpc
+\newcount\@ATpd \newcount\@ATpe \newcount\@ATtmp
+\newcount\@ATtmpa \newcount\@AThmax
+
+% A pathlike adtree starts with parsing a node after cleaning up what
+% has to be done, and temporarily redefining &
+\def\@ATpathlistinit{%
+ \begingroup%
+ \linethickness{\ATpathlinethickness}%
+ \global\@ATpathfirstnodetrue\global\@ATanchor0\global\@ATcells0%
+ \global\@ATadppars0\global\@AThmax0\def\@ATpathdrawlines{\relax}%
+ \setbox\@ATpathbox\null\setbox\@ATpathlinebox\null\AT@n}
+
+% A pathlike adtree ends by drawing the two boxes which contain the
+% list of marked morphemes and the connecting lines, respectively
+\def\@ATpathlistend{%
+ \def\@ATca##1{\@ATpa ##1\relax}\def\@ATcb##1{\@ATpb ##1\relax}%
+ \def\@ATcc##1{\@ATpc ##1\relax}\def\@ATcd##1{\@ATpd ##1\relax}%
+ \def\@ATce##1{\@ATpe ##1\@ATto}\@ATpathdrawlines%
+ \global\setbox\@ATpathbox\hbox{%
+ \vbox{\box\@ATpathbox\nointerlineskip%
+ \vskip\ATpicskip\box\@ATpathlinebox}}%
+ \box\@ATpathbox\endgroup}
+
+% Parsing a node: it has the form
+% - morpheme[gc]
+% possibly followed by one or more arrow specs
+\def\AT@n#1[#2]{\@ifnextchar(%
+ {\@ATn{#1}{#2}\AT@to}
+ {\@ATn{#1}{#2}}}
+\def\AT@np{\@ifnextchar&{\@AT@n}{}}
+\def\@AT@n&#1[#2]{\AT@n#1[#2]}
+
+% when morpheme[gc] has been extracted, its cell is constructed as a
+% box and accumulated in the pathbox, correctly spaced
+% At the end, we pass on the next cell, if any
+\def\@ATn#1#2{%
+ \global\advance\@ATanchor1%
+ \setbox\@ATsa\hbox{\ignorespaces#1}\@ATlen\wd\@ATsa%
+ \setbox\@ATsb\hbox{\ATnGCBox{#2}}\@ATwt\wd\@ATsb\relax%
+ \ifdim\@ATlen<\@ATwt\relax\@ATlen\@ATwt\fi%
+ \setbox\@ATsa\vbox{\hbox to\@ATlen{\hfil\box\@ATsa\hfil}%
+ \hbox to\@ATlen{\hfil\box\@ATsb\hfil}}%
+ \@ATwt\wd\@ATpathbox\advance\@ATwt.5\@ATlen%
+ \if@ATpathfirstnode\else\advance\@ATwt\ATpathinterskip\fi%
+ \expandafter\edef\csname @ATcell\the\@ATanchor\endcsname{\the\@ATwt}%
+ \setbox\@ATpathbox\hbox{\box\@ATpathbox%
+ \if@ATpathfirstnode\global\@ATpathfirstnodefalse\else%
+ \hskip\ATpathinterskip\fi\box\@ATsa}%
+ \@ifnextchar&{\AT@np}{}}
+
+% parsing an arrow spec: it has the form
+% (t,h)[gc]<a>
+% where the "a" part is optional
+% moreover, if "t" or "a" are specified by absolute positions, they
+% are preceded by "!".
+% parsing calculates the absolute values of the relative positions,
+% and send everything to \@ATtoa
+\def\AT@to(#1){\AT@@to#1)}
+\def\AT@@to{\@ifnextchar!{\AT@to@a}{\AT@tor(}}
+\def\AT@to@a!#1){\AT@toa(#1)}
+\def\AT@tor(#1,#2){%
+ \@ATtmp#1\advance\@ATtmp\@ATanchor\relax%
+ \AT@toa(\the\@ATtmp,#2)}
+\def\AT@toa(#1,#2)[#3]{\@ifnextchar<%
+ {\@AT@toa{#1}{#2}{\ATlGCBox{#3}}}%
+ {\@ATtoa{#1}{#2}{\ATlGCBox{#3}}{0}}}
+\def\@AT@toa#1#2#3<{\@ifnextchar!%
+ {\@AT@@toa{#1}{#2}{#3}}%
+ {\@ATtoar{#1}{#2}{#3}}}
+\def\@AT@@toa#1#2#3!#4>{\@ATtoa{#1}{#2}{#3}{#4}}
+\def\@ATtoar#1#2#3#4>{%
+ \@ATtmpa#4\relax\ifnum#4=\z@\relax\@ATtmpa\z@%
+ \else\advance\@ATtmpa\@ATanchor\fi%
+ \@ATtoa{#1}{#2}{#3}{\the\@ATtmpa}}
+
+% when an arrow has been parsed, we must accumulate it into the
+% command \@ATpathdrawlines which will construct the arrows at the
+% right moment, i.e., after the whole pathlike adtree has been
+% scanned. Notice how the command checks whether an arrow is followed
+% by another one, eventually restarting the parsing process for the
+% new arrow. If not, let's move to the next cell, if any
+\def\@ATtoa#1#2#3#4{%
+ \ifnum\@AThmax<#2\relax\@AThmax#2\fi%
+ \def\@ATca{\noexpand\@ATca}\def\@ATcb{\noexpand\@ATcb}%
+ \def\@ATcc{\noexpand\@ATcc}\def\@ATcd{\noexpand\@ATcd}%
+ \def\@ATce{\noexpand\@ATce}%
+ \expandafter\def\csname @ATadppar\the\@ATadppars\endcsname{#3}%
+ \expandafter\edef\expandafter\@ATpathdrawlines\expandafter{%
+ \@ATca{\the\@ATanchor}\@ATcb{#1}\@ATcc{#2}%
+ \@ATcd{\the\@ATadppars}\@ATce{#4}\@ATpathdrawlines}%
+ \global\advance\@ATadppars1\relax
+ \@ifnextchar({\AT@to}{\AT@np}}
+
+% at the end, an arrow is effectively drawn.
+\def\@ATto{%
+ \edef\@AText{\csname @ATcell\the\@ATpa\endcsname}\@ATbl\@AText%
+ \edef\@AText{\csname @ATcell\the\@ATpb\endcsname}\@ATbr\@AText%
+ \setbox\@ATsa\hbox{\csname @ATadppar\the\@ATpd\endcsname}%
+ \setbox\@ATsa\hbox{%
+ \hskip\ATpathlabelhspace\box\@ATsa\hskip\ATpathlabelhspace}%
+ \@ATbp\ht\@ATsa\advance\@ATbp\dp\@ATsa%
+ \advance\@ATbp\ATpathlabelvspace\relax%
+ \@ATskip\wd\@ATsa\relax\unitlength1pt\relax%
+ \@ATh\@ATpc\ATpathunitlength\relax%
+ \@ATunit\@AThmax\ATpathunitlength\relax%
+ \@ATlen\@ATbr\advance\@ATlen\@ATbl\relax%
+ \@ATwr\@ATbr\advance\@ATwr-\@ATbl\relax%
+ \@ATrr\@ATunit\advance\@ATrr-\@ATh\relax%
+ \ifnum\@ATpe=\z@\else%
+ \edef\@AText{\csname @ATcell\the\@ATpe\endcsname}\@ATrl\@AText\fi%
+ \ATpathpichook\relax%
+ \setbox\@ATu\hbox{%
+ \begin{picture}(\strip@pt\@ATlen,\strip@pt\@ATunit)
+ \put(\strip@pt\@ATbl,\strip@pt\@ATunit)%
+ {\line(0,-1){\strip@pt\@ATh}}%
+ \put(\strip@pt\@ATbr,\strip@pt\@ATunit)%
+ {\line(0,-1){\strip@pt\@ATh}}%
+ \ifdim\@ATwr<\z@\relax%
+ \put(\strip@pt\@ATbl,\strip@pt\@ATrr)%
+ {\vector(-1,0){-\strip@pt\@ATwr}}%
+ \put(\strip@pt\@ATbr,\strip@pt\@ATrr)%
+ {\makebox(0,\strip@pt\@ATbp)[l]{\box\@ATsa}}\else%
+ \put(\strip@pt\@ATbl,\strip@pt\@ATrr)%
+ {\vector(1,0){\strip@pt\@ATwr}}%
+ \put(\strip@pt\@ATbr,\strip@pt\@ATrr)%
+ {\makebox(0,\strip@pt\@ATbp)[r]{\box\@ATsa}}\fi%
+ \ifnum\@ATpe=\z@\else\ifdim\@ATrl<\@ATbl%
+ \@ATwt.5\ATpathunitlength%
+ \@ATwl\@ATbl\advance\@ATwl-\@ATwt%
+ \@ATwr\@ATrr\advance\@ATwr2\@ATwt%
+ \dottedline{3}(\strip@pt\@ATbl,\strip@pt\@ATrr)%
+ (\strip@pt\@ATwl,\strip@pt\@ATwr)%
+ \advance\@ATbl-\@ATwt\advance\@ATrr2\@ATwt%
+ \@ATlen\@ATbl\advance\@ATlen-\@ATrl%
+ \@ATwl\@ATbl\advance\@ATwl-\@ATlen%
+ \dottedline{3}(\strip@pt\@ATbl,\strip@pt\@ATrr)%
+ (\strip@pt\@ATwl,\strip@pt\@ATrr)%
+ \dottedline{3}(\strip@pt\@ATrl,\strip@pt\@ATunit)%
+ (\strip@pt\@ATrl,\strip@pt\@ATrr)\else%
+ \@ATwt.5\ATpathunitlength%
+ \@ATwl\@ATbl\advance\@ATwl\@ATwt%
+ \@ATwr\@ATrr\advance\@ATwr2\@ATwt%
+ \dottedline{3}(\strip@pt\@ATbl,\strip@pt\@ATrr)%
+ (\strip@pt\@ATwl,\strip@pt\@ATwr)%
+ \advance\@ATbl\@ATwt\advance\@ATrr2\@ATwt%
+ \@ATlen\@ATbl\advance\@ATlen-\@ATrl%
+ \@ATwl\@ATbl\advance\@ATwl-\@ATlen%
+ \dottedline{3}(\strip@pt\@ATbl,\strip@pt\@ATrr)%
+ (\strip@pt\@ATwl,\strip@pt\@ATrr)%
+ \dottedline{3}(\strip@pt\@ATrl,\strip@pt\@ATunit)%
+ (\strip@pt\@ATrl,\strip@pt\@ATrr)\fi\fi%
+ \end{picture}}%
+ \setbox\@ATpathlinebox\hbox{%
+ \box\@ATu\kern-\@ATlen\box\@ATpathlinebox}}