diff options
author | Karl Berry <karl@freefriends.org> | 2006-08-29 23:27:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-08-29 23:27:23 +0000 |
commit | 52c5752835be16a555db8aa4d16c9d8145a4b787 (patch) | |
tree | 3aaf510312f9a2f8be39467a92c54e59ebf54816 /Master/texmf-dist/tex/latex/xytree | |
parent | 548fa78323f6d198c6a75751133237e13b21b551 (diff) |
new latex package xytree (16feb06)
git-svn-id: svn://tug.org/texlive/trunk@2065 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/xytree')
-rw-r--r-- | Master/texmf-dist/tex/latex/xytree/xytree.sty | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/xytree/xytree.sty b/Master/texmf-dist/tex/latex/xytree/xytree.sty new file mode 100644 index 00000000000..29adb6e0302 --- /dev/null +++ b/Master/texmf-dist/tex/latex/xytree/xytree.sty @@ -0,0 +1,367 @@ +\NeedsTeXFormat{LaTeX2e} +%%% +%%% xytree.sty +%%% +%%% Ver 1.0 xytree.sty written by Koaunghi Un <2004/08/10> +%%% Ver 1.1 modified by Koaunghi Un <2004/11/05> +%%% \barnodeconnect with label +%%% Ver 1.2 added two new macros by Koaunghi Un <2004/12/20> +%%% \yytree: a new tree macro +%%% \xynodefont: font changing macro for all nodes in \xytree +%%% and \yytree. +%%% Ver 1.3 added three new macros by Koaunghi Un <2006/02/27> +%%% for drawing diagrams for Discourse Representation Structure +%%% \drsbox: with referent and predicate +%%% \drsrectbox: only for predicate +%%% \drsdiabox: diamond-shaped box for DRS conditions. +%%% Ver 1.4 Bug fixed by Koaunghi Un <2006/03/07> +%%% \drop'ing a frame after \xytrinode shifted the reference +%%% point to the lower right corner of the triangle. +%%% Ver 1.5 correct font change of \xyterminal by Koaunghi Un <2006/08/15> +%%% italic font shape of \xyterminal after \\ +%%% + +\ProvidesPackage{xytree}[2006/8/15 Pacakge for drawing trees] +\typeout{`xytree.sty' package v1.5 for drawing trees.} + +\RequirePackage[all]{xy} + +%% +%% \xytree[column spacing in pc]{matrix} +%% ------- +%% A tree is a simple macro of the form "\xytree{...}" +%% It is an xymatrix, with "&" as column separator and "\\" as row +%% separator: +%% +%% \rowheight: sets row spacing. +%% + +\newdimen\rowheight\newdimen\XyColumnSpacing \rowheight2pc +\makeatother +\newcommand{\xytree}[2][0.5]{\XyColumnSpacing=#1pc\relax% + \ifdim\XyColumnSpacing>0pt\relax\else\XyColumnSpacing=0.01.pc\fi% + \rule{0pt}{0pt}% + \xymatrix @R=\rowheight @!C=\XyColumnSpacing @M=0pc {#2}} +\makeatletter + +%% +%% \xyconnect[line shape] +%% [line bend] +%% (source corner, target corner) +%% {target row, target col} +%% "label" +%% + +\def\xyconnect{\@ifnextchar[{\n@deconnect}{\n@deconnect[-]}}%] +\def\n@deconnect[#1]{\@ifnextchar[{\n@dec@nnect[#1]}%] + {\n@dec@nnect[#1][\empty]}} +\def\n@dec@nnect[#1][#2]{\@ifnextchar({\n@d@c@nnect[#1][#2]}%) + {\n@d@c@nnect[#1][#2](D,U)}} +\def\n@d@c@nnect[#1][#2](#3)#4{\@ifnextchar"{\connectwitharrow[#1][#2](#3)#4}% + {\connectwitharrow[#1][#2](#3)#4""}} +\makeatother +\def\connectwitharrow[#1][#2](#3,#4)#5"#6"{% + \ifx\empty#2\relax + \ar @{#1} []+#3;[#5]+#4 #6 + \else + \ar @{#1} @/#2/ []+#3;[#5]+#4 #6 + \fi} +\makeatletter + +\def\labelstyle{\hbox} +\def\ind#1{{\fboxsep1pt\fbox{\small#1}}} + +\def\@drawlines#1,#2\relax{% + \xyconnect{1,#1}% + \ifx#2\@empty\else\@drawlines#2\relax\fi% +} + +%% +%% Tree Node +%% +%% \xynode[connecting nodes delimited by ,]{entry} +%% \xytrinode[+/-triangle width]{entry} +%% \xyterminal{entry} +%% +%% Following code +%% \xynode{ & xynode[-1,1]{S} \\ +%% \xynode[0]{NP} & & \xytrinode{VP} \\ +%% \xyterminal{I} & & \xyterminal{ate an apple} +%% } +%% will draw following tree diagram: +%% S +%% /\ +%% / \ +%% / \ +%% NP VP +%% | /\ +%% | / \ +%% | ____ +%% I ate an apple +%% with the terminal nodes written in italic shape. +%% Lines are drawn with the macro \xyconnect defined above. +%% + +\def\xynode{\@ifnextchar[{\xyn@de}{\xyn@de[]}}%] +\def\xyn@de[#1]#2{{\txt{{\strut\xyn@def@nt #2}}}% + \ifx#1\@empty\else\expandafter\@drawlines#1,\relax\fi} +\newcommand{\xytrinode}[2][0]{{\txt{{\strut#2}}} + \POS[]+D;\POS[d]+UL\POS-(#1,0)**\dir{-}% + \POS[]+D;\POS[d]+UR\POS+(#1,0)**\dir{-}% + \POS[]\POS[d]+UL\POS-(#1,0);\POS[]\POS[d]+UR\POS+(#1,0)**\dir{-};\POS[]} +\newcommand{\xyterminal}[1]{\textit{\txt{\strut #1}}} + +%% +%% \xytext +%% ------- +%% For morph-syntactic agrement "\xytext{...}" is used in place of "\xytree" +%% It is \xytree with one column: +%% + +\makeatother +\newcommand{\xytext}[1]{\raisebox{3pt}{\def\objectstyle{\hbox}% + \xymatrix @C=1ex @M=0pt {#1}}\hspace{-2pt}} +\makeatletter + +%% +%% \xybarconnect[line displacement] +%% [line shape] +%% (source corner, target corner) +%% {target row, target col} +%% "label" +%% + +\def\xybarconnect{\@ifnextchar[%] + {\b@rconnect}{\b@rconnect[3]}} +\def\b@rconnect[#1]{\@ifnextchar[%] + {\b@rc@nnect[#1]}{\b@rc@nnect[#1][->]}} +\def\b@rc@nnect[#1][#2]{\@ifnextchar(%) + {\b@rc@nn@ct[#1][#2]}{\b@rc@nn@ct[#1][#2](U,U)}} +\def\b@rc@nn@ct[#1][#2](#3,#4)#5{\@ifnextchar"% + {\b@rc@nn@ct@[#1][#2](#3,#4)#5}% + {\b@rc@nn@ct@[#1][#2](#3,#4)#5""}} +\def\b@rc@nn@ct@[#1][#2](#3,#4)#5"#6"{% + \edef\reserved@a{% + \csname c@rner@#3\endcsname#1\relax/% + \csname c@rner@#4\endcsname#1\relax}% + \expandafter\DrawHorizontal\reserved@a/#1/#2/#3/#4/#5/#6\end\ignorespaces} +\def\c@rner@U#1\relax{#1} +\let\c@rner@UL\c@rner@U +\let\c@rner@UR\c@rner@U +\let\c@rner@R\c@rner@U +\def\c@rner@D#1\relax{-#1} +\let\c@rner@DR\c@rner@D +\let\c@rner@DL\c@rner@D +\let\c@rner@L\c@rner@D +\makeatother +\def\DrawHorizontal#1/#2/#3/#4/#5/#6/#7/#8\end{% + \ar @{#4} '[0,0]+#5 '[0,0]+#5+(0,#1) '[0,#7]+#6+(0,#2)#8 [0,#7]+#6 +} +\makeatletter + +%% +%% \xybarnode{entry} +%% +%% Following codes +%% AGR \xytext{\xybarnode{Det}\xybarconnect{1} & \xybarnode{head-noun} & verb} ... +%% will draw following diagram: +%% ______ +%% | | +%% | \/ +%% AGR Det head-noun verb ... +%% + +\newcommand{\xybarnode}[1]{\strut#1\ignorespaces} + +%% +%% \yytree[indentation in pc]{matrix} +%% ------- +%% +%% A \yytree is an another tree drawing macro of the form "\yytree{...}" +%% It is an xymatrix, with "&" as column separator and "\\" as row +%% separator: +%% + +\makeatother +\newcommand{\yytree}[2][2]{% + \rule{0pt}{0pt}% + \xymatrix @!0 @C=#1pc @R=1.5pc @W=0pc @*[r] {#2} +} +\makeatletter + +%% +%% \yynode[daughter nodes delimited by ,]{entry} +%% ------- +%% +%% For example +%% \yytree{ \yynode[1,4]{top} \\ +%% & \yyode[1,2]{A} \\ +%% & & \yynode{Aa} \\ +%% & & \yynode{Ab} \\ +%% & \yynode[1]{B} \\ +%% & & \yynode{Ba} +%% } +%% will produce the following tree: +%% top +%% |-- A +%% | |-Aa +%% | |-Ab +%% |-- B +%% |-Ba +%% with proper bending line for the last daughter node. +%% + +\def\yynode{\@ifnextchar[{\yyn@de}{\yyn@de[]}}%] +\def\yyn@de[#1]#2{{\txt{{\xyn@def@nt #2}}}% + \@tempcnta=0 + \ifx#1\@empty\else\expandafter\@yylines#1,\relax\fi% + \ifnum\@tempcnta>0 + \edef\reserved@a{\noexpand\POS[]+D+(1,0);[\the\@tempcnta,0]+(1,0)**\noexpand\dir{-}}% + \reserved@a\fi +} + +\def\@yylines#1,#2\relax{% + \POS[#1,0]+(1,0);[#1,1]+L **\dir{-}% + \@tempcnta=#1 + \ifx#2\@empty\else\@yylines#2\relax\fi% +} + +%% +%% \xynodefont +%% ----------- +%% Default font for node entries in \xytree and \yytree. +%% This is initially set to be empty, which is the same as \rmfamily +%% \xynodefont{\itshape} typeset all node entries in italic shape. +%% + +\def\xynodefont#1{\def\xyn@def@nt{#1}} +\xynodefont{} + +%%% +%%% Discourse Representation Structure +%%% +%% This is not related with linguistic trees, but because no other +%% packages provide a convenient way to draw DRS diagram without the +%% help of pstricks, these three macros for drawing DRS diagram are +%% added here. They use also Xy-pic feature to construct boxes. +%% + +\newdimen\drs@wd\newdimen\drs@ht\newdimen\drsboxsep +\drsboxsep6pt +\newbox\drs@boxa\newbox\drs@boxb + +%% +%% \drsbox[line art]{referent}{predicate} +%% ------- +%% [line art] : optional. specifies the art of lines. All \dir +%% directionals of Xy-pic kernel library can be used (not \dir2, +%% \dir3, \dir_, \dir^ directionals) +%% referent: +%% predicate: +%% + +%% ------------ +%% | x | +%% ------------ +%% | | +%% | donkey(x)| +%% | green(x) | +%% | | +%% ------------ + +\newcommand{\drsbox}[3][-]{% + \begin{tabular}{l}\tabcolsep0pt + \itshape + \setbox\drs@boxa\hbox{\begin{tabular}{l}#2\end{tabular}}% + \drs@wd=\wd\drs@boxa + \drs@ht=\ht\drs@boxa\advance\drs@ht by\dp\drs@boxa + \setbox\drs@boxb\hbox{\begin{tabular}{l}#3\end{tabular}}% + \ifdim\drs@wd<\wd\drs@boxb\drs@wd\wd\drs@boxb\fi + \advance\drs@ht by\ht\drs@boxb \advance\drs@ht by\dp\drs@boxb + \divide\drs@ht by2 + \advance\drs@ht by1.5\drsboxsep + \wd\drs@boxa=\drs@wd\wd\drs@boxb=\drs@wd + \ifdim\ht\drs@boxa<\bigskipamount\ht\drs@boxa=\bigskipamount\fi + \xy + <0pt,0pt>*\hbox{\box\drs@boxb}="b"; + <0pt,\drs@ht>*\hbox{\box\drs@boxa}="a"; + "a"+LU+<-\drsboxsep,.5\drsboxsep>; + "a"+RU+<\drsboxsep,.5\drsboxsep>**\dir{#1}; + "b"+RD+<\drsboxsep,-\drsboxsep>**\dir{#1}; + "b"+LD+<-\drsboxsep,-\drsboxsep>**\dir{#1}; + "a"+LU+<-\drsboxsep,.5\drsboxsep>**\dir{#1}; + "b"+LU+<-\drsboxsep,\drsboxsep>;"b"+RU+<\drsboxsep,\drsboxsep>**\dir{#1}; + \endxy + \end{tabular}} + +%% +%% \drsrectbox[line art]{content} +%% ----------- +%% + +%% ------------- +%% | | +%% | man(u) | +%% | unicorn(u)| +%% | seeks(u,v)| +%% | | +%% ------------- + +\newcommand{\drsrectbox}[2][-]{% + \begin{tabular}{l}\tabcolsep0pt + \itshape + \xy + *\hbox{\begin{tabular}{l}#2\end{tabular}}="a"; + "a"+LD+<-\drsboxsep,-\drsboxsep>; + "a"+LU+<-\drsboxsep,\drsboxsep>**\dir{#1}; + "a"+RU+<\drsboxsep,\drsboxsep>**\dir{#1}; + "a"+RD+<\drsboxsep,-\drsboxsep>**\dir{#1}; + "a"+LD+<-\drsboxsep,-\drsboxsep>**\dir{#1}; + \endxy + \end{tabular}} + +%% +%% \drsdiabox[line art]{conditions} +%% ---------- +%% + +%% /\ +%% / \ +%% / \ +%% / \ +%% / \ +%% / every \ +%% \ x / +%% \ / +%% \ / +%% \ / +%% \ / +%% \/ + +\newcommand{\drsdiabox}[2][-]{% + \begin{tabular}{l}\tabcolsep0pt + \itshape + \setbox\drs@boxa\hbox{\begin{tabular}{c}#2\end{tabular}}% + \@tempdima=\wd\drs@boxa + \@tempdima=.5\wd\drs@boxa + \advance\@tempdima by.5\ht\drs@boxa + \advance\@tempdima by.5\drsboxsep + \xy + *\hbox{\box\drs@boxa}="a"; + "a"+<-\@tempdima,0pt>; + "a"+<0pt,\@tempdima>**\dir{#1}; + "a"+<\@tempdima,0pt>**\dir{#1}; + "a"+<0pt,-\@tempdima>**\dir{#1}; + "a"+<-\@tempdima,0pt>**\dir{#1}; + \endxy + \end{tabular}} + +%%% +%%% Autosegmental Representation +%%% ---------------------------- +%%% + + +\def\asrnode#1{\txt{\strut#1}} + +\endinput |