diff options
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty | 312 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty | 271 |
2 files changed, 583 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty b/Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty new file mode 100644 index 00000000000..829effe52cc --- /dev/null +++ b/Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty @@ -0,0 +1,312 @@ +% Lingmacros +% include +% \enumsentence, \eenumsentence, \ex +% \smalltree +% \shortex, \shortexnt (\shortexdt no longer needed) +% \clap, \ollap, \orlap, \oclap on analogy with \rlap and \llap +% \outerfs + +% this file created 1/23/89 by Emma Pease, CSLI +% modified 4/1/91 by Emma Pease +% some comments added 8/25/94 by Emma Pease + +%Note (for those who use jbmacros): +% (a) the enumsentence macro is very similar to the \example command +% in jbmacros; however, it does not have the annoying habit of leaving +% the example number on one page and the example on the next (some +% jbmacros don't have this problem). The eenumsentence macro is very +% similar to the \examples macro. +% (b) \ex may be different + +% the enumsentence macro. +% +% \enumsentence{This is an example} +% produces +% (1) This is an example +% while +% \enumsentence[(a)]{This is another example} +% produces +% (a) This is another example +% +% A related macros is +% \eenumsentence{\item[a.] A third example +% \item[b.] A fourth example} +% which produces +% (2) a. A third example +% b. A fourth example +% +% other macro is \ex{1} which produces the number of the following +% enumsentence (\ex{0} produces number of preceeding enumsentence and +% so on.) +% +% The standard \label command also works within \enumsentence and +% \eenumsentence. +% +% the \enumsentence counter. +\newcounter{enums} + +% Use the command +% +% \@addtoreset{enums}{chapter} +% +% if you wish it to automatically reset counting at the start of each chapter. +% Since this is a \@ command you will need to surround it by +% \makeatletter ... \makeatother +% if it is in your document proper instead of a style file +% do not use these commands if the \@addtoreset is in a style file or +% things will break. + + +% \widelabel is defined for use when the width of the enumsentence or +% eenumsentence number is wider than 20pt (default labelwidth). As a +% rule of thumb if your enumerated sentences are only 1 or 2 digit +% you don't need to worry. At 3 digits, set \widelabel to 2.78pt at 4 +% digits set to 7.78pt. + +\newdimen\widelabel +\widelabel=0pt + + +\def\enumsentence{\@ifnextchar[{\@enumsentence}% %] +{\refstepcounter{enums}\@enumsentence[(\theenums)]}} + +\long\def\@enumsentence[#1]#2{\begin{list}{}{% +\advance\leftmargin by\widelabel \advance\labelwidth by \widelabel} +\item[#1] #2 +\end{list}} + +% The \ex definition +\newcounter{tempcnt} + +\newcommand{\ex}[1]{\setcounter{tempcnt}{\value{enums}}% +\addtocounter{tempcnt}{#1}% +\arabic{tempcnt}} + +% modified \@item command \unhbox\@tempboxa replaces \makelabel{#1} +% Used to get \eenumsentence to work correctly +\def\@item[#1]{\if@noparitem \@donoparitem + \else \if@inlabel \indent \par \fi + \ifhmode \unskip\unskip \par \fi + \if@newlist \if@nobreak \@nbitem \else + \addpenalty\@beginparpenalty + \addvspace\@topsep \addvspace{-\parskip}\fi + \else \addpenalty\@itempenalty \addvspace\itemsep + \fi + \global\@inlabeltrue +\fi +\everypar{\global\@minipagefalse\global\@newlistfalse + \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels + \penalty\z@ \fi + \everypar{}}\global\@nobreakfalse +\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi +\setbox\@tempboxa\hbox{\makelabel{#1}}% +\global\setbox\@labels + \hbox{\unhbox\@labels \hskip \itemindent + \hskip -\labelwidth \hskip -\labelsep + \ifdim \wd\@tempboxa >\labelwidth + \box\@tempboxa + \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi + \hskip \labelsep}\ignorespaces} + +% for enumerated enumsentences. Internal enumeration is alpha if not +% otherwise defined. + +% counter for items within \eenumsentence. (might use enumi instead?) +\newcounter{enumsi} + +% \eenumsentence{\item[a.] A third \label{bar}example \toplabel{foo} +% \item[b.] A fourth \label{baz}example} +% Testing references \ref{foo}, \ref{bar}, and \ref{baz}. +% which produces +% (3) a. A third example +% b. A fourth example +% Testing references 3, 3a, and 3b. + +% To ensure that labels in \eenumsentence come out right. +% +\def\theenumsi{\theenums\alph{enumsi}} +\newdimen\eeindent +\eeindent=15pt +% changes \leftmargin increased by \eeindent +% \labelwidth increased by \eeindent +% .. .. .leftmargin.. .. .. .. .. +% oldlabelwidth eeindent labelsep actual entry +% 20pt 15pt 5pt +% (enumlabel) eelabel +% eelabel + +\def\@mklab#1{\hfil#1} +\def\enummklab#1{\hfil(\eelabel)\hbox to \eeindent{\hfil#1}} +\def\enummakelabel#1{\enummklab{#1}\global\let\makelabel=\@mklab} +\def\toplabel#1{{\edef\@currentlabel{\p@enums\theenums}\label{#1}}} + +\def\eenumsentence{\@ifnextchar[{\@eenumsentence}% %] +{\refstepcounter{enums}\@eenumsentence[\theenums]}} + +\long\def\@eenumsentence[#1]#2{\def\eelabel{#1}\let\holdlabel\makelabel% +\begin{list}{\alph{enumsi}.}{\usecounter{enumsi}% +\advance\leftmargin by \eeindent \advance\leftmargin by \widelabel% +\advance\labelwidth by \eeindent \advance\labelwidth by \widelabel% +\let\makelabel=\enummakelabel} +#2 +\end{list}\let\makelabel\holdlabel} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% smalltree +% use +% \smalltree{& &a\\ +% &b& &c\\ +% d& &e& &f} +% produces +% a +% b c +% d e f + + +\long\def\smalltree#1{\leavevmode{\def\\{\cr\noalign{\vskip12pt}}% +\def\mc##1##2{\multispan{##1}{\hfil##2\hfil}}% +\tabskip=1em% +\hbox{\vtop{\halign{&\hfil##\hfil\cr +#1\crcr}}}}} + +% modsmalltree +% use +% \modsmalltree{3}{&&a\\ &b&&c\\ d&&e&&f} +% and produces the same output +% \mc{n}{item} within either will produce item centered across n +% number of columns +% \modsmalltree[arraystretch]{num of cols}{argument} +% +\def\modsmalltree{\@ifnextchar[{\@modsmalltree}{\@modsmalltree[2]}} + +\long\def\@modsmalltree[#1]#2#3{{\def\mc##1##2{% +\multicolumn{##1}{c}{\def\arraystretch{1}##2}}% +\def\arraystretch{#1}% +\def\ns{\def\arraystretch{1}}% +\setbox0=\hbox{\begin{tabular}[t]{@{}*{#2}{c}@{}} +#3 +\end{tabular}}% +\dimen0=\ht0 +\advance\dimen0 by -\arraystretch \ht\strutbox +\advance\dimen0 by \ht\strutbox +\ht0=\dimen0 +\dimen0=\dp0 +\advance\dimen0 by -\arraystretch \dp\strutbox +\advance\dimen0 by \dp\strutbox +\dp0=\dimen0 +\leavevmode\box0}} + +% center lap creates a box of 0 width centered on the point +\def\clap#1{\hbox to 0pt{\hss#1\hss}} +%The first argument in both of these commands is the distance above the +%baseline desired. The second is what is the actual text. +% over right lap +\def\orlap#1#2{\vbox to0pt{\vss\hbox to 0pt{#2\hss}\hbox{\vrule height#1 +width0pt depth0pt}}} +% over left lap +\def\ollap#1#2{\vbox to0pt{\vss\hbox to 0pt{\hss#2}\hbox{\vrule height#1 +width0pt depth0pt}}} +% over center lap +\def\oclap#1#2{\vbox to0pt{\vss\hbox to 0pt{\hss#2\hss}\hbox{\vrule height#1 +width0pt depth0pt}}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% need to be modified? + +% Format +% \shortex{4}{a & b & c & d} +% {z & y & x & w} +% {mnop} +% produces +% a b c d +% z y x w +% mnop +% +% \shortexdt takes two gloss lines +% \shortexnt takes no gloss lines + +\def\shortex#1#2#3#4{\begin{tabular}[t]{@{}*{#1}{l@{\ }}} +#2\\ #3\\ \multicolumn{#1}{@{}l@{}}{\parbox{\linewidth}{#4}} +\end{tabular}} + +%\def\shortexdt#1#2#3#4#5{\begin{tabular}[t]{@{}*{#1}{l@{\ }}} +%#2\\ #3\\ \multicolumn{#1}{@{}l@{}}{#4}\\ +%\multicolumn{#1}{@{}l@{}}{#5} +%\end{tabular}} + +\def\shortexnt#1#2#3{\begin{tabular}[t]{@{}*{#1}{l@{\ }}} +#2\\ #3 +\end{tabular}} + +%%%%%%%%% +% Long-example macros +% +% \longex{4}{2} +% {a & b & c & d}{e & f} +% {z & y & x & w}{v & u} +% {mnopqrs} +% produces +% a b c d +% z y x w +% e f +% v u +% mnopqrs +% +% \longexdt takes two translation lines +% \longexnt takes no translation lines +% \longex can also handle multiple translations, as can \shortex above. + +\def\longex#1#2#3#4#5#6#7{\begin{tabular}[t]{@{}l} + \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}} + #3\\ #5 \end{tabular}\vspace{.5ex}\\ + \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}} + #4\\ #6\\[.5ex] \multicolumn{#2}{@{}l@{}}{\begin{tabular}[t]{@{}l@{}} + #7 \end{tabular}} \end{tabular} \end{tabular}} + +\def\longexdt#1#2#3#4#5#6#7#8{\begin{tabular}[t]{@{}l} + \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}} + #3\\ #5 \end{tabular}\vspace{.5ex}\\ + \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}} + #4\\ #6\\[.5ex] \multicolumn{#2}{@{}l@{}}{#7}\\ + \multicolumn{#2}{@{}l@{}}{#8} + \end{tabular} \end{tabular}} + +\def\longexnt#1#2#3#4#5#6{\begin{tabular}[t]{@{}l} + \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}} + #3\\ #5 \end{tabular}\vspace{.5ex}\\ + \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}} + #4\\ #6 \end{tabular} \end{tabular}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% need to create equivalent of AVM structures. + +% Structure is +% \outerfs{alpha & beta\\ gamma & delta} +% produces +% __ __ +% | alpha beta | +% | gamma delta | +% -- -- +% +% \outerfs can be nested. +% inside of enumsentence use with \evnup[2pt]{\outerfs{. . .}} +% to ensure that top of fs structure lines up with the number +% +% Note that you can use \\[1ex] to increase the space between +% individual lines + +\def\outerfs#1{$\left[\begin{tabular}{ll}#1\end{tabular}\right]$} + +% \evnup is used to line up the enumsentence number and an entry along +% the top. It can take an argument to improve lining up. +\def\evnup{\@ifnextchar[{\@evnup}{\@evnup[0pt]}} + +\def\@evnup[#1]#2{\setbox1=\hbox{#2}% +\dimen1=\ht1 \advance\dimen1 by -.5\baselineskip% +\advance\dimen1 by -#1% +\leavevmode\lower\dimen1\box1} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% End of main lingmacros +% diff --git a/Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty b/Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty new file mode 100644 index 00000000000..31218352a85 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty @@ -0,0 +1,271 @@ +% how to run. +% \input tree.sty or \documentstyle[tree]{..} +% run through latex as you normally do +% remember to send it to a postscript printer + +% Written by Emma Pease +% Modified by Avery Andrews May 1992 +% Modifications suggested by Gintautas Grigelionis +% (gintas@theophys.kth.se) added May 1995 +% arrows fixed on anodeconnect and aanodeconnect added May 1995 by Emma + +% to do, fix barnodeconnect arrows +% clean up code + +%% version .91 - May 16, 1995 +\typeout{tree-dvips version .91 of May 16, 1995} + +% This ensures that the header file for postscript is inserted. Note +% that extracting pages with dvips will keep this header file but that +% extracting with dviselect will not unless the absolute first page is +% included. +\special{header=tree-dvips91.pro} + + +% The \pscmd command insures that all things in the postscript are +% properly bracketed. Also included are the current parameters for +% nodemargin, width of lines, dashlength, arrow width, length, and inset. + +\def\pscmd#1{\special{ps:@beginspec% +/nodemargin \@int{\the\nodemargin}\space pt def % +\@int{\the\treelinewidth}\space pt setlinewidth % +\ifdim\dashlength=0pt [] 0 setdash% +/arrowwidth \@int{\the\arrowwidth}\space pt def % +/arrowlength \@int{\the\arrowlength}\space pt def % +/arrowinset \@int{\the\arrowinset}\space pt def % +\else [\@int{\the\dashlength}\space pt] 0 setdash \fi\space #1 % +@endspec}} + +% \@int ensures that the numbers are passed down to the printer +% correctly. +{\catcode`p=12 \catcode`t=12 \gdef\wnum#1pt{#1}} +\def\@int#1{\expandafter\wnum#1} + + +% PARAMETERS IN TREE MODE + +% nodemargin is the extra margin around the hbox enclosing the node. +% treelinewidth is the width of the lines +% dashlength is the length of the dashes + +\newdimen\nodemargin % +\nodemargin=2pt + +\newdimen\treelinewidth +\treelinewidth=.3pt + +\newdimen\dashlength +\dashlength=0pt + +% * _ +% * +% * * arrowwidth +% * +% * _ +% | | arrowlength +% | | arrowinset + +% arrowwidth + +\newdimen\arrowwidth +\arrowwidth 3pt + +\newdimen\arrowlength +\arrowlength 4pt + +\newdimen\arrowinset +\arrowinset 1pt + +% Some commands to manipulate parameters + +\def\thinline{\treelinewidth=.3pt} + +% \makedash{dimen} makes dashes of dimen length if dimen = 0pt then +% solid line +\def\makedash#1{\dashlength=#1} + +\def\arrowhead#1#2#3{\arrowwidth#1\arrowlength#2\arrowinset#3} + + +% NODE COMMANDS + +% A node defines a region of the page with a height, depth, width, and +% location of the lower left hand corner + +\def\node#1#2{\leavevmode + \setbox1=\hbox{#2}\pscmd{/#1 \@int{\the\wd1} \space pt + \@int{\the\ht1} \space pt + \@int{\the\dp1} \space pt + node}\box1\relax} + + +% nodepoint is a specialized node with 0pt width, height, and depth +% Unlike \node is can be displaced. +% \nodepoint{nodename}[horizontal displacement][vertical displacement] +% default is current point +\def\nodepoint#1{\@ifnextchar [{\@nodepoint{#1}}{\@nodepoint{#1}[0pt][0pt]}} + +\def\@nodepoint#1[#2][#3]{{\@tempdima=#2 \@tempdimb=#3% +\pscmd{/nodemargin 0 def % +/#1 \@int{\the\@tempdima}\space pt \@int{\the\@tempdimb}\space pt % +rmoveto 0 0 0 node}}} + + + + +\newtoks\pos@t \pos@t={top} +\newtoks\pos@b \pos@b={bottom} +\newtoks\pos@l \pos@l={left} +\newtoks\pos@r \pos@r={right} +\newtoks\pos@tl \pos@tl={topleft} +\newtoks\pos@tr \pos@tr={topright} +\newtoks\pos@bl \pos@bl={bottomleft} +\newtoks\pos@br \pos@br={bottomright} + + +% COMMANDS FOR CONNECTING NODES + +% nodeconnect commands +% \nodeconnect +% \anodeconnect - arrow at toloc +% \aanodeconnect - arrow at both ends +% arguments are [fromloc]{fromnode}[toloc]{tonode} + +% \nodeconnect[fromloc]{fromnode}[toloc]{tonode} +\def\nodeconnect{\@ifnextchar [{\@nodeconnect}{\@nodeconnect[b]}} +\def\@nodeconnect[#1]#2{\@ifnextchar [{\@@nodeconnect[#1]{#2}}{\@@nodeconnect[#1]{#2}[t]}} + +\def\@@nodeconnect[#1]#2[#3]#4{\pscmd{% +/#2 getnode node\the\csname pos@#1\endcsname \space% +/#4 getnode node\the\csname pos@#3\endcsname\space nodeconnect}} + +% \delink[fromloc]{fromnode}[toloc]{tonode}{length} +% places a bar of length perpendicular to and halfway along the line +% connecting the two locations. +\def\delink{\@ifnextchar [{\@delink}{\@delink[b]}} +\def\@delink[#1]#2{\@ifnextchar [{\@@delink[#1]{#2}}{\@@delink[#1]{#2}[t]}} + +\def\@@delink[#1]#2[#3]#4#5{\@tempdima=#5% +\pscmd{/blong \@int{\the\@tempdima} \space pt def% +/#2 getnode node\the\csname pos@#1\endcsname \space% +/#4 getnode node\the\csname pos@#3\endcsname\space delink}} + + +% \anodeconnect[fromloc]{fromnode}[toloc]{tonode} +% The tonode has an arrow pointing to it +\def\anodeconnect{\@ifnextchar [{\@anodeconnect}{\@anodeconnect[b]}} +\def\@anodeconnect[#1]#2{\@ifnextchar [{\@@anodeconnect[#1]{#2}}{\@@anodeconnect[#1]{#2}[t]}} + +\def\@@anodeconnect[#1]#2[#3]#4{\pscmd{% +/#2 getnode node\the\csname pos@#1\endcsname \space% +/#4 getnode node\the\csname pos@#3\endcsname\space arrownodeconnect}} + +% \aanodeconnect[fromloc]{fromnode}[toloc]{tonode} +% double arrowed line +\def\aanodeconnect{\@ifnextchar [{\@aanodeconnect}{\@aanodeconnect[b]}} +\def\@aanodeconnect[#1]#2{\@ifnextchar [{\@@aanodeconnect[#1]{#2}}{\@@aanodeconnect[#1]{#2}[t]}} + +\def\@@aanodeconnect[#1]#2[#3]#4{\pscmd{% +/#2 getnode node\the\csname pos@#1\endcsname \space% +/#4 getnode node\the\csname pos@#3\endcsname\space doublearrownodeconnect}} + + +% nodecurve commands +% nodecurve... no arrow +% anodecurve.. arrow at to +% aanodecurve.. arrows at to and from +% arguments: +% \..[fromloc][fromang]{fromnode}[toloc][toang]{tonode}{fdepth}[tdepth] +% defaults +% fromloc [b] +% toloc [t] +% fromang 0 (in degrees) direction is calculated counterclockwise +% toang 0 (in degrees) direction is calculated counterclockwise +% tdepth same as fdepth + + +% nodecurve commands set value of \@arrow, then invoke \nodecurve@ + +\newcount\@arrow +\newdimen\@tempdimc + +\def\nodecurve{\@arrow=0\nodecurve@} +\def\anodecurve{\@arrow=1\nodecurve@} +\def\aanodecurve{\@arrow=2\nodecurve@} +\def\delinkcurve#1{\@tempdimc=#1% +\@arrow=3\nodecurve@} + +\def\nodecurve@{\@ifnextchar [{\@nodecurve@}{\@nodecurve@[b]}} + +\def\@nodecurve@[#1]{\@ifnextchar [{\a@nodecurve@[#1]}{\a@nodecurve@[#1][0]}} + +\def\a@nodecurve@[#1][#2]#3{\@ifnextchar [{\@a@nodecurve@[#1][#2]{#3}}% +{\@a@nodecurve@[#1][#2]{#3}[t]}} + +\def\@a@nodecurve@[#1][#2]#3[#4]{\@ifnextchar [{\a@a@nodecurve@[#1][#2]#3[#4]}% +{\a@a@nodecurve@[#1][#2]#3[#4][0]}} + +\def\a@a@nodecurve@[#1][#2]#3[#4][#5]#6#7{\@ifnextchar [% +{\@a@a@nodecurve@[#1][#2]{#3}[#4][#5]{#6}{#7}}% +{\@a@a@nodecurve@[#1][#2]{#3}[#4][#5]{#6}{#7}[#7]}} + +\def\@a@a@nodecurve@[#1][#2]#3[#4][#5]#6#7[#8]{\@tempdima=#7% +\@tempdimb=#8% +\@tempdimc=10pt% +\pscmd{/depth \@int{\the\@tempdimb} \space pt def % + /toangle \space #5 \space def % + /fromangle \space #2 \space def % + /#6 \the\csname pos@#4\endcsname cur\space % + /depth \@int{\the\@tempdima} \space pt def % + /#3 \the\csname pos@#1\endcsname cur\space % + \ifnum\@arrow=0 nodecurve \else % select & invoke PS command + \ifnum\@arrow=1 arrownodecurve \else + \ifnum\@arrow=2 arrow2nodecurve \else + /blong \@int{\the\@tempdimc} \space pt def + delinkcurve + \fi\fi\fi}} + + + +% above is well tested below is not +\newif\iftransparent + +\def\nodebox#1{\pscmd{/#1 nodebox}} +\def\nodeoval#1{\pscmd{/#1 nodeoval}} +\def\nodetriangle#1#2{\pscmd{/#1 /#2 nodetriangle}} + +% \nodecircle[depth]{nodename} + +\def\nodecircle{\@ifnextchar [ {\@nodecircle}{\@nodecircle[0pt]}} + +\def\@nodecircle[#1]#2{\@tempdima=#1% +\iftransparent +\pscmd{\@int{\the\@tempdima}\space pt /#2 nodecircletrans} +\else +\pscmd{\@int{\the\@tempdima}\space pt /#2 nodecircle}\fi} + + +% \barnodeconnect[depth]{fromnode}{tonode} +\def\barnodeconnect{\@ifnextchar[ {\@barnodeconnect}{\@barnodeconnect[5pt]}} + +\def\@barnodeconnect[#1]#2#3{\@tempdima=#1 \ifdim\@tempdima<0pt +\pscmd{\@int{\the\@tempdima}\space pt % +/#2 getnode nodebottom /#3 getnode nodebottom barnodeconnect} +\else +\pscmd{\@int{\the\@tempdima}\space pt % +/#2 getnode nodetop /#3 getnode nodetop barnodeconnect} +\fi} + +\def\abarnodeconnect{\@ifnextchar[ {\@abarnodeconnect}{\@abarnodeconnect[5pt]}} + +\def\@abarnodeconnect[#1]#2#3{\@tempdima=#1 \ifdim\@tempdima<0pt +\pscmd{\@int{\the\@tempdima}\space pt % +/#2 getnode nodebottom /#3 getnode nodebottom arrowbarnodeconnect} +% above replaces the line below. +% /#2 getnode nodebottom /#3 getnode nodebottom abarnodeconnect} +\else +\pscmd{\@int{\the\@tempdima}\space pt % +/#2 getnode nodetop /#3 getnode nodetop arrowbarnodeconnect} +\fi} + + |