%%% File covington.sty %%% %%% Michael A. Covington %%% Artificial Intelligence Programs %%% The University of Georgia %%% Athens, Georgia 30602-7415 USA %%% mcovingt@aisun1.ai.uga.edu %%% %%% You may copy and distribute this file freely. %%% (If you modify it, please change its name and add your own comments.) %%% %%% See covington.tex for documentation. \typeout{* covington.sty : Covington's linguistic macros, 2001 March 27 *} %%% %%% Preferences about how text is laid out %%% \renewcommand{\textfloatsep}{0.7in} \raggedbottom %%% %%% Stacked accents %%% % This is adapted from the \diatop macro in wsuipa.sty, which was % originally designed by Jean-Pierre Paillet. \def\twoacc[#1|#2]{\leavevmode{\setbox1=\hbox{{#1{}}}% \setbox2=\hbox{{#2{}}}% \dimen0=\ifdim\wd1>\wd2\wd1\else\wd2\fi% \dimen1=\ht2\advance\dimen1by-0.8ex% \setbox1=\hbox to1\dimen0{\hss#1\hss}% \rlap{\raise1\dimen1\box1}% \hbox to1\dimen0{\hss#2\hss}}}% % Example of usage: \twoacc[\^|\={a}] % Special cases: \def\acm#1{\twoacc[\'|\={#1}]} % acute over macron \def\grm#1{\twoacc[\`|\={#1}]} % grave over macron \def\cim#1{\twoacc[\^|\={#1}]} % circumflex over macron %%% %%% Example numbering %%% % Example numbering uses the same counter as LaTeX's equation numbering. % Thus, you can use \label and \ref to refer to numbered examples in % exactly the same way as with equations. % \exampleno increments the counter and gives you its current value. % You can use it anywhere to generate an example number. % % For example, to display a sentence with a number at the % right margin, do this: % % \begin{flushleft} % This is a sentence. \hfill (\exampleno) % \end{flushleft} \newcommand{\exampleno}{\refstepcounter{equation}\theequation} %%% %%% The 'example' environment %%% % example is an environment for displaying a single numbered % example, preceded by its number. Example of use: % % \begin{example} % This is an example. % \end{example} % % This is actually a special case of 'examples' where % the first \item is automatically supplied. % % To display sub-examples with numbers such as % (3)(a), (3)(b), etc., you can use 'itemize', thus: % \begin{example} % \begin{itemize} % \item[(a)] This is the first example. % \item[(b)] This is the second example. % \end{itemize} % \end{example} \newenvironment{example}{\begin{examples}\item}{\end{examples}} %%% %%% The 'examples' environment %%% % examples is an environment for displaying a series of examples % together, each with its own example number. Usage: % % \begin{examples} % \item This is the first example. % \item This is the second example. % \end{examples} % % Thanks to Darrel Hankerson of Auburn University, and numerous others % across the net, for help with this macro. \newcounter{equationsave} % used in trick with equation number \newenvironment{examples}% % define "example" environment {% \begin{list}{(\theequation)}% {% \setcounter{equationsave}{\arabic{equation}}% \usecounter{equation}% % sets it to zero, unwantedly \setcounter{equation}{\arabic{equationsave}}% % restores previous value \setlength{\listparindent}{0pt}% \def\makelabel##1{##1\hfil}% % put labels flushleft in space available }% \raggedright}% % text is flushleft, not justified {\end{list}} %%% %%% Sentences with word-by-word glosses %%% % See covingtn.tex for full documentation. Some examples: % % Displayed sentence with gloss and translation: % % \gll Dit is een Nederlands voorbeeld. % This is a Dutch example. % \glt `This is an example in Dutch.' % \glend % % Same, using bracketing where words do not correspond one-to-one: % % \gll Dit is een voorbeeldje in het Nederlands. % This is a {little example} in {} Dutch. % \glt `This is a little example in Dutch.' % \glend % % Same, with example number added at right: % % \gll Dit is een voorbeeldje in het Nederlands. % This is a {little example} in {} Dutch. % \glt `This is a little example in Dutch.' \hfill (\exampleno) % \glend % % Same, with number but no (line reserved for) translation: % % \gll Dit is een voorbeeldje in het Nederlands. % This is a {little example} in {} Dutch. % \gln \hfill (\exampleno) % \glend % % If you want to align 3 lines rather than two, use \glll instead of \gll. % % Layout is critical between \gll (or \glll) and \glt (or \gln). % After \glt, environment is essentially the same as 'flushleft'. % % Thanks to Marcel R. van der Goot for permission to reproduce code. % % Modified 1992 Nov 8 to force single spacing regardless of % baselinestretch. \@ifundefined{new@fontshape}% {\def\@selfnt{\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi}} {\def\@selfnt{\selectfont}} % Thanks to Hans-Peter Kolb for this macro. \def\gll % Introduces 2-line text-and-gloss. {\begin{flushleft} \vskip\baselineskip% % Added 1992 Nov 8 to force single spacing \def\baselinestretch{1}% \@selfnt% \vskip-\baselineskip% \bgroup \catcode`\^^M=12 \twosent } \def\glll % Introduces 3-line text-and-gloss. {\begin{flushleft} \vskip\baselineskip% % Added 1992 Nov 8 to force single spacing \def\baselinestretch{1}% \@selfnt% \vskip-\baselineskip% \bgroup \catcode`\^^M=12 \threesent } \def\glt{{\hskip -\glossglue}\unhbox\gline\smallskip\newline} % \newline was \\ % Introduces translation. % Required even if no translation follows. \def\gln{{\hskip -\glossglue}\unhbox\gline\hfill} % Alternative to glt, when one wants to % put a number but no translation. \def\glend{\end{flushleft}} % Ends the gloss environment. % The following TeX code is adapted, with permission, from: % gloss.tex: Macros for vertically aligning words in consecutive sentences. % Version: 1.0 release: 26 November 1990 % Copyright (c) 1991 Marcel R. van der Goot (marcel@cs.caltech.edu). % Original gloss.tex and gloss.doc are available from % csvax.cs.caltech.edu [131.215.131.131] in pub/tex % and many other anonymous ftp archives. \newbox\lineone % boxes with words from first line \newbox\linetwo \newbox\linethree \newbox\wordone % a word from the first line (hbox) \newbox\wordtwo \newbox\wordthree \newbox\gline % the constructed double line (hbox) \newskip\glossglue % extra glue between glossed pairs or triples % \glossglue = 0pt plus 2pt minus 1pt % allow stretch/shrink between words \glossglue = 5pt plus 2pt minus 1pt % allow stretch/shrink between words \newif\ifnotdone \let\eachwordone=\it \let\eachwordtwo=\rm \let\eachwordthree=\rm \def\lastword#1#2#3% #1 = \each, #2 = line box, #3 = word box {\setbox#2=\vbox{\unvbox#2% \global\setbox#3=\lastbox }% \ifvoid#3\global\setbox#3=\hbox{#1\strut{} }\fi % extra space following \strut in case #1 needs a space } \def\testdone {\ifdim\ht\lineone=0pt \ifdim\ht\linetwo=0pt \notdonefalse % tricky space after pt \else\notdonetrue \fi \else\notdonetrue \fi } {\catcode`\^^M=12 \endlinechar=-1 % 12 = other \gdef\getwords(#1,#2)#3 #4^^M% #1=linebox, #2=\each, #3=1st word, #4=remainder {\setbox#1=\vbox{\hbox{#2\strut#3 }% adds space \unvbox#1% }% \def\more{#4}% \ifx\more\empty\let\more=\donewords \else\let\more=\getwords \fi \more(#1,#2)#4^^M% } \gdef\donewords(#1,#2)^^M{}% \gdef\twosent#1^^M#2^^M% #1 = first line, #2 = second line {\getwords(\lineone,\eachwordone)#1 ^^M% \getwords(\linetwo,\eachwordtwo)#2 ^^M% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss } \gdef\threesent#1^^M#2^^M#3^^M% #1 = first line, #2 = second line, #3 = third {\getwords(\lineone,\eachwordone)#1 ^^M% \getwords(\linetwo,\eachwordtwo)#2 ^^M% \getwords(\linethree,\eachwordthree)#3 ^^M% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss } } % restore \catcode`\^^M %\def\gloss % raw TeX macro for 2 aligned lines % {\bgroup % \catcode`\^^M=12 % \twosent % } %%% %%% Phrase-structure rules %%% % \psr To print S -> NP VP, use: \psr{S}{NP~VP} \newcommand{\psr}[2]{\mbox{\it #1 $\rightarrow$ #2}} %%% %%% Feature structures %%% % \fs To print a feature structure by itself, type for example % \fs{case:nom \\ person:P} % % \lfs To print the same feature structure with the category % label N at the top, type: % \lfs{N}{case:nom \\ person:P} % Modified 1990 Dec 5 so that features are left aligned. % Modified 2001 Mar 27 so that italics are used without the user typing \it. \newcommand{\fs}[1] { \mbox{\small $ \it \left[ \!\! \begin{array}{l} #1 \end{array} \!\! \right] $} } % Modified 1990 Dec 5 so that features are left aligned. \newcommand{\lfs}[2] { \mbox{$ \it \!\! \begin{array}[t]{c} #1 \\ \mbox{\small% $ \it \left[ \!\! \begin{array}{l} #2 \end{array} \!\! \right] $} \end{array} \!\! $} } %%% %%% Discourse representation structures %%% % \drs typesets a DRS in box notation a la Kamp. % Arguments: % 1. List of discourse variables joined by ~ % 2. List of conditions joined by \\ % % Example: \drs{X}{donkey(X)\\green(X)} % % Example: \drs{~}{purple(X,Y)} % % Example: \drs{X} % {named(X,`Pedro') \\ % \drs{Y}{donkey(Y)\\owns(X,Y)}~~ % {\large $\Rightarrow$}~ % \drs{~}{feeds(X,Y)} % } % \sdrs like \drs but first argument is a sentence % to be displayed above the drs. % % Example: \sdrs{A donkey is green.}{X}{donkey(X)\\green(X)} % \ifdrs forms 2 DRSes joined with a big arrow. % Usually used for DRSes nested within another. % % Example: \ifdrs{X}{donkey(X)\\hungry(X)} % {~}{feeds(Pedro,X)} % \alifdrs is like \ifdrs but shifted to the left so that an % embedded `if' structure will line up with ordinary % DRS conditions. % \negdrs forms a DRS preceded by the negation symbol. % % Example: \negdrs{X}{donkey(X)\\green(X)} \newcommand{\drs}[2] { { \it \begin{tabular}{|l|} \hline ~ \vspace{-2ex} \\ #1 \\ ~ \vspace{-2ex} \\ \hline ~ \vspace{-2ex} \\ #2 \\ ~ \\ % can't vspace here or the line will come out wrong \hline \end{tabular} } } \newcommand{\sdrs}[3] {\begin{tabular}{l} \mbox{\it #1} \\ ~ \\ \drs{#2}{#3} \end{tabular}} \newcommand{\ifdrs}[4] { \mbox{\drs{#1}{#2}~~{\large $\Rightarrow$}~\drs{#3}{#4}} } \newcommand{\alifdrs}[4] { \mbox{$\!\!\!$\drs{#1}{#2}~~{\large $\Rightarrow$}~\drs{#3}{#4}} } \newcommand{\negdrs}[2] { \mbox{{\large $\neg$}\drs{#1}{#2}} } % % Exercises, reference lists, and miscellany % % exercise Environment for exercises, numbered by subsection. % Optional argument for describing the exercise % ("Project" or the like). % \bx Abbreviation for \begin{exercise} % \ex Abbreviation for \end{exercise} % reflist Environment for hanging-indented list % (suitable for LSA-style reference list). % Does NOT require \item before entries. % \sentence Displays its argument, flushleft, italicized. % \either Displays its arguments as alternatives between % large curly brackets. Good for alternatives % within sentences or PS-rules. \newtheorem{exercise}{Exercise}[subsection] % Exercise numbering resets to 0 not only at the start of % a subsection, but also at the start of a section or chapter % even if it is not divided into subsections. \@addtoreset{exercise}{section} \@addtoreset{exercise}{chapter} \newcommand{\bx}{\begin{exercise}} \newcommand{\ex}{\end{exercise}} \@ifundefined{reflist}{ \newenvironment{reflist}{\begin{list}{}% {\setlength{\labelwidth}{0pt} \setlength{\labelsep}{0pt} \setlength{\leftmargin}{3em} \setlength{\itemindent}{-3em} \setlength{\listparindent}{-3em} \setlength{\itemsep}{6pt}}\item}{\end{list}} } % Modified 1992 Nov 8 to skip defining reflist if reflist is already % defined. Permits using uga.sty with covingtn.sty. \newcommand{\sentence}[1] {\begin{flushleft}{\it #1}\end{flushleft}} \newcommand{\either}[2] { $ \left\{ \begin{array}{l} \makebox{#1} \\ \makebox{#2} \\ \end{array} \right\} $ } %%%%%%%%%%%%%%%%% End of Covington's Macros %%%%%%%%%%%%%%%%%