summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gb4e/cgloss4e.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gb4e/cgloss4e.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/gb4e/cgloss4e.sty')
-rw-r--r--macros/latex/contrib/gb4e/cgloss4e.sty168
1 files changed, 168 insertions, 0 deletions
diff --git a/macros/latex/contrib/gb4e/cgloss4e.sty b/macros/latex/contrib/gb4e/cgloss4e.sty
new file mode 100644
index 0000000000..b066dbd993
--- /dev/null
+++ b/macros/latex/contrib/gb4e/cgloss4e.sty
@@ -0,0 +1,168 @@
+% -*- LaTeX -*-
+% Following borrows from Covington's style files inspired by Midnight by M.
+% van der Goot, 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 (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\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
+
+% For any REALLY old distributions without \rmfamily
+\@ifundefined{rmfamily}{\let\rmfamily=\rm}
+
+\@ifundefined{eachwordone}{\let\eachwordone=\rmfamily}{\relax}
+\@ifundefined{eachwordtwo}{\let\eachwordtwo=\rmfamily}{\relax}
+\@ifundefined{eachwordthree}{\let\eachwordthree=\rmfamily}{\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