%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% File covington.sty %% %% LaTeX macros for Linguistics %% %% Original author: %% ================ %% Michael A. Covington %% Artificial Intelligence Programs %% The University of Georgia %% Athens, Georgia 30602-7415 USA %% mcovingt@aisun1.ai.uga.edu %% %% Contributors: %% ============= %% Robin Fairbairns 2014-05-16: patched setting of \textfloatsep %% to use \setlength rather than \renewcommand; also converted to un*x line endings %% %% Current maintainer: %% =================== %% Juergen Spitzmueller %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% The Current Maintainer of this work is Juergen Spitzmueller. %% %% Code repository and issue tracker: https://github.com/jspitz/covington %% %% See covington.tex for documentation. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% %%% Metadata %%% \def\filedate{2021/09/01} \def\fileversion{2.7} \def\filename{covington.sty} % Force redefinition of environments? \newif\ifforceredef\forceredeffalse % Tweak text layout? \newif\iftweaklayout\tweaklayouttrue % Prevent page breaks in glosses \newif\ifnoglossbreaks\noglossbreaksfalse % Use own example counter \newif\ifownexcounter\ownexcounterfalse \@ifundefined{ProvidesPackage}{% \typeout{* covington.sty : Covington's linguistic macros, \fileversion\ \filedate *} }{% \ProvidesPackage{covington} [\filedate\space v\fileversion\space Covington's linguistic macros] \DeclareOption{force}{\forceredeftrue} \DeclareOption{keeplayout}{\tweaklayoutfalse} \DeclareOption{noglossbreaks}{\noglossbreakstrue} \DeclareOption{owncounter}{\ownexcountertrue} \ProcessOptions } % % Required packages % \RequirePackage{xkeyval} \RequirePackage{iftex} % Macro to issue warnings \newcommand\cov@warning[1]{% \@ifundefined{PackageWarning}{% \typeout{* covington warning : #1 *} }{% \PackageWarning{covington}{#1}% } } %%% %%% Preferences about how text is laid out %%% % New 2018-08-24: Option to opt-out these layout tweaks \iftweaklayout \setlength{\textfloatsep}{0.7in} \raggedbottom \fi %%% %%% Stacked accents %%% % This is adapted from the \diatop macro (designed by % Mike Dunleavy, originally in cjlmac.sty, designed by % Jean-Pierre Paillet) and included in wsuipa.sty % (designed by Dean Guenther and Janene Winter). % Length to adjust accent distance % Introduced 2016-07-06 JSP. \newlength\twoaccsep \setlength{\twoaccsep}{-0.8ex} \newcommand*\SetDiaOffset[1]{\addtolength{\twoaccsep}{#1}} \def\twoacc[#1|#2]{\leavevmode{\setbox1=\hbox{{#1{}}}% \setbox2=\hbox{{#2{}}}% \dimen0=\ifdim\wd1>\wd2\wd1\else\wd2\fi% \dimen1=\ht2\advance\dimen1by\twoaccsep% \setbox1=\hbox to1\dimen0{\hss#1{}\hss}% \rlap{\raise1\dimen1\box1}% \hbox to1\dimen0{\hss#2\hss}}}% % Example of usage: \twoacc[\^|\={a}] % 2017-05-21: Introduce a less odd syntax: \twodias{\^}{\=}{a} \newcommand*\twodias[3]{\leavevmode{\setbox1=\hbox{{#1{}}}% \setbox2=\hbox{{#2{#3}}}% \dimen0=\ifdim\wd1>\wd2\wd1\else\wd2\fi% \dimen1=\ht2\advance\dimen1by\twoaccsep% \setbox1=\hbox to1\dimen0{\hss#1{}\hss}% \rlap{\raise1\dimen1\box1}% \hbox to1\dimen0{\hss#2{#3}\hss}}} % Special cases: \def\acm#1{\twodias{\'}{\=}{#1}} % acute over macron \def\grm#1{\twodias{\`}{\=}{#1}} % grave over macron % Use MODIFIER LETTER CIRCUMFLEX ACCENT (U+2C6) with Xe/LuaTeX \iftutex \def\cim#1{\twodias{\char"2C6}{\=}{#1}} % circumflex over macron \else \def\cim#1{\twodias{\^}{\=}{#1}} % circumflex over macron \fi %%% %%% Example numbering %%% % Example numbering uses the same counter as LaTeX's equation numbering % by default. % Thus, you can use \label and \ref to refer to numbered examples in % exactly the same way as with equations. % As of v. 2.2, it is also possible to use an own counter and thus separate % equations from linguistic examples. % \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} \ifownexcounter \newcounter{covex} \newcommand{\@exampleno}{\refstepcounter{covex}\thecovex} \else \newcommand{\@exampleno}{\refstepcounter{equation}\theequation} \fi \newcommand*\@@exampleno{\ifownexcounter\thecovex\else\theequation\fi} \newcommand*\exampleno{\@ifstar{\@@exampleno}{\@exampleno}} %%% %%% The 'example' environment %%% % Font setting possibility for example sentences \newcommand*\covexamplefs{} \newcommand*\covexamplenofs{\normalfont} % 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} % % New in 1.1 (2016-07-06): % We provide a covexample environment and only (re)define % example if it does not yet exist or if redefinition is % forced by the "force" option. This prevents clashes % with packages/classes that roll their own example environment % (such as beamer). \newenvironment{covexample}{\begin{covexamples}\item}{\end{covexamples}} \@ifundefined{example}{% \newenvironment{example}{\begin{covexample}}{\end{covexample}} }{% \ifforceredef \renewenvironment{example}{\begin{covexample}}{\end{covexample}} \cov@warning{The example environment was already defined. Redefining it.} \else \cov@warning{The example environment was already defined.^^J Covington does not touch it.^^J Use covexample if you want to access covington's^^J version, or use the force package option.} \fi } %%% %%% 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. % % New in 1.1 (2016-07-06): % We provide a covexamples environment and only (re)define % examples if it does not yet exist or if redefinition is % forced by the "force" option. This prevents clashes % with packages/classes that roll their own examples environment % (such as beamer). % % New in 1.8 (2018-12-07): Allow to redefine label (\covexnumber) \newcounter{covexsave} % used in trick with example number \newlength\examplenumbersep \setlength\examplenumbersep{0pt} \newlength\exampleind \setlength\exampleind{0pt} \newcommand*\covexnumber[1]{(#1)} \newenvironment{covexamples}% % define "example" environment {% \begin{list}{\covexamplenofs\covexnumber{\@@exampleno}}% {% \addtolength{\labelwidth}{\examplenumbersep}% \addtolength{\leftmargin}{\examplenumbersep}% \addtolength{\leftmargin}{\exampleind}% \ifownexcounter \setcounter{covexsave}{\arabic{covex}}% \usecounter{covex}% % sets it to zero, unwantedly \setcounter{covex}{\arabic{covexsave}}% % restores previous value \else \setcounter{covexsave}{\arabic{equation}}% \usecounter{equation}% % sets it to zero, unwantedly \setcounter{equation}{\arabic{covexsave}}% % restores previous value \fi \setlength{\listparindent}{0pt}% \def\makelabel##1{##1\hfil}% % put labels flushleft in space available }% \raggedright\covexamplefs}% % text is flushleft, not justified {\end{list}} \@ifundefined{examples}{% \newenvironment{examples}{\begin{covexamples}}{\end{covexamples}} }{% \ifforceredef \renewenvironment{examples}{\begin{covexamples}}{\end{covexamples}} \cov@warning{The examples environment was already defined. Redefining it.} \else \cov@warning{The examples environment was already defined.^^J Covington does not touch it.^^J Use covexamples if you want to access covington's^^J version, or use the force package option.} \fi } %%% %%% The 'subexamples' environment %%% % New in v1.6 (2018-09-07) % subexamples is an environment for displaying a series of examples % that belong together and thus share an example number % (with an alphabetic subcounter). Usage: % % \begin{subexamples} % \item This is the first subexample. % \item This is the second subexample. % \end{subexamples} \newlength\subexamplenumbersep \setlength\subexamplenumbersep{0pt} \newcommand*\covsubexnumber[1]{(#1)} % 2019-06-21 (v. 2.3): optional preceding subexample text \define@key{cov@subex}{preamble}{\def\cov@sxp{#1}} \newcommand*\subexpreamblefs{\normalfont} \newenvironment{covsubexamples}[1][]% % define "subexamples" environment {% \ifx#1\empty\else\setkeys{cov@subex}{#1}\fi% \begin{covexample}% \@ifundefined{cov@sxp}{}{\subexpreamblefs\cov@sxp}% insert preamble if given \begin{enumerate} \addtolength{\labelsep}{\subexamplenumbersep}% \renewcommand\theenumi{\alph{enumi}} \renewcommand\labelenumi{\covexamplenofs\covsubexnumber{\theenumi}} \renewcommand\p@enumi{\@@exampleno\,}% \setlength{\listparindent}{0pt}% \def\makelabel##1{##1\hfil}% % put labels flushleft in space available }% {% \let\cov@sxp\relax \end{enumerate} \end{covexample} } \@ifundefined{subexamples}{% \newenvironment{subexamples}[1][]{\begin{covsubexamples}[#1]}{\end{covsubexamples}} }{% \ifforceredef \renewenvironment{subexamples}[1][]{\begin{covsubexamples}[#1]}{\end{covsubexamples}} \cov@warning{The subexamples environment was already defined. Redefining it.} \else \cov@warning{The subexamples environment was already defined.^^J Covington does not touch it.^^J Use covsubexamples if you want to access covington's^^J version, or use the force package option.} \fi } %%% %%% Reference to examples including parentheses %%% % New in v1.6 (2018-09-07) \providecommand*\pxref[1]{(\ref{#1})} %%% %%% Sentences with word-by-word glosses %%% % See covington.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\cov@selfnt{\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi}} {\def\cov@selfnt{\selectfont}} % Thanks to Hans-Peter Kolb for this macro. % Try to prevent page breaks in glosses if noglossbreaks option is set \def\cov@nopagebreak{} \ifnoglossbreaks \def\cov@nopagebreak{\let\reserved@e\vadjust\let\reserved@f\nobreak} \fi % 2019-05-07: optional preceding gloss text (non-interlinearized) \newcommand*\glosslinepreamble[1]{#1} \def\cov@glp{} \newcommand*\glosspreamble[1]{\def\cov@glp{#1}} % 2021-09-01: optional trailing gloss text (non-interlinearized) \newcommand*\glosslinepostamble[1]{#1} \def\cov@glpst{} \def\gll{% % Introduces 2-line text-and-gloss. \begin{flushleft} \vskip\baselineskip% % Added 1992 Nov 8 to force single spacing \def\baselinestretch{1}% \cov@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}% \cov@selfnt% \vskip-\baselineskip% \bgroup \catcode`\^^M=12 \threesent } % The following two \x.. versions introduce special forms of glossing % macros that do not activate the newline char. The latter does not % work inside arguments (see http://tex.stackexchange.com/questions/169740) % Inspired by this post of David Carlisle to the mentioned stackexchange thread: % http://tex.stackexchange.com/a/169744/19291 % These macros require the gloss lines to be ended explicitly with \xgle \def\xgll{% % Introduces 2-line text-and-gloss. \begin{flushleft} \vskip\baselineskip% % Added 1992 Nov 8 to force single spacing \def\baselinestretch{1}% \cov@selfnt% \vskip-\baselineskip% \bgroup \ignorespaces\xtwosent } \def\xglll{% % Introduces 3-line text-and-gloss. \begin{flushleft} \vskip\baselineskip% % Added 1992 Nov 8 to force single spacing \def\baselinestretch{1}% \cov@selfnt% \vskip-\baselineskip% \bgroup \ignorespaces\xthreesent } \def\glt{{\hskip -\glossglue}\cov@nopagebreak\unhbox\gline\smallskip\cov@nopagebreak\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}% \def\cov@glp{}% \def\cov@glpst{}% } % 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 % Add semantic markup (with latex 2.09 backwards support) \@ifundefined{selectfont}{% \def\cov@emphasized{\it}% \def\cov@normalfont{\rm}% }{% \def\cov@emphasized{\normalfont\itshape}% \def\cov@normalfont{\normalfont\upshape}% } % Font settings for gloss lines \newcommand*\glosslineone{\cov@emphasized} \newcommand*\glosslinetwo{\cov@normalfont} \newcommand*\glosslinethree{\cov@normalfont} \def\eachwordone{\glosslineone} \def\eachwordtwo{\glosslinetwo} \def\eachwordthree{\glosslinethree} \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% \ifx\cov@glp\empty\else\glosslinepreamble{\cov@glp}\cov@nopagebreak\newline\fi% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{% vtop was vbox \box\wordone \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% \ifx\cov@glp\empty\else\glosslinepreamble{\cov@glp}\cov@nopagebreak\newline\fi% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{% vtop was vbox \box\wordone \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss } } % restore \catcode`\^^M % An explicit gloss line ending (for \xgll and \xglll variants= \gdef\xgle{} % Special versions of \getwords, \donewords, \twosent and \threesent for the \x.. % variants of gloss introducers (using \xgle as separator instead of active newline) \gdef\xgetwords(#1,#2)#3 #4\xgle% #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=\xdonewords \else\let\more=\xgetwords \fi \more(#1,#2)#4\xgle% } \gdef\xdonewords(#1,#2)\xgle{}% \gdef\xtwosent#1\xgle#2\xgle% #1 = first line, #2 = second line {\xgetwords(\lineone,\eachwordone)#1 \xgle% \xgetwords(\linetwo,\eachwordtwo)#2 \xgle% \ifx\cov@glp\empty\else\glosslinepreamble{\cov@glp}\cov@nopagebreak\newline\fi% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \global\setbox\gline=\hbox{\unhbox\gline% \hskip\glossglue% \vtop{% vtop was vbox \box\wordone \nointerlineskip \box\wordtwo }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss } \gdef\xthreesent#1\xgle#2\xgle#3\xgle% #1 = first line, #2 = second line, #3 = third {\xgetwords(\lineone,\eachwordone)#1 \xgle% \xgetwords(\linetwo,\eachwordtwo)#2 \xgle% \xgetwords(\linethree,\eachwordthree)#3 \xgle% \ifx\cov@glp\empty\else\glosslinepreamble{\cov@glp}\cov@nopagebreak\newline\fi% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{% vtop was vbox \box\wordone \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss } % V. 2.0: enquotable translation line \newcommand*\glosslinetrans[1]{\covenquote{#1}} \newcommand*\glot[1]{% \def\tempx{#1}% \ifx\tempx\empty\gln \else\glt\glosslinetrans{#1}\fi% } % V. 2.0: More convenient gloss macros % % Key-val options for the macros % % 1. ex= \newif\ifgexample\gexamplefalse \newif\ifggexample\ggexamplefalse \define@boolkey+{covington}{ex}[true]{% \ifKV@covington@ex \gexampletrue \else \gexamplefalse \fi }{% \cov@warning{unknown env value '#1' in gloss macro}% } \define@boolkey+{gcovington}{ex}[true]{% \ifKV@gcovington@ex \ggexampletrue \else \ggexamplefalse \fi }{% \cov@warning{unknown env value '#1' in setglossoptions}% } \newif\ifgtright\gtrightfalse \newif\ifggtright\ggtrightfalse % % 2. tlb= \define@boolkey+{covington}{tlr}[true]{% \ifKV@covington@tlr \gtrighttrue \else \gtrightfalse \fi }{% \cov@warning{unknown tlr value '#1' in gloss macro}% } \define@boolkey+{gcovington}{tlr}[true]{% \ifKV@gcovington@tlr \ggtrighttrue \else \ggtrightfalse \fi }{% \cov@warning{unknown tlr value '#1' in setglossoptions}% } % % 3. font settings for gloss line i, ii, iii \define@key{covington}{fsi}{\def\lglosslineone{#1}} \define@key{covington}{fsii}{\def\lglosslinetwo{#1}} \define@key{covington}{fsiii}{\def\lglosslinethree{#1}} \define@key{gcovington}{fsi}{\def\glosslineone{#1}} \define@key{gcovington}{fsii}{\def\glosslinetwo{#1}} \define@key{gcovington}{fsiii}{\def\glosslinethree{#1}} % % 4. Gloss preamble text \def\cov@gglp{} \define@key{covington}{preamble}{\def\cov@lglp{#1}} \define@key{gcovington}{preamble}{\def\cov@gglp{#1}} % % 5. Gloss postamble text \def\cov@gglpst{} \define@key{covington}{postamble}{\def\cov@lglpst{#1}} \define@key{gcovington}{postamble}{\def\cov@gglpst{#1}} % % General setting option \newcommand*\setglossoptions[1]{\setkeys{gcovington}{#1}} % % 1. \digloss[]{}{}{} \newcommand*\digloss[4][\empty]{% \ifggexample \setkeys{covington}{ex=true} \else \setkeys{covington}{ex=false} \fi% \ifggtright \setkeys{covington}{tlr=true} \else \setkeys{covington}{tlr=false} \fi% \ifx#1\empty\else\setkeys{covington}{#1}\fi% \ifgexample \begin{covexample} \fi% \@ifundefined{lglosslineone}{}{\def\glosslineone{\lglosslineone}}% \@ifundefined{lglosslinetwo}{}{\def\glosslinetwo{\lglosslinetwo}}% \@ifundefined{lglosslinethree}{}{\def\glosslinethree{\lglosslinethree}}% \@ifundefined{cov@lglp}{}{\def\cov@gglp{\cov@lglp}}% \ifx\cov@gglp\empty\else\def\cov@glp{\cov@gglp}\fi% \@ifundefined{cov@lglpst}{}{\def\cov@gglpst{\cov@lglpst}}% \ifx\cov@gglpst\empty\else\def\cov@glpst{\cov@gglpst}\fi% \xgll #2\xgle #3\xgle \ifgtright \gln #4% \else \glot{#4}% \fi \ifx\cov@glpst\empty\else\glosslinepostamble{\cov@glpst}\cov@nopagebreak\fi% \glend \ifgexample \end{covexample} \fi% \let\lglosslineone\relax% \let\lglosslinetwo\relax% \let\lglosslinethree\relax% \let\cov@lglp\relax% } % 2. \trigloss[]{}{}{}{} \newcommand\trigloss[5][\empty]{% \ifggexample \setkeys{covington}{ex=true} \else \setkeys{covington}{ex=false} \fi% \ifggtright \setkeys{covington}{tlr=true} \else \setkeys{covington}{tlr=false} \fi% \ifx#1\empty\else\setkeys{covington}{#1}\fi% \ifgexample \begin{covexample} \fi% \@ifundefined{lglosslineone}{}{\def\glosslineone{\lglosslineone}}% \@ifundefined{lglosslinetwo}{}{\def\glosslinetwo{\lglosslinetwo}}% \@ifundefined{lglosslinethree}{}{\def\glosslinethree{\lglosslinethree}}% \@ifundefined{cov@lglp}{}{\def\cov@gglp{\cov@lglp}}% \ifx\cov@gglp\empty\else\def\cov@glp{\cov@gglp}\fi% \@ifundefined{cov@lglpst}{}{\def\cov@gglpst{\cov@lglpst}}% \ifx\cov@gglpst\empty\else\def\cov@glpst{\cov@gglpst}\fi% \xglll #2\xgle #3\xgle #4\xgle \ifgtright \gln #5% \else \glot{#5}% \fi \ifx\cov@glpst\empty\else\glosslinepostamble{\cov@glpst}\cov@nopagebreak\fi% \glend \ifgexample \end{covexample} \fi% \let\lglosslineone\relax% \let\lglosslinetwo\relax% \let\lglosslinethree\relax% } %\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{\cov@emphasized #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\cov@emphasized $ \left[ \!\! \begin{array}{l} #1 \end{array} \!\! \right] $} } % Modified 1990 Dec 5 so that features are left aligned. \newcommand{\lfs}[2] { \mbox{\cov@emphasized $ \!\! \begin{array}[t]{c} #1 \\ \mbox{\small% $ \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)} % 2019-06-21 (v. 2.3): Do not define the macros if already defined. % This allows to use covington with the drs package. \providecommand{\drs}[2] { { \cov@emphasized \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} } } \providecommand{\sdrs}[3] {\begin{tabular}{l} \mbox{\cov@emphasized #1} \\ ~ \\ \drs{#2}{#3} \end{tabular}} \providecommand{\ifdrs}[4] { \mbox{\drs{#1}{#2}~~{\large $\Rightarrow$}~\drs{#3}{#4}} } \providecommand{\alifdrs}[4] { \mbox{$\!\!\!$\drs{#1}{#2}~~{\large $\Rightarrow$}~\drs{#3}{#4}} } \providecommand{\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). % % New in 1.1 (2016-07-06): % We provide a covexercise environment and only (re)define % exercise if it does not yet exist or if redefinition is % forced by the "force" option. This prevents clashes % with packages/classes that roll their own exercise environment. % \bx Abbreviation for \begin{covexercise} % \ex Abbreviation for \end{covexercise} % 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. \ifcsname c@subsection\endcsname \newtheorem{covexercise}{Exercise}[subsection] \else \newtheorem{covexercise}{Exercise} \fi % 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{covexercise}{section} \@addtoreset{covexercise}{chapter} \newcommand{\bx}{\begin{covexercise}} \newcommand{\ex}{\end{covexercise}} \@ifundefined{exercise}{% \newenvironment{exercise}{\begin{covexercise}}{\end{covexercise}} }{% \ifforceredef \renewenvironment{exercise}{\begin{covexercise}}{\end{covexercise}} \cov@warning{The exercise environment was already defined. Redefining it.} \else \cov@warning{The exercise environment was already defined.^^J Covington does not touch it.^^J Use covexercise if you want to access covington's^^J version, or use the force package option.} \fi } \newlength\reflistindent \setlength\reflistindent{3em} \newlength\reflistitemsep \setlength\reflistitemsep{6pt} \newlength\reflistparsep \setlength\reflistparsep{\parsep} \@ifundefined{reflist}{ \newenvironment{reflist}{\begin{list}{}% {\setlength{\labelwidth}{0pt}% \setlength{\labelsep}{0pt}% \setlength{\leftmargin}{\reflistindent}% \setlength{\itemindent}{-\reflistindent}% \setlength{\listparindent}{-\reflistindent}% \setlength{\itemsep}{\reflistitemsep}% \setlength{\parsep}{\reflistparsep}}\item}{\end{list}} } % Modified 1992 Nov 8 to skip defining reflist if reflist is already % defined. Permits using uga.sty with covingtn.sty. % V. 2.0: Add macro for font settings customization \newcommand*\sentencefs{\cov@emphasized} \newcommand{\sentence}[1] {\begin{flushleft}{\sentencefs #1}\end{flushleft}} % V. 2.0: Further semantic markup \providecommand*\lexp[1]{\textit{#1}} \providecommand*\lcon[1]{\textsc{#1}} \newcommand*\covenquote[1]{\textquoteleft #1\textquoteright} \providecommand*\lmean[1]{\covenquote{#1}} \AtBeginDocument{% \@ifundefined{enquote}{}{% \renewcommand\covenquote[1]{\enquote*{#1}} } } \newcommand{\either}[2] { $ \left\{ \begin{array}{l} \makebox{#1} \\ \makebox{#2} \\ \end{array} \right\} $ } %%%%%%%%%%%%%%%%% End of Covington's Macros %%%%%%%%%%%%%%%%%