blob: eedaf886e00be881c564db1e1d4f4b9c27165311 [file] [log] [blame]
% -*- LaTeX -*-
% Following borrows from Covington's style files inspired by Midnight by M.
% de Groot, adapted to be used with gb4e.sty: examples beginning with \ex can
% contain glosses directly. Default is
% Linguistic Inquiry style with all lines in \rm; to change a line (eg. to
% \it for a particular journal, change the appropriate line: e.g.,
% \let\eachwordone=\rm in a copy of this file. Note that it will NOT work
% to put \it before the line as the words are parsed separately.
% Use \singlegloss to force single-spaced glosses even in double-space
% environments. Works also in footnotes (^M as delimiter replaced by
% \\)---hpk
%
%%%
%%% 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.'
%
% 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.'
%
% 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).
%
% Thanks to Marcel R. van der Goot for permission to reproduce code.
\let\@gsingle=1
\def\singlegloss{\let\@gsingle=1}
\def\nosinglegloss{\let\@gsingle=0}
\@ifundefined{new@fontshape}%
{\def\@selfnt{\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi}}
{\def\@selfnt{\selectfont}}
\def\gll% % Introduces 2-line text-and-gloss.
{\begin{flushleft}
\ifx\@gsingle1% conditionally force single spacing (hpk/MC)
\vskip\baselineskip\def\baselinestretch{1}%
\@selfnt\vskip-\baselineskip\fi%
\bgroup
\twosent
}
\def\glll% % Introduces 3-line text-and-gloss.
{\begin{flushleft}
\ifx\@gsingle1% conditionally force single spacing (hpk/MC)
\vskip\baselineskip\def\baselinestretch{1}%
\@selfnt\vskip-\baselineskip\fi%
\bgroup
\threesent
}
\def\glt{\vskip.17\baselineskip}
% Introduces a translation
\let\trans\glt
\def\glend{} % obsolete
% 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 ([email protected]).
% Original Midnight/gloss.tex and Midnight/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
\@ifundefined{eachwordone}{\let\eachwordone=\rm}{\relax}
\@ifundefined{eachwordtwo}{\let\eachwordtwo=\rm}{\relax}
\@ifundefined{eachwordthree}{\let\eachwordthree=\rm}{\relax}
\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
}
\gdef\getwords(#1,#2)#3 #4\\% #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\\%
}
\gdef\donewords(#1,#2)\\{}%
\gdef\twosent#1\\ #2\\{% #1 = first line, #2 = second line
\getwords(\lineone,\eachwordone)#1 \\%
\getwords(\linetwo,\eachwordtwo)#2 \\%
\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
\gl@stop}
\gdef\threesent#1\\ #2\\ #3\\{% #1 = first line, #2 = second line, #3 = third
\getwords(\lineone,\eachwordone)#1 \\%
\getwords(\linetwo,\eachwordtwo)#2 \\%
\getwords(\linethree,\eachwordthree)#3 \\%
\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
\gl@stop}
\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\end{flushleft}}
\endinput