diff options
Diffstat (limited to 'macros/latex/contrib/linguex/linguex.sty')
-rw-r--r-- | macros/latex/contrib/linguex/linguex.sty | 436 |
1 files changed, 436 insertions, 0 deletions
diff --git a/macros/latex/contrib/linguex/linguex.sty b/macros/latex/contrib/linguex/linguex.sty new file mode 100644 index 0000000000..18e34222d8 --- /dev/null +++ b/macros/latex/contrib/linguex/linguex.sty @@ -0,0 +1,436 @@ +%% Copyright 1996-2013 by Wolfgang Sternefeld +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. +%% linguex.sty version 3.3, revised 2000/12/22, compatability with +%% lucida fonts: Defaults defined \AtBeginDocument +%% linguex.sty version 3.4, revised 2001/04/30, corrected vspacing for +%% \ex. embedded in \a. +%% linguex.sty version 3.5, revised 2002/01/26, corrected hspacing for +%% \alignSubEx +%% linguex.sty version 3.6, revised 2008/03/20, \lessthanten, +%% \lessthanhundred, and \lessthanthousand redefined due to problems +%% with kerning in fonts +%% linguex.sty version 3.7, revised 2008/06/30, \lessthanten, +%% \lessthanhundred, and \lessthanthousand redefined due to problems +%% with kerning in fonts +%% linguex.sty version 3.7a, revised 2009/09/02, replaced hard-coded +%% example format with \theExNo +%% linguex.sty version 4.0 replaces hard-coded brackets with +%% predefined commands +%% linguex.sty version 4.1 replaces \refstepcounter by \stepcounter +%% for internal counters +%% linguex.sty version 4.2 replaces \rm by \textrm in definition of +%% \stripoffbr; undoes the change in version 4.0 from .66\baselineskip to +%% \Extopsep; renews definition of \label AtBeginDocument +%% linguex.sty version 4.3 removes code that caused problems with beamer; adds +%% a \ProvidesPackage line to keep track of versions better +%% Author: Wolfgang.Sternefeld@uni-tuebingen.de +%% status: maintained +%% filedate May 28th 2013 + +\ProvidesPackage{linguex}[2013/05/28 Example formatting for linguistics v. 4.3] +\RequirePackage{xspace,cgloss4e} +%%%%%%%%%%%%%%%%%%% FOOTNOTES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% to let \ex. know whether or not it is in a footnote +\newif\if@noftnote\@noftnotetrue +\let\predefinedfootnotetext=\@footnotetext +\long\def\@footnotetext#1{\@noftnotefalse\predefinedfootnotetext{#1}% + \@noftnotetrue} +% +%%%%%%%%%%%%%%% COUNTERS FOR LABELLING %%%%%%%%%%%%%%%%%%%%%%%%%%% +\@ifundefined{chapter}{\newcounter{ExNo}}{\newcounter{ExNo}[chapter]} +\newcounter{SubExNo}[\if@noftnote ExNo\else FnExNo\fi] +\newcounter{SubSubExNo}[SubExNo] +\newcounter{FnExNo}[footnote] +\newcounter{ABC} +\newcommand{\ExLBr}{(}%added in version 4.0 +\newcommand{\ExRBr}{)}%added in version 4.0 +\newcommand{\FnExLBr}{(}%added in version 4.0 +\newcommand{\FnExRBr}{)}%added in version 4.0 +\newcommand{\theExLBr}{(}%added in version 4.0 +\newcommand{\theExRBr}{)}%added in version 4.0 +\newcommand{\theFnExLBr}{(}%added in version 4.0 +\newcommand{\theFnExRBr}{)}%added in version 4.0 +\renewcommand{\theExNo}{\theExLBr\arabic{ExNo}\theExRBr}%modified in version 4.0 +\renewcommand{\theFnExNo}{\theFnExLBr\roman{FnExNo}\theFnExRBr}%removed in version 4.0 +\newcommand{\firstrefdash}{-} +\newcommand{\secondrefdash}{-} +\newcommand{\SubExLBr}{} +\newcommand{\SubExRBr}{.} +\newcommand{\SubSubExLBr}{(} +\newcommand{\SubSubExRBr}{)} +\newcommand{\Exarabic}{\arabic}%added in version 4.0 +\newcommand{\Exalph}{\alph}%added in version 4.0 +\newcommand{\Exroman}{\roman}%added in version 4.0 +% Modification in version 4.0: hard wired brackets replaced by +% commands defined above: +\renewcommand{\theSubExNo}{\hbox{\if@noftnote\theExLBr\Exarabic{ExNo}\firstrefdash + \Exalph{SubExNo}\theExRBr\else +\theFnExLBr\Exroman{FnExNo}\firstrefdash\Exalph{SubExNo}\theFnExRBr\fi}} +\renewcommand{\theSubSubExNo}{% + \hbox{\if@noftnote\theExLBr\Exarabic{ExNo}\firstrefdash\Exalph{SubExNo}\secondrefdash + \Exroman{SubSubExNo}\theExRBr% + \else\theFnExLBr\Exroman{FnExNo}\firstrefdash + \Exalph{SubExNo}\secondrefdash\Exarabic{SubSubExNo}\theFnExRBr\fi}}% +% +%%%%%%%%%%%%%% LENGTHS FOR SPACING %%%%%%%%%%%%%%%%%%%%%%%%%% +\newlength{\currentlabel} +\newlength{\lessthanten} +\newlength{\lessthanhundred} +\newlength{\lessthanthousand} +\newlength{\@Exleftmargin} +\newlength{\Exlabelwidth} +\newlength{\Extopsep} +\newlength{\Exindent} +\newlength{\SubExleftmargin} +\newlength{\SubSubExleftmargin} +\newlength{\Exlabelsep} +\newlength{\alignSubExnegindent} +\newlength{\Exredux} +\newif\ifalignSubEx +\newcommand{\resetExdefaults}{% + \setlength{\Exlabelsep}{1.3em}% + \setlength{\Extopsep}{.66\baselineskip}% + \setlength{\SubSubExleftmargin}{2.4em}% + \setlength{\SubExleftmargin}{2em}% + \setlength{\Exindent}{0pt}% + \setlength{\Exlabelwidth}{4em}% + \setlength{\alignSubExnegindent}{\Exlabelsep}% + \ifalignSubEx\addtolength{\Exlabelsep}{.7em}% + \addtolength{\alignSubExnegindent}{.7em}\fi + \setlength{\Exredux}{-\baselineskip}% + } +\AtBeginDocument{\resetExdefaults} +%%% +\newlength\digitwidth%added-3.7 +\newlength\mindigitwidth%added-3.7 +\newcommand{\minimalwidth}[1]{\settowidth{\digitwidth}{#1}%added-3.7 +\ifdim\digitwidth<\mindigitwidth\mindigitwidth\digitwidth\fi}%added-3.7 +% +%%%%%%%%%%%%%%%%%%% DEFINITION OF \ex. %%%%%%%%%%%%%%%%%%%%%%%%%% +\newif\ifembedded +\newif\ifExWarning +\newcounter{ExDepth} +\newcounter{TempExDepth}\setcounter{TempExDepth}{0} +\def\trivex.#1\par{\ifdim\lastskip=.66\baselineskip\vspace{\Exredux}\fi + \begin{list}{}{\leftmargin\z@% + \labelwidth\z@\labelsep\z@\partopsep\z@\topsep\Extopsep}% + \item{}#1% + \stepcounter{ExDepth}\ExEnd}%refstepcounter replaced +\def\ex.#1\par{% + \ifnum\theExDepth>0 \setcounter{TempExDepth}{\theExDepth}% + \setcounter{ExDepth}{0} + \embeddedtrue\fi + \ifembedded\else + \ifdim\lastskip=.66\baselineskip\vspace{\Exredux}\fi + \fi + \stepcounter{ExDepth}%%refstepcounter replaced + \my@ifnextchar[{\OptArgEx}{\ifindex\expandafter\lookforwords\fi + \NormalEx\testforgramm}% + #1% + \addtocounter{ExDepth}{\theTempExDepth}\setcounter{TempExDepth}{0}% + \embeddedfalse\global\ExWarningfalse\ExEnd} +\newcommand{\NormalEx}{\ifExWarning + \PackageWarning{linguex}{Check example numbering (screwed up?), + check number of empty lines at end of examples. + Detected}\fi\ExWarningtrue + \if@noftnote\refstepcounter{ExNo}% + \Exformat[\ExLBr\Exarabic{ExNo}\ExRBr]% + \else + \refstepcounter{FnExNo}\Exformat[\FnExLBr\Exroman{FnExNo}\FnExRBr]% + \fi} +\def\OptArgEx[#1]{\Exformat[#1]\expandafter\testforgramm\ifindex\expandafter + \lookforwords\fi} +\def\philarge{4\mindigitwidth} +\def\philmiddle{3\mindigitwidth} +\def\philsmall{2\mindigitwidth} +%%%%%%%%%%%%%%% +\newcommand{\phlabelwidth}[1]{% + \renewcommand{\philarge}{#1}% + \renewcommand{\philmiddle}{#1}% + \renewcommand{\philsmall}{#1}} +\newcommand{\phlabeldefault}{% + \renewcommand{\philarge}{4\mindigitwidth}% + \renewcommand{\philmiddle}{3\mindigitwidth}% + \renewcommand{\philsmall}{2\mindigitwidth}} +\newcommand{\ExEnd}{% + \ifnum\theExDepth=0\global\unembeddedfalse\else% + \end{list}\addtocounter{ExDepth}{-1}\ExEnd\fi} +\newcommand{\listdecl}{\parsep\z@\itemsep\z@\partopsep\z@\labelsep\z@% + \@Exleftmargin\z@% + \settowidth{\digitwidth}{0}\mindigitwidth\digitwidth%modified-3.7 + \minimalwidth{1}%modified-3.7 + \minimalwidth{2}% + \minimalwidth{3}% + \minimalwidth{4}% + \minimalwidth{5}% + \minimalwidth{6}% + \minimalwidth{7}% + \minimalwidth{8}% + \minimalwidth{9}% + \settowidth{\lessthanthousand}{\ExLBr\hbox to \philarge{}\ExRBr}%modified-3.7,4.0 + \ifdim\currentlabel<\lessthanthousand\leftmargin\Exlabelsep + \ifdim\lessthanthousand<\Exlabelwidth\Exlabelwidth\Exlabelsep% + \settowidth{\lessthanten}{\ExLBr\hbox + to \philsmall{}\ExRBr}%modified-3.7 + \settowidth{\lessthanhundred}{\ExLBr\hbox to + \philmiddle{}\ExRBr}%modified-3.7 + \ifdim\currentlabel<\lessthanten\leftmargin\lessthanten% + \else + \ifdim\currentlabel<\lessthanhundred\leftmargin\lessthanhundred% + \else + \ifdim\currentlabel<\lessthanthousand\leftmargin\lessthanthousand% + \fi\fi\fi\fi + \else + \Exlabelwidth\z@ + \fi% + \@Exleftmargin\Exlabelwidth + \labelwidth\leftmargin + \ifembedded\relax\else + \addtolength{\Exlabelwidth}{\Exindent} + \fi + \addtolength{\leftmargin}{\Exlabelwidth}% + \addtolength{\labelwidth}{\@Exleftmargin}% +} +\def\Exformat[#1]{% + \settowidth{\currentlabel}{#1}% + \begin{list}{\makebox[\labelwidth][l]{#1}}{% + \setlength{\leftmargin}{\currentlabel}% + \listdecl% + \if@noftnote\relax\else\addtolength{\topsep}{-.5\topsep}\fi + \ifembedded\topsep=.3\Extopsep\else\topsep=\Extopsep\fi + }% + \ifindex\firstwordtrue\fi\item{}} +% +%%%%%%%% the `[' of OPTIONAL ARGUMENTS must immediately follow \ex. %%%%%% +%%%% redefinition of \@ifnextchar that does NOT ignore spaces %%%%%%%%%%% +\def\my@ifnextchar#1#2#3{\let\reserved@d=#1% + \def\reserved@a{#2}\def\reserved@b{#3}% + \futurelet\@let@token\my@ifnch} +\def\my@ifnch{\ifx\@let@token\@sptoken% + % \let\reserved@c\@xifnch + \let\reserved@c\reserved@b% + \else + \ifx\@let@token\reserved@d% + \let\reserved@c\reserved@a% + \else + \let\reserved@c\reserved@b% + \fi\fi + \reserved@c}% cf. definition of \@ifnextchar in latex2e.ltx %% +% +%%%%%%%%%%%%%% PROCESSING OF GRAMMATICALITY JUDGMENTS %%%%%%%%%%%%% +\newtoks\CollectTokens +\newcommand\AddInfo[1]{\expandafter\expandafter\expandafter + \CollectTokens\expandafter{% + \the\CollectTokens#1}} +\def\testforgramm{\GTest{}{\printGramm}} +\def\printGramm{\makebox[0pt][r]{\normalfont\the\CollectTokens}\ignorespaces} +\def\GTest#1#2{% + \def\TestForGramm{\CollectTokens={}% + \@ifnextchar *{\AddInfo{*}\@firstoftwo\recTestForGramm}{% + \@ifnextchar ?{\AddInfo{\char63}\@firstoftwo\recTestForGramm}{% + \@ifnextchar \#{\AddInfo{\#}\@firstoftwo\recTestForGramm}{% + \@ifnextchar \%{\AddInfo{\%}\@firstoftwo\recTestForGramm}% + {#1}}}}}% + \def\recTestForGramm{\@ifnextchar *{\AddInfo{*}\@firstoftwo% + \recTestForGramm}{% + \@ifnextchar ?{\AddInfo{\char63}\@firstoftwo\recTestForGramm}{% + \@ifnextchar \#{\AddInfo{\#}\@firstoftwo\recTestForGramm}{% + \@ifnextchar \%{\AddInfo{\%}\@firstoftwo\recTestForGramm}% + {#2}}}}}% + \TestForGramm} +% +%%%%%%%%%%%%%%%% SUBLISTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newif\ifunembedded +\newcommand{\SubExlabel}{\SubExLBr\Exalph{SubExNo}\SubExRBr} +\def\a.{\ifindex\firstwordtrue\fi + \ifnum\theExDepth=0 \unembeddedtrue + \trivex.\fi + \stepcounter{ExDepth}%refstepcounter replaced + \begin{list}{\makebox[\labelwidth][l]{% + \ifnum\theExDepth=1 \SubExLBr\Exalph{ABC}\SubExRBr% + \else + \ifnum\theExDepth=2 % + \ifdim\currentlabel<\lessthanthousand% + \ifalignSubEx + \llap{\hbox to \alignSubExnegindent{\ifunembedded% + \SubExLBr\Exalph{SubExNo}\SubExRBr + \else\SubExlabel\fi\hss}}% + \else\SubExlabel\fi% + \else\ifunembedded% + \SubSubExLBr\Exroman{SubExNo}\SubSubExRBr + \else\SubExlabel\fi\fi + \else + \ifnum\theExDepth=3 % + \if@noftnote%\ifunembedded\mbox{$\bullet$!}\else + \SubSubExLBr\Exroman{SubSubExNo}\SubSubExRBr + %\fi + \else\Exarabic{SubSubExNo}\SubSubExRBr\fi + \fi\fi\fi}}% + {\labelsep\z@ + \ifnum\theExDepth=2\topsep .3\Extopsep\else\topsep 0pt\fi + \parsep\z@\itemsep\z@ + \ifnum\theExDepth=1 % + \usecounter{ABC}% + \settowidth{\currentlabel}{\ExLBr\Exarabic{ExNo}\ExRBr}% + \listdecl% + \else + \ifnum\theExDepth=2 % + \usecounter{SubExNo}% + \ifalignSubEx\ifdim\currentlabel<\lessthanthousand% + \leftmargin\z@\else\leftmargin=\SubExleftmargin\fi% + \else\leftmargin=\SubExleftmargin\fi% + \else + \ifnum\theExDepth=3 \usecounter{SubSubExNo}\fi + \leftmargin=\SubSubExleftmargin% + \fi + \labelwidth=\leftmargin% + \fi}% + \ifnum\theExDepth=1 \setlength{\Exlabelwidth}{4em}\fi% + %previous line added 2000/12/22 + \b.} +% +%%%%%%%%%%%%%%%%% ITEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\newExitem[#1]{\ifnum\theExDepth=2 % + \ifdim\currentlabel<\lessthanthousand% + \ifalignSubEx + \item[\llap{\hbox to \alignSubExnegindent{#1\hfill}}]% + \else + \item[#1\hfill]\fi + \else\item[#1\hfill]% + \fi + \else\item[#1\hfill]% + \fi\testforgramm} +\let\oldb=\b +\DeclareRobustCommand{\b}{\@ifnextchar.{\newb}{\oldb}} +\def\newb.{\ifindex\firstwordtrue\fi + \my@ifnextchar[{\newExitem}{\item\testforgramm}} +\let\oldc=\c +\DeclareRobustCommand{\c}{\@ifnextchar.{\b}{\oldc}} +\let\oldd=\d +\DeclareRobustCommand{\d}{\@ifnextchar.{\b}{\oldd}} +\let\e=\b +\let\f=\b +\def\z.{\end{list}\addtocounter{ExDepth}{-1}} +% +%%%%%%%%%%%%%%%%%%%% INDEXED BRACKETS %%%%%%%%%%%%%%%%%%%%%%%% +\newif\ifindex +\newif\iffirstword +\def\I#1#2 {#1\labelBr#2 } +\def\exi.#1\par{\indextrue\ex.#1 | blabla | \indexfalse\par} +\def\ai.#1 \par{\indextrue + \a.#1 | blabla | + \par + \indexfalse} +\def\finish|#1|{\ExEnd} +\newcommand{\testGrAndBr}{\GTest{}{\printGramm\checkforbr}} +\def\doaword#1 {% + \iffirstword\firstwordfalse\expandafter\testGrAndBr\fi% + #1 + \ifgloss\expandafter\checkforbrorstar\else + \expandafter\lookforwords\fi} +\newcommand{\checkforbrorstar}{\GTest{\checkforbr}{\printGramm\checkforbr}} +\newcommand{\lookforwords}{\@ifnextchar]{\firstwordfalse\@aber}% + {\@ifnextchar[{\firstwordfalse\@aber}% + {\@ifnextchar|{\firstwordfalse\finish}{\doaword}}}} +\def\labelBr#1 {\mbox{$\hspace{.05em}_{\mbox{\scriptsize\rm#1}}$} } +\newcommand{\jetzt}{\my@ifnextchar[{\@aber}{\my@ifnextchar]{\@aber}% + {\@schnell}}} +\def\@aber#1#2 {#1\jetzt#2 } +\def\@schnell#1 {\labelBr#1 \lookforwords} +\newcommand{\checkforbr}{\@ifnextchar[{\recurseonbr}% + {\@ifnextchar]{\recurseonbr}{}}} +\newcommand{\recurseonbr}{\my@ifnextchar[{\stripoffbr}% + {\my@ifnextchar]{\stripoffbr}{\labelBr}}} +\def\stripoffbr#1#2 {\textrm{#1}\recurseonbr#2 }%\rm changed to \textrm +% +%%%%%%%%%%%%%%%%%%%% GLOSSES %%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newif\ifgloss +%%% modification of cgloss4e %%%% +\def\getwords(#1,#2)#3 #4\\% #1=linebox, #2=\each, #3=1st word, #4=remainder + {\setbox#1=\vbox{\hbox{#2\strut\ifindex\expandafter\checkforbr\fi#3 }% + \unvbox#1}% + \def\more{#4}% + \ifx\more\empty\let\more=\donewords + \else\let\more=\getwords + \fi + \more(#1,#2)#4\\% + } +\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\end{flushleft}% + \global\glossfalse% + \ifindex\expandafter\lookforwords\fi {} } +%%% +\newcommand{\newgll}{\glosstrue\GTest{\gll}{\gll\printGramm}} +\def\exg.{\my@ifnextchar[{\newglossex}{\ex.\newgll}} +\def\newglossex[#1]{\ex.[#1]\newgll} +\def\ag.{\my@ifnextchar[{\newglossa}{\a.\newgll}} +\def\newglossa[#1]{\a.[#1]\newgll} +\def\newglossitem[#1]{\ifalignSubEx%\ifdim\currentlabel<\lessthanthousand% + \item[\llap{\hbox to \alignSubExnegindent{#1\hfill}}]% + \else + \item[#1\hfill]% + \fi +\newgll} +\def\bg.{\my@ifnextchar[{\newglossitem}{\item\newgll}} +\def\cg.{\bg.} +\def\dg.{\bg.} +\def\eg.{\bg.} +\def\fg.{\bg.} +% +%%%%%%%%%%%%%%%%%%%% GLOSSES WITH INDEXED BRACKETS %%%%%%%%%%%% +\def\exig.{\my@ifnextchar[{\newglossexi}{\exi.\newgll}} +\def\newglossexi[#1]{\exi.[#1]\newgll} +\let\exgi=\exig +\def\aig.{\my@ifnextchar[{\newglossai}{\ai.\newgll}} +\def\newglossai[#1]{\ai.[#1]\newgll} +\let\agi=\aig +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CROSS REFERENCES %%%%%%%%%%%%%% +\newcounter{tmpaEx} +\newif\ifNoFnRef +\newcommand{\Next}{\if@noftnote\NoFnReftrue\else\NoFnReffalse\fi + \copyExNo\stepcounter{tmpaEx}\printExNo}%refstepcounter replaced +\newcommand{\NNext}{\if@noftnote\NoFnReftrue\else\NoFnReffalse\fi + \copyExNo\addtocounter{tmpaEx}{2}\printExNo} +\newcommand{\TextNext}{\NoFnReftrue\copyExNo\stepcounter{tmpaEx}\printExNo}%refstepcounter replaced +\newcommand{\Last}{\if@noftnote\NoFnReftrue\else + \ifnum\Exarabic{FnExNo}=0 \NoFnReftrue\else\NoFnReffalse\fi + \fi + \copyExNo\printExNo} +\newcommand{\LLast}{\if@noftnote\NoFnReftrue\copyExNo% + \addtocounter{tmpaEx}{-1}% + \else + \ifnum\Exarabic{FnExNo}=0 \NoFnReftrue\copyExNo% + \addtocounter{tmpaEx}{-1}% + \else + \ifnum\Exarabic{FnExNo}=1 \NoFnReftrue\copyExNo% + \else + \NoFnReffalse\copyExNo\addtocounter{tmpaEx}{-1}% + \fi\fi\fi + \printExNo} +\newcommand{\copyExNo}{\strut\ifNoFnRef\setcounter{tmpaEx}{\value{ExNo}}% + \def\thetmpaEx{\Exarabic{tmpaEx}}% + \else + \setcounter{tmpaEx}{\value{FnExNo}}\def\thetmpaEx{\Exroman{tmpaEx}}% + \fi} +\def\complexExNo[#1]{\hbox{\if@noftnote\theExLBr\else\theFnExLBr\fi% + \thetmpaEx\firstrefdash#1\if@noftnote\theExRBr + \else\theFnExRBr\fi}}%hard wired bracket changed to \theExBr in version 4.0 +\newcommand{\printExNo}{\@ifnextchar[{\complexExNo}{% + \if@noftnote\theExLBr\else\theFnExLBr\fi\thetmpaEx% + \if@noftnote\theExRBr\else\theFnExRBr\fi\xspace}}%hard + %wired bracket changed to \theExBr in version 4.0 +%%%%%%%%%%%%%%%%%%%%%%%%%%% compatibility with beamer class %%%%%%%%%%%%%%%%%%%%%%%%%% +% This code has now been commented out in v 4.2 since it now causes problems with beamer +% The original problem it solved was probably a beamer issue, not a linguex issue. +% Users with old versions of beamer may need this code so let's leave it in the source for the moment +% +% +%\@ifundefined{usetheme}{}{\AtBeginDocument{\def\label#1{\strut%strut added to definition +%\@bsphack +% \protected@write\@auxout{}% +% {\string\newlabel{#1}{{\@currentlabel}{\thepage}}}% +%\@esphack}}} +%%%%%%%%%%%%%%%%%%%%%%%%%%% END %%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput
\ No newline at end of file |