%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% File: langsci-cgloss.sty %% Author: Language Science Press (http://langsci-press.org) %% Date: 2016-01-16 16:47:43 UTC %% Purpose: This file contains an adpated version of the cgloss %% package for glossing linguistic examples. %% Language: LaTeX %% Licence: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -*- LaTeX -*- % Modified version of cgloss4e.sty. Hacked and renamed cgloss.sty % by Alexis Dimitriadis (alexis@babel.ling.upenn.edu) % 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 % % Changes by Alexis Dimitriadis % % Removed flushleft environment and initial vskip to make macros usable % on the same line with earlier and/or later text, e.g., % \item Q: \gll ... \\ % ... \\ \hfill (Greek) % \trans Q: `...' % Note: Text following the gloss will appear on line one of the example; % To get a line break, insert one manually with \\ or use \trans or \glt. % (\gln does not end the line, since it was already the % case in cgloss4e that a translation must be ended with a line break). % % Modified \glt to keep translation on the same page as the text. % BUGS: does not work very gracefully with double spacing (struts are not % automatically inserted after the \vboxes used by the macros). % In double space mode without \nosinglegloss, when a translation % is not given, the next line of text is single-spaced from the glossed text. % With \nosinglegloss, the translation is set too close to the bottom line. %%% %%% 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. {\raggedright% \bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \twosent } \def\glll% % Introduces 3-line text-and-gloss. {\bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \threesent } \def\gllll% % Introduces 4-line text-and-gloss. {\bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \foursent } \def\glllll% % Introduces 5-line text-and-gloss. {\bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \fivesent } \def\gllllll% % Introduces 6-line text-and-gloss. {\bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \sixsent } \def\glllllll% % Introduces 7-line text-and-gloss. {\bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \sevensent } \def\gllllllll% % Introduces 8-line text-and-gloss. {\bgroup %\begin{flushleft} \ifx\@gsingle1% conditionally force single spacing (hpk/MC) \def\baselinestretch{1}\@selfnt\fi % \vskip\baselineskip\def\baselinestretch{1}% % \@selfnt\vskip-\baselineskip\fi% \bgroup \eightsent } % \def\glt{\vskip.0\baselineskip} % redefine \gltoffset to set off translation from ex and gloss \@ifundefined{gltoffset}{\def\gltoffset{0pt}}{} \def\glt{\ifhmode\\*[\gltoffset]\else\nobreak\vskip\gltoffset\nobreak\fi} % Introduces a translation \let\trans\glt \def\gln{\relax} \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 (marcel@cs.caltech.edu). % 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\linefour \newbox\linefive \newbox\linesix \newbox\lineseven \newbox\lineeight \newbox\wordone % a word from the first line (hbox) \newbox\wordtwo \newbox\wordthree \newbox\wordfour \newbox\wordfive \newbox\wordsix \newbox\wordseven \newbox\wordeight \newbox\gline % the constructed double line (hbox) \newskip\glossglue % extra glue between glossed pairs or tuples \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=\upshape}{\relax} \@ifundefined{eachwordtwo}{\let\eachwordtwo=\upshape}{\relax} \@ifundefined{eachwordthree}{\let\eachwordthree=\upshape}{\relax} \@ifundefined{eachwordfour}{\let\eachwordfour=\upshape}{\relax} \@ifundefined{eachwordfive}{\let\eachwordfive=\upshape}{\relax} \@ifundefined{eachwordsix}{\let\eachwordsix=\upshape}{\relax} \@ifundefined{eachwordseven}{\let\eachwordseven=\upshape}{\relax} \@ifundefined{eachwordeight}{\let\eachwordeight=\upshape}{\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, the {} is needed for CJK otherwise the space % would be ignored \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} \gdef\foursent#1\\ #2\\ #3\\ #4\\{% #1 = first line, #2 = second line, #3 = third \getwords(\lineone,\eachwordone)#1 \\% \getwords(\linetwo,\eachwordtwo)#2 \\% \getwords(\linethree,\eachwordthree)#3 \\% \getwords(\linefour,\eachwordfour)#4 \\% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \lastword{\eachwordfour}{\linefour}{\wordfour}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree \nointerlineskip \box\wordfour }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss \gl@stop} \gdef\fivesent#1\\ #2\\ #3\\ #4\\ #5\\{% #1 = first line, #2 = second line, #3 = third \getwords(\lineone,\eachwordone)#1 \\% \getwords(\linetwo,\eachwordtwo)#2 \\% \getwords(\linethree,\eachwordthree)#3 \\% \getwords(\linefour,\eachwordfour)#4 \\% \getwords(\linefive,\eachwordfive)#5 \\% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \lastword{\eachwordfour}{\linefour}{\wordfour}% \lastword{\eachwordfive}{\linefive}{\wordfive}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree \nointerlineskip \box\wordfour \nointerlineskip \box\wordfive }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss \gl@stop} \gdef\sixsent#1\\ #2\\ #3\\ #4\\ #5\\ #6\\{% #1 = first line, #2 = second line, #3 = third \getwords(\lineone,\eachwordone)#1 \\% \getwords(\linetwo,\eachwordtwo)#2 \\% \getwords(\linethree,\eachwordthree)#3 \\% \getwords(\linefour,\eachwordfour)#4 \\% \getwords(\linefive,\eachwordfive)#5 \\% \getwords(\linesix,\eachwordsix)#6 \\% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \lastword{\eachwordfour}{\linefour}{\wordfour}% \lastword{\eachwordfive}{\linefive}{\wordfive}% \lastword{\eachwordsix}{\linesix}{\wordsix}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree \nointerlineskip \box\wordfour \nointerlineskip \box\wordfive \nointerlineskip \box\wordsix }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss \gl@stop} \gdef\sevensent#1\\ #2\\ #3\\ #4\\ #5\\ #6\\ #7\\{% #1 = first line, #2 = second line, #3 = third \getwords(\lineone,\eachwordone)#1 \\% \getwords(\linetwo,\eachwordtwo)#2 \\% \getwords(\linethree,\eachwordthree)#3 \\% \getwords(\linefour,\eachwordfour)#4 \\% \getwords(\linefive,\eachwordfive)#5 \\% \getwords(\linesix,\eachwordsix)#6 \\% \getwords(\lineseven,\eachwordseven)#7 \\% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \lastword{\eachwordfour}{\linefour}{\wordfour}% \lastword{\eachwordfive}{\linefive}{\wordfive}% \lastword{\eachwordsix}{\linesix}{\wordsix}% \lastword{\eachwordseven}{\lineseven}{\wordseven}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree \nointerlineskip \box\wordfour \nointerlineskip \box\wordfive \nointerlineskip \box\wordsix \nointerlineskip \box\wordseven }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss \gl@stop} \gdef\eightsent#1\\ #2\\ #3\\ #4\\ #5\\ #6\\ #7\\ #8\\{% #1 = first line, #2 = second line, #3 = third \getwords(\lineone,\eachwordone)#1 \\% \getwords(\linetwo,\eachwordtwo)#2 \\% \getwords(\linethree,\eachwordthree)#3 \\% \getwords(\linefour,\eachwordfour)#4 \\% \getwords(\linefive,\eachwordfive)#5 \\% \getwords(\linesix,\eachwordsix)#6 \\% \getwords(\lineseven,\eachwordseven)#7 \\% \getwords(\lineeight,\eachwordeight)#8 \\% \loop\lastword{\eachwordone}{\lineone}{\wordone}% \lastword{\eachwordtwo}{\linetwo}{\wordtwo}% \lastword{\eachwordthree}{\linethree}{\wordthree}% \lastword{\eachwordfour}{\linefour}{\wordfour}% \lastword{\eachwordfive}{\linefive}{\wordfive}% \lastword{\eachwordsix}{\linesix}{\wordsix}% \lastword{\eachwordseven}{\lineseven}{\wordseven}% \lastword{\eachwordeight}{\lineeight}{\wordeight}% \global\setbox\gline=\hbox{\unhbox\gline \hskip\glossglue \vtop{\box\wordone % vtop was vbox \nointerlineskip \box\wordtwo \nointerlineskip \box\wordthree \nointerlineskip \box\wordfour \nointerlineskip \box\wordfive \nointerlineskip \box\wordsix \nointerlineskip \box\wordseven \nointerlineskip \box\wordeight }% }% \testdone \ifnotdone \repeat \egroup % matches \bgroup in \gloss \gl@stop} %\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\end{flushleft}} % \leavevmode puts us back in horizontal mode, so that a \\ will work \def\gl@stop{{\hskip -\glossglue}\unhbox\gline\leavevmode \egroup} \endinput