From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/covington/covington.sty | 1045 ++++++++++++++++++++++++++ 1 file changed, 1045 insertions(+) create mode 100644 macros/latex/contrib/covington/covington.sty (limited to 'macros/latex/contrib/covington/covington.sty') diff --git a/macros/latex/contrib/covington/covington.sty b/macros/latex/contrib/covington/covington.sty new file mode 100644 index 0000000000..3d1b8fc1a3 --- /dev/null +++ b/macros/latex/contrib/covington/covington.sty @@ -0,0 +1,1045 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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{2019/06/21} +\def\fileversion{2.3} +\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} + +% 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 in wsuipa.sty, which was +% originally designed by Jean-Pierre Paillet. + +% 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 +\def\cim#1{\twodias{\^}{\=}{#1}} % circumflex over macron + +%%% +%%% 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} + +\newcommand*\covexnumber[1]{(#1)} + +\newenvironment{covexamples}% % define "example" environment +{% +\begin{list}{\covexamplenofs\covexnumber{\@@exampleno}}% +{% +\addtolength{\labelwidth}{\examplenumbersep}% +\addtolength{\leftmargin}{\examplenumbersep}% +\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}} + +\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{}% +} % 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}} +% +% 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% + \xgll #2\xgle + #3\xgle + \ifgtright + \gln #4 + \else + \glot{#4} + \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% + \xglll #2\xgle + #3\xgle + #4\xgle + \ifgtright + \gln #5 + \else + \glot{#5} + \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 +% 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 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. + +\newtheorem{covexercise}{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{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 %%%%%%%%%%%%%%%%% -- cgit v1.2.3