summaryrefslogtreecommitdiff
path: root/macros/generic/expex
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/generic/expex
Initial commit
Diffstat (limited to 'macros/generic/expex')
-rw-r--r--macros/generic/expex/README50
-rw-r--r--macros/generic/expex/epltxchapno.sty35
-rw-r--r--macros/generic/expex/epltxfn.sty18
-rw-r--r--macros/generic/expex/eptexfn.tex27
-rw-r--r--macros/generic/expex/expex-demo.tex1037
-rw-r--r--macros/generic/expex/expex-doc.pdfbin0 -> 426992 bytes
-rw-r--r--macros/generic/expex/expex.sty5
-rw-r--r--macros/generic/expex/expex.tex1618
8 files changed, 2790 insertions, 0 deletions
diff --git a/macros/generic/expex/README b/macros/generic/expex/README
new file mode 100644
index 0000000000..802a49a645
--- /dev/null
+++ b/macros/generic/expex/README
@@ -0,0 +1,50 @@
+
+ExPex May 2017
+
+-------------------------------------------------------------
+ExPex is maintained by John Frampton <j.frampton@neu.edu>
+-------------------------------------------------------------
+
+ExPex is designed to assist linguists in typesetting examples and
+glosses and in creating named reference to examples and parts of
+examples.
+
+-------------------------------------------------------------
+
+COPYRIGHT 2006-2017 by John Frampton <j.frampton@neu.edu>
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License, which can be found in the CTAN
+archives in directory macros/latex/base/lppl.txt.
+
+-------------------------------------------------------------
+
+The files in this distribution (v 5.1b) are:
+
+ README
+ expex.tex Main macro file
+ expex.sty Latex wrapper for expex.tex
+ expex-doc.pdf User's Guide
+
+ eptexfn.tex Tex footnote macros
+ epltxfn.sty LaTex footnote package
+ epltxchapno.sty LaTex package for chapter.number example
+ numbering
+
+ expex-demo.tex The code for most of the examples
+ expex-doc.zip The source code for the User's Guide
+
+-------------------------------------------------------------
+
+expex-demo.tex
+
+This file contains most of the examples in the documentation. It is
+intended to facilitate user experimentation with ExPex typesetting.
+Users can easily modify examples and see what the effect is. It can be
+run under either Plain Tex or LaTex. Except for expex.tex and
+expex.sty, all files needed to run expex-demo should be part of any
+Tex installation.
+
+
+John Frampton 5/25/2017
+
diff --git a/macros/generic/expex/epltxchapno.sty b/macros/generic/expex/epltxchapno.sty
new file mode 100644
index 0000000000..e0c317dab2
--- /dev/null
+++ b/macros/generic/expex/epltxchapno.sty
@@ -0,0 +1,35 @@
+\ProvidesPackage{epltxchapno}%
+ [2014/01/27 v1.0 ExPex-LaTex chapter numbering integration (JF)]
+\RequirePackage{expex}
+
+% epltxchapno.sty is for use in conjunction with LaTex classes which use
+% \chapter (book.cls, scrbook.cls, report.cls, and memoir.cls at least).
+% \excnt is set to 1 at the beginning of each chapter and examples are
+% numbered (n.1), (n.2), etc. in chapter n. The \deftag/\getref
+% mechanism produces the desired reference.
+
+\@ifundefined{if@mainmatter}{\newif\if@mainmatter\@mainmattertrue}\relax
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \refstepcounter{chapter}%
+ \excnt=1
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}%
+ {\protect\numberline{\thechapter}#1}%
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\p@}}%
+ \addtocontents{lot}{\protect\addvspace{10\p@}}%
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else
+ \@makechapterhead{#2}%
+ \@afterheading
+ \fi}
+\lingset{exnotype=chapter.arabic}
+
diff --git a/macros/generic/expex/epltxfn.sty b/macros/generic/expex/epltxfn.sty
new file mode 100644
index 0000000000..d052f19807
--- /dev/null
+++ b/macros/generic/expex/epltxfn.sty
@@ -0,0 +1,18 @@
+\ProvidesPackage{epltxfn}%
+ [2011/12/05 v1.0 LaTex footnote macro for ExPex (JF)]
+\RequirePackage{expex}
+\makeatletter
+\def\everyfootnote{%
+ \keepexcntlocal
+ \excnt=1
+ \lingset{exskip=1ex,exnotype=roman,sampleexno=,
+ labeltype=alpha,labelanchor=numright,labeloffset=.6em,
+ textoffset=.6em}
+}
+\renewcommand{\@makefntext}[1]{%
+ \everyfootnote
+ \parindent=1em
+ \noindent
+ \@thefnmark.\enspace #1%
+}
+\resetatcatcode
diff --git a/macros/generic/expex/eptexfn.tex b/macros/generic/expex/eptexfn.tex
new file mode 100644
index 0000000000..2288a0aba8
--- /dev/null
+++ b/macros/generic/expex/eptexfn.tex
@@ -0,0 +1,27 @@
+\message{2011/12/05 v1.0 Tex footnote macro for ExPex (JF)}
+\makeatletter
+\def\everyfootnote{%
+ \keepexcntlocal
+ \excnt=1
+ \lingset{exskip=1ex,exnotype=roman,sampleexno=,
+ labeltype=alpha,labelanchor=numright,labeloffset=.6em,
+ textoffset=.6em}
+}
+\newcount\fnno \fnno=0
+\def\footnote{\let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \putfnno\@sf
+ \footnotebody}
+\def\putfnno{\global\advance\fnno by 1 $^{\the\fnno}$}
+\def\footnotebody{\expandafter\vfootnote\expandafter{\the\fnno}}
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \parindent=1em
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \ifx\footnotesize\undefined
+ \@expexerror{\footnotesize must be defined}\fi
+ \footnotesize
+ \everyfootnote \noindent #1.\enspace\footstrut\futurelet\next\fo@t}
+\resetatcatcode
diff --git a/macros/generic/expex/expex-demo.tex b/macros/generic/expex/expex-demo.tex
new file mode 100644
index 0000000000..b960840014
--- /dev/null
+++ b/macros/generic/expex/expex-demo.tex
@@ -0,0 +1,1037 @@
+
+% The preamble has the effect that the file can either be Texed or
+% LaTexed -- as is.
+
+\ifx\ProvidesFile\undefined
+ % if Tex
+ \input expex
+ \font\eightrm=cmr8
+ \font\eightit=cmti8
+ \font\tensc=cmcsc10
+ \let\sc=\tensc
+ \def\textsc#1{{\sc #1}}
+ \def\footnotesize{\eightrm \let\it=\eightit \baselineskip=9pt}
+ \def\enddemo #1#2{}
+ \magnification=\magstep1
+ \else
+ % if LaTex
+ \documentclass[12pt]{article}
+ \usepackage{expex}
+ \let\enddemo=\relax
+ \begin{document}
+ \fi
+%--------------------------------------------------------------------
+
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\vskip\lingaboveexskip
+Example (\nextx) is well-known from the literature on parasitic
+gaps. Here we are concerned with example formatting, not with the
+interesting syntax.
+
+\ex
+I wonder which article John filed {\sl t\/} without reading {\sl e}.
+\xe
+It is beyond the scope of this investigation to determine exactly why
+John did not read the article.
+
+Multipart examples are equally straightforward.
+
+\pex Two examples of parasitic gaps.
+\a He is the man that John did not interview {\sl e\/} before
+he gave the job to {\sl e}.
+\a He is someone who John expected {\sl e\/} to be successful
+though believing {\sl e\/} to be incompetent.
+\xe
+Here, we can speculate on why John did not do an interview before
+recommending the person for a job. It is likely that the person
+was a crony of John. In (\lastx b), perhaps John knew that
+the ``someone'' went to prep school with the owner of the
+business.
+\vskip\lingbelowexskip
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\bigskip
+If examples and parts of examples are tagged, they can be
+referred to by name.
+
+\pex<pg>
+\a This is the man that John interviewed {\sl e\/} before
+telling you that you should give the job to~{\sl e}.
+\a<A> This is someone who John expected {\sl e\/} to be successful
+though believing {\sl e\/} to be incompetent.
+\xe
+
+Now, names can be used. The name/reference pairs can be written
+to a file, making forward reference possible and backwards
+reference at a distance reliable. You can refer to part
+\getref{pg.A} of example (\getref{pg}), or (\getfullref{pg.A}).
+
+If you use a tag that has not been defined, {\sl ExPex\/} will
+let you know. If you try to reference a name which has no
+reference, \getref{pg.B} for example, a warning will be issued
+and the (bracketed) tag printed as shown at the beginning of this
+sentence. If you try to tag a part of an example which has no
+tag, {\sl ExPex\/} will let you know about that as well.
+\bigskip
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren
+w\"urde seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb Cl V Agr Neg Agr Tns Agr //
+\glc 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[interpartskip=3ex]
+\a
+\begingl
+\gla pwa- min -kwa -pun//
+\glb Neg V Agr Tns //
+\glc {} give 2pl{\sc nom}.3pl{\sc acc} preterit //
+\glft `you (pl) didn't give them (something)'//
+\endgl
+\a
+\begingl[everygl=\openup.5ex,everygla=,everyglb=,
+ everyglft=\it,aboveglftskip=1.5ex]
+\gla pwa- min -kwa -pun//
+\glb Neg V Agr Tns //
+\glc {} give 2pl{\sc nom}.3pl{\sc acc} preterit //
+\glft `you (pl) didn't give them (something)'//
+\endgl
+\a
+\begingl[everygl=,everygla=\bf,everyglb=\it,
+ everyglft=,aboveglftskip=0pt]
+\gla pwa- min -kwa -pun //
+\glb Neg V Agr Tns //
+\glc {} give 2pl{\sc nom}.3pl{\sc acc} preterit //
+\glft `you (pl) didn't give them (something)'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\exdisplay
+The following example is well-known from the literature on
+parasitic gaps. Here we are concerned with example formatting,
+not with the interesting syntax.
+\ex
+I wonder which article John filed {\sl t\/} without reading {\sl e}.
+\xe
+Various aspects of the format are controlled by parameters, which
+can be set either globally or via an optional argument.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\exdisplay
+The following example is well-known from the literature on
+parasitic gaps. Here we are concerned with example formatting,
+not with the interesting syntax.
+
+\ex[numoffset=2em,textoffset=.5em,aboveexskip=1ex,belowexskip=1ex]
+I wonder which article John filed {\sl t\/} without reading {\sl e}.
+\xe
+
+\noindent Various aspects of the format are controlled by
+parameters, which can be set either globally or via an optional
+argument.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+Und hier k\"onnen wir sehen was f\"ur Unfug wird gemacht
+wenn er einen ganz langen Satz binnen kriegt.\par\nobreak
+\xe
+
+\ex~
+$\alpha$ {\it governs\/} $\beta$ if $\alpha=X^0$ (in the
+sense of X-bar theory), $\alpha$ c-commands $\beta$, and $\beta$
+is not protected by a maximal projection.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex This is a crucial example.\xe
+It is clear that this example is related to the earlier
+example (5), which is repeated below.
+\ex[exno=5]
+This is an example that was given many pages earlier.\xe
+If we are on the right track, as the saying goes,
+we expect the next example to be grammatical. But it is not.
+\ex * \dots\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno=$\Delta$] Earlier example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno={[14, repeated]},exnoformat=X] Earlier example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a This is the first example.
+\a This is the second example.
+\xe
+
+\pex~<Pre> Multipart examples often have a title or preamble of some
+kind.
+\a This is the first example.
+\a This is the second example.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\keepexcntlocal \excnt=9
+\pex
+\a I consider firemen available. (generic only)
+\a I consider firemen intelligent. (generic only)
+\xe
+Exceptional case marking (ECM) verbs seem more or less to allow both
+existential and generic interpretations of complement subjects:
+\pex
+\a I believe firemen to be available. (both generic and existential)
+\a I believe violists to be intelligent. (generic only)
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\keepexcntlocal \excnt=9
+\pex[sampleexno=(10)]
+\a I consider firemen available. (generic only)
+\a I consider firemen intelligent. (generic only)
+\xe
+Exceptional case marking (ECM) verbs seem more or less to allow both
+existential and generic interpretations of complement subjects:
+\pex
+\a I believe firemen to be available. (both generic and existential)
+\a I believe violists to be intelligent. (generic only)
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\leftline{\vbox{%
+\ex[textoffset=3em]
+\hsize=3in \rightskip=0pt plus 2em \it \advance\baselineskip by 2pt
+Und hier k\"onnen wir sehen was f\"ur Unfug wird gemacht
+wenn er einen ganz langen Satz binnen kriegt.
+\xe
+}\hfil}
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex *Jack and Jill wented up the hill.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex \judge* Jack and Jill wented up the hill.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a There is a pair of pants on the floor.
+\a \judge{?*}There are a pair of pants on the floor.
+\a \judge*There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a There is a pair of pants on the floor.
+\a \ljudge{?*}There are a pair of pants on the floor.
+\a \ljudge*There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[*=?*]
+\a There is a pair of pants on the floor.
+\a \ljudge{?*}There are a pair of pants on the floor.
+\a \ljudge*There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[*]
+\a There is a pair of pants on the floor.
+\a \ljudge* There are a pair of pants on the floor.
+\a \ljudge* There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[*=?*,textoffset=!-.3em]
+\a There is a pair of pants on the floor.
+\a \ljudge{?*} There are a pair of pants on the floor.
+\a \ljudge* There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+ \ex<wapm>
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb CL V AGR NEG AGR TNS AGR //
+\glb 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<sicher>
+\begingl
+\glpreamble Mary ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr Herz auszusch\"utten.//
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to
+throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\hsize=4in
+\begingl
+\glpreamble Mary ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr Herz auszusch\"utten.//
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to
+throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glspace=!1em,everygla=,everyglb=\footnotesize,aboveglbskip=-.2ex]<wapm2>
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb CL V AGR NEG AGR TNS AGR //
+\glc 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<Marysicher>
+\begingl
+\gla Mary$_i$ ist sicher, + dass es den Hans nicht st\"oren w\"urde
++ seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to
+throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<wiye>
+\begingl
+\gla wiye kepi e- @ ca//
+\glb two whitemen {\sc 1p:3d}- found//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[everygla=,glhangstyle=normal]<fanui>
+\begingl
+\gla Fa'nu'i yu' ni \nogloss{[[} @ {\it O} t{\it in\/}aitai-mu
+\nogloss{{\it t\/}]} na {lepblu].}//
+\glb show me Obl Op {\it WH\/}[obj].read-agr L book//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[everygla=,glhangstyle=normal]<umasudda>
+\begingl
+\gla Um-\"asudda' h\"am yan \nogloss{$[\,$} @ i taotao \nogloss{$[\,$} @
+{\it O\/} ni si Juan ilek-\~na nu guahu \nogloss{$[\,$} @ mal\"agu' gui
+\nogloss{$[\,$} @
+asudd\"a'-\~na \nogloss{{\it t\/}$\,]]]]$.}//
+\glb agr-meet we with the person Op Comp the Juan say-agr Obl me
+agr.want he {\it WH\/}[obl].meet-agr//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel]
+\begingl
+k-[CL/2] wapm[V/see] -a[AGR/\sc 3acc] -s'i[NEG]
+-m[AGR/\sc 2pl] -wapunin[TNS/preterit] -uk[AGR/\sc 3pl]
+\glft `you (pl) didn't see them'
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it,\sc,\sc},
+ glnabovelineskip={,-2pt}]
+\begingl
+k-[cl/2]
+wapm[v/\rm see]
+-a[agr/3acc]
+-s'i[neg]
+-m[agr/\sc 2pl]
+-wapunin[tns/preterit]
+-uk[agr/3pl]
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl[glstyle=nlevel,glneveryline={}]
+Fa'nu'i[show]
+yu'[me] ni[Obl]
+\nogloss{[[\thinspace}@ {\it O}[Op]
+t{\it in\/}aitai-mu[{\it WH\/}{[obj]}.read-agr]
+\nogloss{{\it t}\thinspace ]}
+na[L]
+lepblu[book]@ \nogloss{].}
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it}]
+\gdef\AccentedBarredW{$\acute{\hbox{$\overline w$}}$}%
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl \xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it},glnabovelineskip={,.5ex}]
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl \xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it,\vrule height14pt width0pt}]
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl \xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it},everyglword={\baselineskip=18pt}]
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl
+\gla \rightcomment{[Potawatami]}k- wapm -a -s'i -m -wapunin -uk //
+\glb \rightcomment{category}Cl V Agr$_1$ Neg Agr$_2$ Tns Agr$_3$//
+\glb 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'\trailingcitation{(Hockett 1948,
+ p. 143)}//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a\relax [Which pilot who shot at it$_1$]$_2$ hit [which
+MIG$_2$ that had chased him$_2$]$_1$?\trailingcitation{(Barss, 2000)}
+
+\a\relax [Which pilot who shot at it$_1$]$_2$ hit [which MIG$_2$ that had
+chased him$_2$]$_1$?\trailingcitation{(Higgenbotham and May, 1981)}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\hsize=3.5in
+\ex
+\rightcomment{[Potawatami]}
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb \rightcomment{category}Cl V Agr$_1$ Neg Agr$_2$ Tns Agr$_3$//
+\glb 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'\trailingcitation{(Hockett 1948,
+ p. 143)}//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[extraglskip=2pt]
+\a \begingl
+\gla Um-\"asudda' h\"am yan \nogloss{$[\,$} @ i taotao \nogloss{$[\,$} @ {\it O\/}
+ni si Juan ilek-\~na nu guahu \nogloss{$[\,$} @ mal\"agu' gui
+\nogloss{$[\,$} @
+asudd\"a'-\~na \nogloss{{\it t\/}$\,]]]]$.}//
+\glb agr-meet we with the person Op Comp the Juan say-agr Obl me
+agr.want he {\it WH\/}[obl].meet-agr//
+\endgl
+\a \begingl[extraglskip=!.5ex]
+\gla Um-\"asudda' h\"am yan \nogloss{$[\,$} @ i taotao \nogloss{$[\,$} @ {\it O\/}
+ni si Juan ilek-\~na nu guahu \nogloss{$[\,$} @ mal\"agu' gui
+\nogloss{$[\,$} @
+asudd\"a'-\~na \nogloss{{\it t\/}$\,]]]]$.}//
+\glb agr-meet we with the person Op Comp the Juan say-agr Obl me
+agr.want he {\it WH\/}[obl].meet-agr//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\defineglwlevels{cat,gloss}
+\lingset{everyglcat=\footnotesize,aboveglcatskip=-.5ex}
+
+\ex
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glcat Cl V Agr Neg Agr Tns Agr //
+\glgloss 2 see {3\sc acc} {} {2\sc pl} preterit {3\sc pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glftpos=right,glhangstyle=none]
+\let\\=\textsc
+\begingl
+\gla
+Hom\^{a}o sa \v{c}\^{o} p\^{o} tha \~{n}u nao ng\u{a} hmua. \~{N}u
+dj\u{a} g\u{a}, \~{n}u dj\u{a} \v{c}\u{o}ng \~{n}u, laih gui r\^{e}o
+\~{n}u. Todang bboi r\^{o}k jolan \~{n}u nao hma, \~{n}u bb\^{o}h sa
+droi mr\u{a} d\u{o} bboi gah, a, hruh \~{n}u.//
+\glb
+\\{exist} one \\{clf} person old \\{3s} go do field \\{3s} hold
+machete \\{3s} hold hoe \\{3s} and carry.on.back back.basket \\{3s}
+while at along trail \\{3s} go field \\{3s} see one \\{clf} peacock
+stay at \\{drct} -- nest \\{3s}//
+\glft
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[everypanel=\footnotesize]<panelex>
+\let\\=\textsc
+\beginglpanel[ssratio=.5,glhangstyle=none]
+\gla Hom\^{a}o$^1$ sa \v{c}\^{o} p\^{o} tha \~{n}u nao ng\u{a}
+hmua. \~{N}u dj\u{a} g\u{a}, \~{n}u dj\u{a} \v{c}\u{o}ng \~{n}u,
+laih gui r\^{e}o \~{n}u. Todang bboi r\^{o}k jolan \~{n}u nao
+hma, \~{n}u bb\^{o}h sa droi mr\u{a} d\u{o}$\,^4$ bboi gah, a, hruh
+\~{n}u.//
+\glb \\{exist} one \\{clf} person old \\{3s} go$^2$ do field
+\\{3s} hold machete \\{3s} hold hoe \\{3s} and$^3$ carry.on.back
+back.basket \\{3s} while at along trail \\{3s} go field \\{3s}
+see one \\{clf} peacock stay at \\{drct} -- nest \\{3s}
+//
+\endgl
+1.\enspace {\it hom\^{a}o} also means `have', reflecting the
+strong tendency across languages to use the same word for
+possession and the existential. {\it hom\^{a}o} is clause-initial
+in existential clauses, but it comes after the subject in
+possession clauses.
+
+2.\enspace All verbs are glossed with a bare form, as Jarai has
+no inflectional morphology. Although Jarai has lexical items that
+encode tense, they are relatively infrequent in text.
+
+3.\enspace The word {\it laih} is literally `after; finish', but
+that is clearly not the meaning here. Probably {\it laih} here is
+an abbreviation for {\it laih an\u{u}n}, `after that; and', hence
+the gloss `and'.
+
+4.\enspace {\it d\u{o}} `sit, stay' is used like a copula in
+locative clauses, which is what I assume here (`a~peacock
+[which was] beside its nest'); however, this could just as well
+mean `a peacock sitting beside its nest', retaining the posture
+semantics.
+\endpanel
+\bigskip
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glhangstyle=cascade]
+\let\\=\textsc
+\begingl
+\gla
+Hom\^{a}o sa \v{c}\^{o} p\^{o} tha \~{n}u nao ng\u{a} hmua. \~{N}u
+dj\u{a} g\u{a}, \~{n}u dj\u{a} \v{c}\u{o}ng \~{n}u, laih gui r\^{e}o
+\~{n}u. Todang bboi r\^{o}k jolan \~{n}u nao hma, \~{n}u bb\^{o}h sa
+droi mr\u{a} d\u{o} bboi gah, a, hruh \~{n}u.//
+\glb
+\\{exist} one \\{clf} person old \\{3s} go do field \\{3s} hold
+machete \\{3s} hold hoe \\{3s} and carry.on.back back.basket \\{3s}
+while at along trail \\{3s} go field \\{3s} see one \\{clf} peacock
+stay at \\{drct} -- nest \\{3s}//
+\glft
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glufcloseup=.4ex,everygluf=\footnotesize]
+\begingl
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren
+ w\"urde seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it \gluf/the/ACC/ Hans not annoy would
+ \gluf/his/DAT/ \gluf/girlfriend/DAT/ \gluf/her/ACC/
+ \gluf/heart/ACC/ {out to throw}//
+\glft `Mary is sure that to reveal her heart to his girlfriend
+would not damage John.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it,,\footnotesize},
+ glnabovelineskip={,,-.4ex},extraglskip=0pt]
+\begingl
+Mary$_i$[Mary]
+ist[is]
+sicher,[sure]
+dass[that]
+es[it]
+den[the/ACC]
+Hans[Hans]
+nicht[not]
+st\"oren[annoy]
+w\"urde[would]
+seiner[his/DAT]
+Freundin[girlfriend/DAT]
+ihr$_i$[her/ACC]
+Herz[heart/ACC]
+auszusch\"utten.[out to throw]
+\glft `Mary is sure that to reveal her heart to his girlfriend
+would not damage John.'
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glspace=1.5em,everygla=\hfil,glwordalign=center,
+ everyglc=\hfil,aboveglbskip=-.2ex]<wapm2>
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb CL V AGR NEG AGR TNS AGR //
+\glc 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glhangstyle=cascade,
+ glneveryline={\insertno,\it,},
+ glwordalign=center,
+ glnabovelineskip={,-1pt},glspace=!.4em]
+\count255=1
+\def\insertno{\footnotesize(\the\count255)\global\advance\count255 by 1}%
+\begingl[]
+[Hom\^{a}o/\textsc{exist}]
+[sa/one]
+[\v{c}\^{o}/\textsc{clf}]
+[p\^{o}/person]
+[tha/old]
+[\~{n}u/\textsc{3s}]
+[nao/go]
+[ng\u{a}/do]
+[hmua./field]
+[\~{N}u/\textsc{3s}]
+[dj\u{a}/hold]
+[g\u{a},/machete]
+[\~{n}u/\textsc{3s}]
+[dj\u{a}/hold]
+[\v{c}\u{o}ng/hoe]
+[\~{n}u,/\textsc{3s}]
+[laih/and]
+[gui/carry.on.back]
+[r\^{e}o/back.basket]
+[\~{n}u./\textsc{3s}]
+[Todang/while]
+[bboi/at]
+[r\^{o}k/along]
+[jolan/trail]
+[\~{n}u/\textsc{3s}]
+[nao/go]
+[hma,/field]
+[\~{n}u/\textsc{3s}]
+[bb\^{o}h/see]
+[sa/one]
+[droi/\textsc{clf}]
+[mr\u{a}/peacock]
+[d\u{o}/stay]
+[bboi/at]
+[gah,/\textsc{drct}]
+[a,/--]
+[hruh/nest]
+[\~{n}u./\textsc{3s}]
+\glft
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[interpartskip=0pt]
+\a First\deftag{the first part of example \lastx}{FP}
+\a Second\deftagex{snoopy}\deftaglabel{dog}
+\a Third\deftaglabel{a}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[everylabel=\it]
+\a First Example.
+\a Second Example.\deftag{\lastx\lastlabel}{snoopy}
+\a Third Example.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno=\getref{snoopy}] Second example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno={\getref{snoopy}, repeated},exnoformat={[X]}]
+Second example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[labeltype=numeric]<dog>
+\a First Example.
+\a<G> Second Example.
+\a Third Example.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno={\getfullref{dog.G}}] Second example\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\vtop{\halign{#\hfil&& \qquad #\hfil\cr
+baudh& bu-baudh& know, wake\cr
+smai& si-smai& smile\cr
+suap& su-suap& sleep\cr
+miaks& mi-miaks& glitter\cr
+auc& u-auc& please\cr
+}}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex The perfect stems of some roots with a
+high vowel in their nucleus\par\nobreak\medskip
+\quad\vbox{\halign{%
+#\hfil&& \hskip3em #\hfil\cr
+\hfil\hwit{root}& \hfil\hwit{perfect stem}&
+ \hfil\hwit{gloss}\cr
+\noalign{\smallskip}
+baudh& bu-baudh& `know, wake'\cr
+smai& si-smai& `smile'\cr
+suap& su-suap& `sleep'\cr
+miaks& mi-miaks& `glitter'\cr
+auc& u-auc& `please'\cr
+}}\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex The perfect stems of some roots with a
+high vowel in their nucleus\par\nobreak\medskip
+\quad\vbox{\halign{%
+#\hfil& \quad #\hfil&& \hskip3em #\hfil\cr
+& \hfil\hwit{root}& \hfil\hwit{perfect stem}&
+ \hfil\hwit{gloss}\cr
+\noalign{\smallskip}
+a.& baudh& bu-baudh& `know, wake\cr
+b.& smai& si-smai& `smile'\cr
+c.& suap& su-suap& `sleep'\cr
+d.& miaks& mi-miaks& `glitter'\cr
+e.& auc& u-auc& `please'\cr
+}}\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<Washo>
+\vtop{\labels\halign{\tl #\hfil&& \quad #\hfil\cr
+\nl & \hwit{Root}& \hwit{Plural}& \hwit{Gloss}\cr
+& baloxat& baloxaxat& bows\cr
+& moya& moyaya& shoulder\cr
+\deftaglabel{A}& nent'us& net'unt'us& old women\cr
+\deftaglabel{B}& mokgo& mogokgo& shoes\cr
+}}\xe
+Examples (\getfullref{Washo.A}) and (\getfullref{Washo.B}) are
+the most complex, and therefore the most revealing.
+Examples (\getref{Washo}\getref{Washo.A},\getref{Washo.B}) are
+the most complex, and therefore the most revealing.
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\hsize=4.3in
+\exdisplay[dima=.5em,dimb=.4em,textoffset=.5em]
+\def\\#1{$\acute{\hbox{\=#1}}$}%
+\tabskip=0pt
+\openup.4ex
+\halign to \hsize{\tspace[dima]#\tspace[textoffset]\hfil&
+ #\hfil\tabskip=0pt plus 1fil&
+ #\hfil& #\hfil& \tspace[dimb]#\hfil&
+ #\hfil & #\hfil\tabskip=0pt\cr
+\omit\exnoprint\hidewidth&
+ \multispan6 \hwit{Present Indicative}\crnb
+&\multispan3 \hwit{active}& \multispan3 \hwit{middle}\cr
+& \hwit{sg}& \hwit{du}& \hwit{pl}&
+ \hwit{sg}& \hwit{du}& \hwit{pl}\cr
+\it 1& {\bf dv\'e\.s}-mi& dvi\.s-v\'as& dvi\.s-m\'as&
+ dvi\.s-\'e& dvi\.s-v\'ahe& dvi\.s-m\'ahe\cr
+\it 2& {\bf dv\'ek}-\.si& dvi\.s-\.th\'as& dvi\.s-\.th\'a&
+ dvik\.s-\'e& dvi\.s-\\athe& dvi\.d-\.dhv\'e\cr
+\it 3& {\bf dv\'e\.s}-\.ti& dvi\.s-\.t\'as& dvi\.s-\'anti&
+ dvi\.s-\.t\'e& dvi\.s-\\ate& dvi\.s-\'ate\cr
+}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[exbreakpenalty=-10,interpartskip=.25ex]
+\a example A
+\a contrast with example A\exbreak
+\a example B
+\a variation on B
+\a another variation on B
+\a a third variation on B\exbreak
+\a example C
+\a contrast with example C
+\xe
+\endgroup
+\enddemo\end{document}\bye
diff --git a/macros/generic/expex/expex-doc.pdf b/macros/generic/expex/expex-doc.pdf
new file mode 100644
index 0000000000..7fdd4d6c37
--- /dev/null
+++ b/macros/generic/expex/expex-doc.pdf
Binary files differ
diff --git a/macros/generic/expex/expex.sty b/macros/generic/expex/expex.sty
new file mode 100644
index 0000000000..4a9fd3c826
--- /dev/null
+++ b/macros/generic/expex/expex.sty
@@ -0,0 +1,5 @@
+\ProvidesPackage{expex}
+ [5/1/2017 v5.1b LaTex wrapper for expex.tex (JF)]
+\RequirePackage{xkeyval}
+\input expex
+\endinput
diff --git a/macros/generic/expex/expex.tex b/macros/generic/expex/expex.tex
new file mode 100644
index 0000000000..737aabad5b
--- /dev/null
+++ b/macros/generic/expex/expex.tex
@@ -0,0 +1,1618 @@
+\def\ExPexMessage
+ {5/25/2017 v5.1b ExPex linguistics example formatter (JF)}
+% -------------------------------------------------------
+% jf 2011/12/09 (v4.0a)
+% 1) fixed bug in how exceptional gla items are detected
+% 2) added everytrailingcitation parameter
+% 3) made \glft a long definition to allow \par
+% 4) fixed bug in \printrbrack and \printlbrack, now not math mode
+% jf 2011/12/09 (v4.0b)
+% 1) allow {} gla item
+% jf 2012/03/10 (v4.0c)
+% 1) fixed problem with IJAL \deftaglabel caused by nonexpansion
+% of \@actualexno
+% jf 2012/12/01 (v4.1)
+% 1) added auto glskip mode to glosses
+% /abovemoreglskip/ now obsolete
+% 2) fixed bug in \@setinckey so that value is expanded when set
+% jf 2013/01/13 (v4.1a)
+% 1) added \let\pageno=\c@page to LaTex specializations
+% jf 2013/06/27 (v4.1b)
+% 1) fixed bug in skip over \glft entries
+% jf 2013/07/27
+% 1) LaTex \include/\includeonly mechanism now works for \excnt
+% jf 2013/10/08
+% 1) revise the definition of \glw@printcol (now named
+% \glw@printglword) to use token lists rather than edefs, and to build
+% glwords as \vtop{\halign{#\hfil\cr...} structures
+% rather than stacked hboxes. This allows items like {\hfil
+% word}, which results in center alignment.
+% 2) removed w from the prefix in \glw@append, \glw@lop, and
+% \glw@lopff since these will be used in other gloss styles
+% jf 2013/10/10 fixed belowpreambleskip bug
+% jf 2014/01/27 (v5.0)
+% MAJOR REVISIONS: vertical spacing in glosses, introduction of
+% nlevel style glosses (see User's Manual, also revised at this time)
+% for more detail about the changes
+% jf 2014/03/08 (v5.0b)
+% 1. restored allowing {} empty items in wrap glosses
+% 2. introduced <glbreaking> parameter
+% jf 2014/03/14 (v5.0c)
+% 1. fixed reference for IJAL style
+% 2. fixed initialization for roman number parts in \pex
+% jf 2015/01/06 (v5.0d)
+% glftpos=right now works with the nlevel style
+% many internal names were changed to the general form
+% \gl@<style>@<ftpos>@<name> to make the code for switching style and
+% ftpos much more transparent
+% jf 2015/09/30 (v5.0e)
+% right panel in nlevel style
+% jf 4/11/2016 (v5.0f)
+% fixed \ep@setlist so that it does not make global asssigment
+% changed some names of the append commands to better match their effect
+% jf 3/9/2017 (v5.1)
+% fixed bug so that \glbreaking works if extraglskip has stretch and/or
+% shrink components
+% jf 5/1/2017 (v5.1a)
+% 1. made \sc equivalent to \scshape if the LaTex engine is used
+% 2. made \it equivalent to \itshape if the LaTex engine is used
+% 3. fixed bug in \getref in the IJAL style
+% Vanya Kapitinov (v5.1b)
+% define \rm and \tt in LaTex for modern LaTex compatibility
+% --------------------------------------------------------
+\edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}
+\catcode`\@=11\relax
+\ifx\XKeyValLoaded\endinput \else
+ \input xkeyval \fi
+\newif\ifeplatex
+\ifx\ProvidesFile\@undefined
+ \eplatexfalse
+ \message{\ExPexMessage}
+ \else
+ \ProvidesFile{expex.tex}[\ExPexMessage]
+ \eplatextrue
+ \@addtofilelist{expex.tex}
+ \let\it=\itshape
+ \let\sc=\scshape
+ \def\rm{\normalfont\rmfamily} % VK 5/13/2017
+ \def\tt{\normalfont\ttfamily} % VK 5/13/2017
+ \let\pageno=\c@page
+% 2013/07/27
+ \g@addto@macro\cl@@ckpt
+ {\immediate\write\@partaux{\string\excnt=\the\excnt}}
+ \fi
+%! define eplain primitives, if necessary
+\ifx\eplain\@undefined % eplain stuff
+ \def\@futurenonspacelet#1{\def\@cs{#1}%
+ \afterassignment\@stepone\let\@nexttoken= }%
+ \def\@stepone{\expandafter\futurelet\@cs\@steptwo}%
+ \def\@steptwo{\expandafter\ifx\@cs\@sptoken\let\@@next=\@stepthree
+ \else\let\@@next=\@nexttoken\fi \@@next}%
+ \def\@stepthree{\afterassignment\@stepone\let\@@next= }%
+ \def\@getoptionalarg#1{%
+ \let\@optionaltemp = #1%
+ \let\@optionalnext = \relax
+ \@futurenonspacelet\@optionalnext\@bracketcheck
+ }
+ \def\@bracketcheck{%
+ \ifx [\@optionalnext
+ \expandafter\@@getoptionalarg
+ \else
+ \let\@optionalarg = \empty
+ \expandafter\@optionaltemp
+ \fi }
+ \def\@@getoptionalarg[#1]{%
+ \def\@optionalarg{#1}%
+ \@optionaltemp}
+\fi
+%----- end of eplain inclusions
+\def\ep@identity#1{#1}
+\def\ep@expandonce{\expandafter\noexpand}
+\def\ep@expandtwice{\expandafter\expandafter\expandafter\noexpand}
+\def\ep@expandafterafter#1{\expandafter#1\expandafter}
+\def\ep@gobble#1{}
+\def\@getoptionaltag#1{%
+ \let\@@optionaltemp = #1%
+ \let\@optionaltag\empty
+ \@ifnextcharacter<\@@gettag\@@optionaltemp
+}
+\def\@@gettag<#1>{\def\@optionaltag{#1}\@@optionaltemp}
+
+\newif\if@tilde
+\def\@tildecheck#1{%
+ \@ifnextcharacter~%
+ {\@tildetrue\expandafter#1\ep@gobble}%
+ {\@tildefalse#1}%
+}
+%------- XKV parametrization ------
+\def\define@lingkey{\define@key{ling}}
+\def\define@ling@cmdkeys{\define@cmdkeys{ling}[ling@]}
+\def\define@lingcmdkeys{\define@cmdkeys{ling}[ling]}
+%
+\def\define@linginckey#1#2{%
+ \define@key{ling}{#2}{%
+ \ep@expandafterafter\@setinckey
+ #1\csname ling#2\endcsname ##1\@nil\relax}% test \relax %%%%%%%%%%%%%%%%%%%%%%%
+}
+\let\XKVforn=\XKV@for@n % added 2016/04/23 for easy use
+\def\define@lingincdimenkeys#1{\XKVforn{#1}\@key{%
+ \expandafter\define@linginckey\expandafter\dimen\expandafter{\@key}}}
+\def\define@lingincskipkeys#1{\XKVforn{#1}\@key{%
+ \expandafter\define@linginckey\expandafter\skip\expandafter{\@key}}}
+\def\@setinckey#1#2#3#4\@nil{%
+ \ifx#3!%
+ #1 0=#2%
+ \advance#1 0 by #4%
+ \else
+ #1 0=#3#4%
+ \fi
+ \edef#2{\the #10}%
+}
+%
+\def\lingset#1{\setkeys{ling}{#1}\ignorespaces}
+% \Lingset first sets ling keys, if there are non-ling keys
+% remaining, these are then passed to \psset
+\def\Lingset#1{\setkeys*{ling}{#1}%
+ \ifx\XKV@rm\@empty \else
+ \ep@expandafterafter\psset{\XKV@rm}\fi
+}
+\def\Ling@usearg{%
+ \ifx\@optionalarg\empty
+ \else \ep@expandafterafter\Lingset{\@optionalarg}\fi
+}
+\def\ling@usearg{\ep@expandafterafter\lingset{\@optionalarg}}
+% styles
+\def\e@let#1#2{%
+ \ep@expandafterafter\let#1\csname #2\endcsname\ignorespaces
+}
+\define@lingkey{lingstyle}{%
+ \e@let\temp{ling@#1style}
+ \ep@expandafterafter\Lingset{\temp}}
+\def\definelingstyle#1#2{%
+ \expandafter\def\csname ling@#1style\endcsname{#2}}
+% if PST available, allow \psset to set ling parameters,
+% otherwise cancel \Lingset's ability to set PST parameters
+\ifx\PSTricksLoaded\endinput
+ \pst@addfams{ling}
+ \else
+ \let\Lingset=\lingset
+ \fi
+%------ scratch dimensions and counts -----
+\newdimen\ep@dima
+\newdimen\ep@dimb
+\newdimen\ep@dimc
+\newcount\ep@cnta
+\newcount\epc@b
+%------ \ex -----
+\newcount\excnt
+\excnt=1
+\newbox\numbox
+\newdimen\epd@numright
+\newif\if@specialexno
+\define@lingincskipkeys{aboveexskip,belowexskip}
+\define@lingincdimenkeys{numoffset,textoffset}
+\define@lingcmdkeys{Everyex,everyex,exbreakfil,exbreakpenalty,splitpartspenalty}
+\define@lingkey{exskip}%
+ {\edef\lingaboveexskip{#1}\edef\lingbelowexskip{#1}}
+\def\ep@settosum#1#2#3{#1=#2\relax \advance#1 by#3}
+\define@choicekey{ling}{textanchor}%
+ [\scratch\ep@textanchor]{numleft,normal}{}
+\def\ex{\bgroup \@tildecheck\ex@a}
+\def\ex@a{\def\@optionaltag{}\def\@specialexno{}%
+ \@getoptionalarg\ex@b}
+\def\ex@b{\@getoptionaltag\ex@c}
+\def\ex@c{%
+ \ex@setup
+ \leavevmode
+ \setbox\numbox=\hbox{\hskip\lingnumoffset\ep@actualexnoprint}%
+ \epd@numright=\wd\numbox
+ \ifcase\ep@textanchor % numleft
+ \ep@settosum\leftskip\lingnumoffset\lingtextoffset
+ \or % normal
+ \ep@settosum\leftskip\epd@numright\lingtextoffset
+ \fi
+ \llap{\hbox to\leftskip{\unhbox\numbox \hss}}%
+ \lingeveryex
+ \latex@tagex
+ \ignorespaces
+}
+\def\actualexno
+ {\if@specialexno {\ep@specialexno}\else \the\excnt \fi}
+\def\ep@actualexnoprint{{%
+ \if@specialexno
+ \ep@specialexnoprint
+ \else \ifx\ling@sampleexno\empty
+ \exnoprint
+ \else
+ \hbox to \epd@sampleexnowidth{\exnoprint\hss}%
+ \fi\fi
+}}
+\define@choicekey{ling}{exnotype}[\ling@exnotype\@N]%
+ {arabic,chapter.arabic,roman}{%
+ \ifcase\@N
+ \def\ep@rawexnoprint{\number\excnt}%
+ \or
+ \def\ep@rawexnoprint{\thechapter.\number\excnt}%
+ \or
+ \def\ep@rawexnoprint{\romannumeral\the\excnt}%
+ \fi
+}
+\lingset{exnotype=arabic}
+\def\exnoprint{\ep@exnoformat{\ep@rawexnoprint}}
+\def\ep@specialexnoprint{\ep@exnoformat{\ep@specialexno}} % unformatted
+\def\ep@globalstepexcnt{\global\advance\excnt by 1 }
+\def\ep@localstepexcnt{\advance\excnt by 1 }
+\let\stepexcnt=\ep@globalstepexcnt
+\def\keepexcntlocal{\let\stepexcnt=\ep@localstepexcnt}
+\def\ex@setup{% also used by \pex
+%% TENTATIVE, insert \par
+% \par
+ \global\@specialexnofalse
+ \latex@tagex
+ \lingEveryex
+ \let\reset@refproofing\@printref
+ \let\@printref\ep@identity % turn off refproofing
+ \Ling@usearg
+ \let\@printref\reset@refproofing
+ \if@specialexno
+ \def\@actualexno{\ep@specialexno}%
+ \else
+ \edef\@actualexno{\ep@rawexnoprint}%
+ \fi
+ \ifx\@optionaltag\empty
+ \let\@localextag=\empty
+ \else
+ \edef\@localextag{\@optionaltag}%
+ \deftag{\@actualexno}{\@optionaltag}
+ \fi
+ \exbreak
+ \if@tilde \else \vskip\lingaboveexskip\fi
+ \parindent=0pt
+}
+\def\noexno{\global\advance\excnt by -1}
+\def\exbreak{\endgraf\bgroup\@getoptionalarg\exbreak@a}
+\def\exbreak@a{%
+ \ifx\@optionalarg\empty
+ \skip255=\lingexbreakfil
+ \else
+ \skip255= 0pt plus\@optionalarg
+ \fi
+ \vskip\skip255
+ \penalty\lingexbreakpenalty
+ \vskip-\skip255
+ \egroup
+}
+\def\xe{%
+ \expandafter\vskip\lingbelowexskip
+ \egroup
+ \if@specialexno \else \stepexcnt \fi
+ \allowbreak
+ \prevdepth\dp\strutbox
+ \noindent
+}
+\def\exdisplay{\bgroup\@tildecheck\exdisplay@a}
+\def\exdisplay@a{\@getoptionalarg\exdisplay@b}
+\def\exdisplay@b{\let\@optionaltag=\empty \ex@setup}
+%------ \pex -----
+\newcount\pexcnt
+\newdimen\epd@labelleft
+\newdimen\epd@labelright
+\newdimen\epd@textleft
+\newdimen\epd@preambleleft
+\newif\if@firstlabel
+\define@lingincdimenkeys{preambleoffset,labelwidth,labeloffset}
+\define@lingincskipkeys{belowpreambleskip,interpartskip}
+\define@choicekey{ling}{preambleanchor}
+ [\scratch\ep@preambleanchor]{numright,labelleft,text}{}
+\define@boolkey{ling}[ling@]{avoidnumlabelclash}[true]{}
+\define@ling@cmdkeys{appendtopexarg}
+\newdimen\epd@sampleexnowidth
+\define@lingkey{sampleexno}{%
+ \setbox0=\hbox{#1}%
+ \epd@sampleexnowidth=\wd0
+ \def\ling@sampleexno{#1}%
+}
+\lingset{sampleexno=}
+%\define@lingcmdkeys{splitexpenalty}
+%\define@lingcmdkeys{belowpreambleskip,interpartskip,splitexpenalty}
+\define@choicekey{ling}{labelalign}[\ling@labelalign\nr]%
+ {left,center,right}{%
+ \ifcase\nr
+ \def\ep@labelprint{\ep@labelformat\ep@label\hss}%
+ \or
+ \def\ep@labelprint{\hss \ep@labelformat\ep@label\hss}%
+ \or
+ \def\ep@labelprint{\hss \ep@labelformat\ep@label}%
+ \fi
+}
+\define@key{ling}{samplelabel}{%
+ \setbox0=\hbox{#1}%
+ \lingset{labelwidth=\wd0}%
+}
+\define@boolkey{ling}[ling@]{nopreamble}[true]{}
+\def\pex{\bgroup\@tildecheck\pex@a}
+%\def\pexns{\bgroup \@tildetrue\pex@a}
+\def\pex@a{\def\@optionaltag{}\def\@specialexno{}%
+ \@getoptionalarg\pex@b}
+\def\pex@b{%
+ \ifx\ling@appendtopexarg\empty \else
+ \XKV@addtolist@o\@optionalarg{\ling@appendtopexarg}\fi
+ \@getoptionaltag\pex@c}
+\def\pex@c{\ling@nopreambletrue
+ \@futurenonspacelet\temp\pex@d}
+\def\pex@d{%
+ \ifx\temp\a \let\nextpex@\pex@e
+ \else \ifx\temp\label \let\nextpex@\pex@f
+ \else \ling@nopreamblefalse \let\nextpex@\pex@e
+ \fi\fi
+ \ex@setup
+ \nextpex@
+}
+\def\pex@f#1#2{\label{#2}\@futurenonspacelet\temp\pex@g}
+\def\pex@g{\ifx\temp\a \let\next\pex@h
+ \else \let\next\pex@e \ling@nopreamblefalse \fi \next}
+\def\pex@h#1\a{\pex@e\a}
+\def\pex@e{\pex@i \lingeveryex }
+\def\pex@i{%
+ \setbox\numbox=\hbox{\hskip\lingnumoffset\ep@actualexnoprint}%
+ \ep@setdimensions
+ \ep@pexcntinit
+ \@firstlabeltrue
+ \let\a\ep@putlabel
+ \ifling@nopreamble
+ \leftskip=\epd@textleft
+ \else
+ \ep@setdimpreambleleft
+ \leftskip=\epd@preambleleft
+ \fi
+ \def\next{\llap{\hbox to\leftskip{\unhbox\numbox \hss}}}%
+ \ifling@nopreamble
+ \ifling@avoidnumlabelclash \let\next\relax \fi\fi
+ \leavevmode
+ \next
+}
+\def\ep@setdimensions{% \epd@numright=\wd\numbox \epd@labelleft=\linglabeloffset
+ \epd@numright=\wd\numbox
+ \epd@labelleft=\linglabeloffset
+ \advance\epd@labelleft by
+ \ifcase\ep@labelanchor
+ \epd@numright
+ \or
+ \lingnumoffset
+ \or
+ 0pt
+ \fi
+ \ep@settosum\epd@labelright\epd@labelleft\linglabelwidth
+ \ifcase\ep@textanchor % numleft
+ \ep@settosum\epd@textleft\lingnumoffset\lingtextoffset
+ \or % normal
+ \ep@settosum\epd@textleft\epd@labelright\lingtextoffset
+ \fi
+}
+\def\ep@setdimensions{%
+ \epd@numright=\wd\numbox
+ \epd@labelleft=\linglabeloffset
+ \advance\epd@labelleft by
+ \ifcase\ep@labelanchor
+ \epd@numright
+ \or
+ \lingnumoffset
+ \or
+ 0pt
+ \fi
+ \ep@settosum\epd@labelright\epd@labelleft\linglabelwidth
+ \ifcase\ep@textanchor % numleft
+ \ep@settosum\epd@textleft\lingnumoffset\lingtextoffset
+ \or % normal
+ \ep@settosum\epd@textleft\epd@labelright\lingtextoffset
+ \fi
+}
+%\def\lingnumrightoffset{\the\epd@numright}%
+\def\ep@setdimpreambleleft{%
+ \epd@preambleleft=\lingpreambleoffset
+ \advance\epd@preambleleft by \ifcase\ep@preambleanchor
+ \epd@numright\or \epd@labelleft\or \epd@textleft \fi
+}
+\def\ep@pexcntinit{\ifnum\ep@labelgen=2\else
+ \pexcnt=\ling@pexcnt \fi}
+\define@key[epx@]{labels}{tag}{\def\@optionaltag{#1}}
+\define@key[epx@]{labels}{label}{\def\@specialexno{#1}}
+\def\ep@setlabelkeys{\setkeys[epx@]{labels}}
+\def\ep@useoptionallabelarg{%
+ \expandafter\ep@setlabelkeys\expandafter{\@optionalarg}}
+\define@lingkey{tag}{\def\@optionaltag{#1}}
+\newtoks\ep@everylabel % \ep@everylabel is a token list
+\define@lingkey{everylabel}{\ep@everylabel{#1}}
+%
+\def\ep@putlabel{%
+ \if@firstlabel
+ \ifling@nopreamble \else
+ \vskip\lingbelowpreambleskip
+ \leftskip=\epd@textleft
+ \fi
+ \@firstlabelfalse
+ \else
+ \par\penalty\lingsplitpartspenalty
+ \vskip\linginterpartskip
+ \fi
+ \def\@specialexno{}\def\@optionaltag{}%
+ \@getoptionalarg\ep@putlabel@a
+}
+% 03/14/2014 changed defs to edefs below
+\def\ep@putlabel@a{%
+ \ep@useoptionallabelarg
+ \ifx\@specialexno\empty
+ \ifcase\ep@labelgen
+ \edef\ep@label{\the\ep@everylabel \char\the\pexcnt}%
+% \edef\ep@label{\the\ep@everylabel \char\noexpand\the\pexcnt}%
+ \advance\pexcnt by 1
+ \or
+ \edef\ep@label{\the\ep@everylabel \number\pexcnt}%
+% \edef\ep@label{\the\ep@everylabel \number\noexpand\pexcnt}%
+ \advance\pexcnt by 1
+ \or
+ \ep@popLL
+ \or
+ \edef\ep@label{\the\ep@everylabel \romannumeral\noexpand\pexcnt}%
+ \advance\pexcnt by 1
+ \fi
+ \else
+ \def\ep@label{\the\ep@everylabel\@specialexno}%
+ \fi
+ \xdef\resumepexcnt{\noexpand\pexcnt\the\pexcnt}%
+ \@getoptionaltag
+ \ep@putlabel@b
+}
+\def\ep@putlabel@b{%
+ \ifx\@optionaltag\empty \else
+ \deftaglabel{\@optionaltag}%
+ \fi
+ \leavevmode
+ \llap{\hbox to\leftskip{\hskip\epd@labelleft
+ \hbox to\linglabelwidth{\ep@labelprint}%
+ \hfil}}%
+ \latex@tagexlabel
+ \ignorespaces
+}
+%
+\define@choicekey{ling}{labelanchor}[\scratch\ep@labelanchor]%
+ {numright,numleft,margin}[]{}
+\define@lingkey{pexcnt}{\edef\ling@pexcnt{#1}}
+% IJAL style
+\definelingstyle{IJAL}{labelwidth=2em,labelanchor=numleft,
+ labeloffset=0pt,labelformat=(A),everylabel=\actualexno,
+ textanchor=normal,textoffset=1em,preambleanchor=text,
+ preambleoffset=0pt,avoidnumlabelclash,
+ appendtopexarg={samplelabel=(\actualexno a)}}
+%-----------------------------------------
+%----- judgments -----
+\def\judge#1{\rm #1\kern .1em \ignorespaces}
+\def\ljudge#1{\llap{\judge{#1}}\ignorespaces}
+\define@key{ling}{*}[*]%
+ {\setbox0=\hbox{#1}%
+ \lingset{textoffset=!\wd0}%
+}
+%------ table support -----
+\define@lingcmdkeys{dima,dimb,dimc}
+\lingset{dima=2.4em}
+\def\tspace{\@getoptionalarg\ep@tabelspace}
+\def\ep@tabelspace{\hskip
+ \ifx\@optionalarg\empty
+ \lingdima
+ \else
+ \csname ling\@optionalarg\endcsname
+ \fi
+}
+\def\labels{\@getoptionalarg\ep@labels}
+\def\ep@labels{%
+ \ifcase\ep@labelgen
+ \def\ep@label{\the\ep@everylabel \char\the\pexcnt}%
+ \or
+ \def\ep@label{\the\ep@everylabel \number\pexcnt}%
+ \or
+ \or
+ \def\ep@label{\the\ep@everylabel \romannumeral\pexcnt}%
+ \fi
+ \ling@usearg
+ \dimen0=\lingtextoffset
+ \advance\dimen0 by \linglabelwidth
+ \edef\ling@labelskip{\the\dimen0}%
+ \ep@pexcntinit
+ \let\tl\ep@inserttabellabel
+ \let\nl\ep@omitlabel
+ \ignorespaces
+}
+\def\ep@inserttabellabel{\@getoptionaltag\ep@inserttablelabel@a}
+\def\ep@inserttablelabel@a{%
+% \global\advance\pexcnt by 1
+ \ifx\@optionaltag\empty \else
+ \deftaglabel{\@optionaltag}%
+ \fi
+ \edef\foop{\ep@label.}\foop
+ \global\advance\pexcnt by 1
+}
+\def\ep@omitlabel{\omit\hskip\linglabeloffset\hfil}
+%\def\endpextable{\egroup\egroup \par \prevdepth=\dp\strutbox}
+\def\hwit#1{\hidewidth \it #1\hidewidth}
+\define@lingcmdkeys{crskip}
+\lingset{crskip=.6em}
+\def\crs{\cr\noalign{\vskip\lingcrskip}}
+\def\crnb{\cr\noalign{\par\nobreak}}
+% LL is "label list"
+\define@lingkey{labellist}{%
+ \edef\ling@LL{#1,}%
+ \edef\@currLL{#1,}% current LL
+}
+\def\ep@popLL{%
+ \ifx\@currLL\empty
+ \@expexwarn{Not enough labels in labellist}%
+ \let\@currLL=\ling@LL % start over
+ \ep@popLL
+ \else
+ \expandafter\ep@popLL@a\@currLL\@nil
+ \fi
+}
+\def\ep@popLL@a#1,#2\@nil{%
+ \def\ep@label{\the\ep@everylabel #1}\def\@currLL{#2}}
+\define@choicekey{ling}{labelgen}[\ling@labelgen\ep@labelgen]%
+ {char,number,list,romannumber}{}
+\def\definelabeltype#1#2{%
+ \expandafter\def\csname ling@#1labeltype\endcsname{#2}}
+\define@lingkey{labeltype}{%
+ \e@let\temp{ling@#1labeltype}%
+ \ep@expandafterafter\Lingset{\temp}}
+\define@lingkey{labelformat}{\ep@omitlabelformat #1\@nil}
+\def\ep@omitlabelformat #1A#2\@nil{%
+ \def\ep@labelformat##1{#1{##1}#2}}
+\define@lingkey{exnoformat}{\ep@mkexnoformater #1\@nil}
+\def\ep@mkexnoformater #1X#2\@nil{%
+ \def\ep@exnoformat##1{#1{##1}#2}}
+\lingset{exnoformat=(X)}
+\define@lingkey{fullrefformat}{\@fullrefformat #1\@nil}
+\def\@fullrefformat #1X#2A#3\@nil{%
+ \def\ep@fullrefformat##1##2{#1##1#2##2#3}}
+%------ support for LaTex \label macro -----
+\let\latex@tagex\relax
+\let\latex@tagexlabel\relax
+\ifx\label\relax \else % else = LaTex is loaded
+ \def\latex@tagexlabel{\def\@currentlabel
+ {\ep@fullrefformat{{\the\excnt}}{\ep@label}}}%
+ \def\latex@tagex{\edef\@currentlabel{\the\excnt}}%
+ \fi
+%-----------------------------------------
+\definelabeltype{alpha}{labelgen=char,pexcnt=`a,labelformat=A.,
+ fullrefformat=XA,labelalign=left,labelwidth=.72em}
+\definelabeltype{caps}{labelgen=char,pexcnt=`A,labelformat=A.,
+ fullrefformat=XA,labelalign=left,labelwidth=.92em}
+\definelabeltype{numeric}{labelgen=number,pexcnt=1,labelformat=A.,
+ fullrefformat=X.A,labelalign=right,labelwidth=.75em}
+% 03/14/14 bug fix (wrong start to roman series labels)
+\definelabeltype{roman}{labelgen=romannumber,pexcnt=2,labelformat=(A),
+%\definelabeltype{roman}{labelgen=romannumber,pexcnt=1,labelformat=(A),
+ fullrefformat=XA,labelalign=left,labelwidth=1.5em}
+%-- tags and reference -----
+%----- local reference to example numbers -----
+%\def\nextx{{\@printref{\number\excnt}}}
+%\def\anextx{{\@printref{\advance\excnt by 1 \number\excnt}}}
+%\def\lastx{{\@printref{\advance\excnt by -1 \number\excnt}}}
+%\def\blastx{{\@printref{\advance\excnt by -2 \number\excnt}}}
+%\def\bblastx{{\@printref{\advance\excnt by -3 \number\excnt}}}
+\def\nextx{{\@printref{\ep@rawexnoprint}}}
+\def\anextx{{\@printref{\advance\excnt by 1 \ep@rawexnoprint}}}
+\def\lastx{{\@printref{\advance\excnt by -1 \ep@rawexnoprint}}}
+\def\blastx{{\@printref{\advance\excnt by -2 \ep@rawexnoprint}}}
+\def\bblastx{{\@printref{\advance\excnt by -3 \ep@rawexnoprint}}}
+%------ defining tags -----
+\def\deftag#1#2{%
+ {\let\@printref=\ep@identity
+ \expandafter\xdef\csname lingtag@#2\endcsname{#1}%
+ \if@g@thertags
+ \immediate\write@tags{\noexpand\@fd@f {#2} {{#1}} }%
+ \fi}%
+ \ignorespaces
+}
+\def\deftaglabel#1{%
+ \expandafter\xdef\csname lingtag@\@localextag.#1\endcsname%
+ {{{\ep@label}}%
+ {{\ep@fullrefformat{\@actualexno}\ep@label}}%
+ }%
+ \if@g@thertags
+ \immediate\write@tags{%
+ \noexpand\@fd@f
+ {\@localextag.#1}
+ {{{\ep@label}}%
+ {{\ep@fullrefformat{\@actualexno}\ep@label}}}%
+ }%
+ \fi
+ \ignorespaces
+}
+\def\deftagex#1{\edef\@localextag{#1}%
+ \expandafter\xdef\csname lingtag@#1\endcsname{{\ep@rawexnoprint}}%
+ \if@g@thertags
+ \immediate\write@tags{\noexpand\@fd@f {#1} {{\ep@rawexnoprint}}}%
+ \fi
+ \ignorespaces
+}
+\def\deftagpage#1{%
+ \if@g@thertags
+ \write@tags{\noexpand\@fd@f #1 {{\the\pageno}}}%
+ \fi
+ \ignorespaces
+}
+\def\lastlabel{{\ep@label}}
+\def\@expexwarn#1{\immediate\write16{====> EXPEX WARNING: #1.}}
+\def\@expexerror#1{\immediate\write16{====> Fatal EXPEX ERROR: #1.}}
+\newif\ifep@highlightref
+\ep@highlightreffalse
+\def\refproofing{\ep@highlightreftrue}
+\def\mathhigh@lightref#1{$\overline{\underline{\hbox{#1}}}$}
+\def\psthigh@lightref{\psframebox[boxsep=false,framesep=2pt,linewidth=.2ex]}
+\ifx\PSTricksLoaded\endinput
+ \let\@highlightprint\psthigh@lightref
+ \else
+ \let\@highlightprint\mathhigh@lightref
+ \fi
+\def\@printref#1{%
+ \ifep@highlightref \@highlightprint{#1}\else #1\fi}
+%%%%
+\newbox\exnobox
+\define@key{ling}{exno}{%
+ \global\@specialexnotrue
+ \let\latex@tagexlabel\ep@gobble
+ \let\latex@tagex\ep@gobble
+ \setbox\exnobox=\hbox{#1}%
+ \def\ep@specialexno{\unhcopy\exnobox}%
+}
+%------ opening the tag file -----
+\newif\if@g@thertags
+\@g@thertagsfalse
+\newwrite\ling@tagsfile
+\def\write@tags{\write\ling@tagsfile}
+\def\gathertags{%
+ \@setupreadtags
+ \@g@thertagstrue
+ \immediate\openout\ling@tagsfile=\jobname-tags\relax
+ \immediate\write@tags{\noexpand\relax}%
+}
+%------ reading the tag file and defining the tags it encodes -----
+\newif\if@epx@goodtagsfile
+\newread\ling@tagsin
+\gdef\@fd@f#1 #2 {%
+ \expandafter\ifx\csname lingtag@#1\endcsname\relax
+ \expandafter\gdef\csname lingtag@#1\endcsname{#2}%
+ \fi
+}
+\newif\if@readtags
+\@readtagstrue
+\def\@setupreadtags{\if@readtags
+ \do@readtags \global\@readtagsfalse \fi}
+\def\do@readtags{%
+ \immediate\openin\ling@tagsin=\jobname-tags\relax
+ \ifeof\ling@tagsin \else
+ \closein\ling@tagsin
+ {\catcode`@=11 \input \jobname-tags\relax}%
+ \fi
+}
+%!
+%!------ tagging sections, adapt to your needs -----
+%! If \tagsec is used with section macros that do not define
+%! counters \secno,\subsecno,\subsubsecno, and \subsubsubsecno,
+%! then \currsec must be redefined to whatever is appropriate.
+%!\def\chapscurrsec{\ifnum\chapno>0 \the\chapno
+%! \ifnum\secno>0 .\the\secno
+%! \ifnum\subsecno>0 .\the\subsecno
+%! \ifnum\subsubsecno>0 .\the\subsubsecno \fi\fi\fi\fi}
+%!\def\nochapscurrsec{\ifnum\secno>0 .\the\secno
+%! \ifnum\subsecno>0 .\the\subsecno
+%! \ifnum\subsubsecno>0 .\the\subsubsecno \fi\fi\fi}
+%! choose one of the following twos
+%!\let\currsec\nochapscurrsec
+%!\let\currsec\chapscurrsec
+%!\def\deftagsec#1{\deftag\currsec{#1}}
+%!/
+%\def\deftaglabel#1{%
+% \expandafter\xdef\csname lingtag@\@localextag.#1\endcsname
+% {%
+% {\ep@expandonce\ep@label}%
+% {\ep@fullrefformat{\@actualexno}\ep@expandonce\ep@label}%
+% }%
+% \ignorespaces
+%}
+\def\getref@aa#1#2{#1}%
+\def\getref@ab#1#2{#2}%
+\def\getref#1{\getref@a{#1}\getref@aa}
+%\def\getfullref#1{\getref@a{#1}\getref@ab}
+%\def\getref@a#1#2{%
+% \if@readtags \@setupreadtags \fi
+% \expandafter \ifcsname lingtag@#1\endcsname
+% \edef\temp{\ep@expandtwice\csname lingtag@#1\endcsname}%
+% \ifx\temp\empty
+% \@expexwarn{+++tag #1 has no full reference}%
+% \@printref{Missing!}%
+% \else
+% {\@printref{\temp}}%
+% \fi
+% \else
+% \@expexwarn{tag #1 is called but not defined}%
+% {\@printref{\tt [#1]}}%
+% \fi
+%}
+\newif\ifpartlabel
+\newif\iffullref
+\def\ep@ispartlabelcheck#1{\ep@ispart@a#1.\@nil}
+\def\ep@ispart@a#1.#2\@nil{\def\temp{#2}%
+ \ifx\temp\empty \partlabelfalse \else \partlabeltrue\fi}
+\def\getref{\fullreffalse \getref@a}
+\def\getfullref{\fullreftrue \getref@a}
+\def\getref@a#1{%
+ \if@readtags \@setupreadtags \fi
+ \ep@ispartlabelcheck{#1}%
+ \ifpartlabel
+ \iffullref
+ \let\@chooseref\chooseref@a
+ \else
+ \let\@chooseref\chooseref@g
+ \fi
+ \else
+ \let\@chooseref\relax
+ \fi
+ \expandafter\ifx\csname lingtag@#1\endcsname \relax
+ \@expexwarn{tag #1 is called but not defined}%
+ {\@printref{\tt [#1]}}%
+ \else
+ \expandafter\let\expandafter\temp
+ \csname lingtag@#1\endcsname
+ \@printref{\expandafter\@chooseref\temp}%
+ \fi
+}
+\def\chooseref@a#1#2{#2}
+\def\chooseref@g#1#2{#1}
+% ----- glosses -----
+\def\ling@glstyle{wrap}
+\def\ling@glftpos{below}
+\define@choicekey{ling}{glstyle}[\ling@glstyle\gl@style@num]{wrap,nlevel}{%
+ \ifnum\gl@style@num=0 \glw@assignlevels \fi
+ \gl@setprefix
+}
+\def\begingl{\bgroup\@getoptionalarg\gl@begingl}
+% bug fix 2105/10/27 eliminate stray space
+%\def\gl@begingl{%
+% \ling@usearg
+% \ling@everygl
+% \gl@beginglstyle@a
+%}
+\def\gl@begingl{%
+ \let\everylist=\empty
+ \ling@usearg
+ \ling@everygl
+ \gl@beginglstyle@a
+}
+\def\gl@beginglstyle@a{\@ifnextchar\@space\gl@beginglstyle@b\gl@beginglstyle}
+\def\gl@beginglstyle@b #1{\gl@beginglstyle}
+% end bug fix
+% parameters which are used in both gloss styles
+\define@ling@cmdkeys{everygl,everyglpreamble,everyglilg, everyglft,
+ everyglword,glrightskip,glhangindent,glwidth}
+\define@lingincskipkeys{glspace,aboveglftskip,belowglpreambleskip,extraglskip}
+\newbox\glstrutbox
+\def\glstrut{\unhcopy\glstrutbox}
+\define@boolkey{ling}[ling@]{glstruts}{}%
+\newdimen\ep@cascadeindent
+\newdimen\ep@hangindentamount
+\newcount\ep@cascadecount
+\define@choicekey{ling}{glhangstyle}[\temp\ep@glhangstyle]%
+ {none,normal,cascade}%
+ {\ifnum\ep@glhangstyle=2
+ \ep@cascadecount=10
+ \ep@cascadeindent=0pt
+ \ep@hangindentamount=\ling@glhangindent
+ \fi }
+\lingset{glhangstyle=normal,glrightskip=0pt plus .1\hsize}
+% dimensions
+% switches
+\newif\if@glpreamble
+\newif\if@glft
+%
+% list manipulation macros (ala Knuth) that are used in both gloss styles
+\newtoks\gltoks@a
+\newtoks\gltoks@b
+\def\gl@push #1\to #2{%
+ \gltoks@a={\\{#1}}%
+ \gltoks@b=\expandafter{#2}%
+ \edef#2{\the\gltoks@a\the\gltoks@b}%
+}
+\def\gl@xappend #1\to #2{% renamed from \gl@append
+ \gltoks@a={\\{#1}}%
+ \gltoks@b=\expandafter{#2}%
+ \xdef#2{\the\gltoks@b\the\gltoks@a}%
+}
+\def\gl@lop#1\to#2{\ifx#1\empty
+ \let#2\empty \else\expandafter\gl@lopoff#1\gl@lopoff#1#2\fi}
+\long\def\gl@lopoff\\#1#2\gl@lopoff#3#4{\def#4{#1}\def#3{#2}}
+\def\gl@exappend{\expandafter\gl@xappend} % renamed from \gl@eappend
+\newif\ifgl@loopmore
+\def\gl@lopTL#1\to#2{%
+ \ifx#1\empty #2={}\else
+ \expandafter\gl@lopoffTL#1\gl@lopoffTL#1#2\fi}
+\long\def\gl@lopoffTL\\#1#2\gl@lopoffTL#3#4{#4={#1}\def#3{#2}}
+%%%%%%%%%%%%%%%%%%%% wrap style glosses %%%%%%%%%%%%%%%%%%%%
+% \gl@wrap@below@begin sets up the environment
+% \gla, \glb, etc. fill in the various lists which are initialized in
+% the environment
+% The input (something like the following)
+% \gla x1 x2 x3 //
+% \glb y1 y2 y3 //
+% \glc z1 z2 z3 //
+% gets converted into a list of lists (using Knuth's list macros)
+% {{x1,y1,z1},{x2,y2,z2},{x3,y3,z3}}
+% auxiliary lists are also made at the same time
+% list of struts, list of "everygl<name>"
+% Then these lists are popped, one position at a time, and vboxes
+% are built. The vboxes are fed into Tex's regular paragraph
+% building machinary.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% introduced "glbreaking" boolean parameter
+\define@boolkey{ling}[ling@]{glbreaking}[true]{}
+\lingset{glbreaking=false}
+\def\ep@setlist#1#2{\def#1{}\XKVforn{#2}\@this{\gl@eappend\@this\to#1}}
+% 2016/04/18 support for LaTex color and xcolor packages
+\define@ling@cmdkeys{glacolor}
+\define@lingkey{glnlinecolors}{\ep@setlist\colorlist{#1}}
+\lingset{glnlinecolors={},glacolor=}
+% various modifications of gloss building macros which follow were made
+% to make use of these parameters
+\def\gl@wrap@below@begin{\gl@wrap@below@begin@a}
+\def\gl@wrap@below@begin@a{%
+ \bgroup
+ \parindent0pt
+ \ep@setglstrut
+ \ifdim\ling@glwidth=0pt
+ \ifling@glbreaking
+ \bgroup
+ \else
+ \vtop\bgroup
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \leftskip=0pt
+ \fi
+ \else
+ \vtop\bgroup
+ \hsize=\ling@glwidth
+ \leftskip=0pt
+ \fi
+ \leavevmode
+ \bgroup
+ \parindent=0pt
+ \@glpreamblefalse
+ \@glftfalse
+ \let\mainlist=\empty
+ \let\itemtypelist=\empty
+ \let\aboveskiplist=\empty
+ \let\strutlist=\empty
+ \let\everylist=\empty
+ \let\colorlist=\empty
+}
+% As the list of lists is assembled, heights and depths of each
+% item are computed and maximum row heights and maximum row depths
+% are computed in each row. These are used to make struts which
+% are used to assemble the vboxes.
+%
+\newdimen\glw@maxht
+\newdimen\glw@maxdp
+\def\glw@initializemaxhtdp{%
+ \ifling@glstruts
+ \glw@maxht=\ht\glstrutbox \glw@maxdp=\dp\glstrutbox
+ \else
+ \glw@maxht=0pt \glw@maxdp=0pt
+ \fi
+}
+\define@ling@cmdkeys{everygla,everyglb,everyglc}
+\def\@alinelabel{a}
+\def\glw@gla{%
+ \bgroup
+ \ling@everyglilg
+ \def\lingaboveglaskip{0pt}%
+ \def\gl@linelabel{a}%
+ \glw@initializemaxhtdp
+ \@getoptionalarg
+ \glw@gla@a
+}
+\def\glw@gla@a #1//{\bgroup\ling@usearg
+ \glw@gla@b #1 \@nil }
+\def\glw@gla@b{\@ifnextchar\@nil\glw@gla@c\glw@gla@d}
+\def\glw@gla@c#1{\glw@updatelists \egroup \ignorespaces}
+\def\ep@samecharcode#1#2{\ep@expandonce#1\ep@expandonce#2\ignorespaces}
+\newcount\@itemtype
+\newif\ifglw@word
+% \@setitemtype sets the count \@itemtype, the macro \@mainlistappend, and
+% the switch \glw@word
+% 1=+, 2=@, 3=[, 4=], 5=\nogloss, 0=other
+\def\@setitemtype #1#2\@nil{%
+ \glw@wordfalse
+ \def\temp{#2}%
+ \ifx\temp\empty
+ \if\ep@samecharcode #1+\@itemtype=1
+ \else\if\ep@samecharcode #1@\@itemtype=2
+ \else\if\ep@samecharcode #1[\@itemtype=3
+ \else\if\ep@samecharcode #1]\@itemtype=4
+ \else \@itemtype=0
+ \fi\fi\fi\fi
+ \else
+ \glw@wordtrue
+ \ifx#1\nogloss\@itemtype=5 \def\@itembody{#2}%
+ \else \@itemtype=0 \fi
+ \fi
+}
+\def\glw@gla@d #1 {%
+ \def\temp{#1}%
+ \ifx\temp\empty
+% action for empty words added 2014/03/08
+ \glw@wordfalse
+ \@itemtype=0
+ \gl@xappend \\{\glstrut}\to\mainlist
+ \gl@exappend 0\to\itemtypelist
+ \else
+ \@setitemtype #1\@nil
+ \ifnum\@itemtype=0 \gl@xappend \\{\glstrut #1}\to\mainlist
+ \else \ifnum\@itemtype=5 \gl@exappend\@itembody\to\mainlist
+ \else \gl@xappend \\{}\to\mainlist
+ \fi\fi
+ \gl@exappend \the\@itemtype \to\itemtypelist
+ \fi
+ \ifglw@word
+ \setbox0=\hbox{\ling@everygla #1}%
+ \ifdim\glw@maxht<\ht0 \glw@maxht=\ht0 \fi
+ \ifdim\glw@maxdp<\dp0 \glw@maxdp=\dp0 \fi
+ \fi
+ \glw@gla@b
+}
+\newdimen\gl@maxdplast
+\def\glw@updatelists{%
+ \edef\temp{\csname ling@gl\gl@linelabel color\endcsname}%
+ \gl@exappend\temp \to\colorlist
+ \edef\temp{\csname lingabovegl\gl@linelabel skip\endcsname}%
+ \gl@exappend\temp \to\aboveskiplist
+ \edef\temp{\vrule width0pt height\the\glw@maxht\space depth\the\glw@maxdp\space }%
+ \global\gl@maxdplast=\glw@maxdp
+ \gl@exappend\temp\to\strutlist
+ \expandafter\expandafter\expandafter
+ \gl@xappend\csname ling@everygl\gl@linelabel\endcsname
+ \to\everylist
+ \gltoks@a=\expandafter{\everylist}%
+}
+\def\glw@assignlevels{%
+ \expandafter\XKVforn\expandafter{\glw@levels}\levelname
+ {\glw@assign@level\levelname}%
+}
+\def\glw@assign@level#1{%
+ \edef\Temp{#1}\def\XTemp{ft}%
+ \ifx\Temp\XTemp \let\temp\relax \else
+ \edef\temp{\noexpand\let
+ \expandafter\noexpand\csname gl#1\endcsname
+ \expandafter\noexpand\csname glw@gl#1\endcsname}\fi
+ \temp
+}
+% \glw@gla and \gl@wrap@below@ft get their definitions directly
+% \glw@gl<name> gets defined via \defineglwlevels, which adds <name> to the
+% list \glw@levels of defined glw levels
+\def\glw@levels{a,ft}
+\def\define@glw@level#1{%
+ \expandafter\ifx\csname glw@gl#1\endcsname\relax
+ \define@ling@cmdkeys{gl#1color}%
+ \define@ling@cmdkeys{everygl#1}%
+ \define@linginckey\skip{abovegl#1skip}%
+ \XKV@addtolist@o\glw@levels{#1}%
+ \lingset{everygl#1=,abovegl#1skip=0pt,gl#1color=}
+ \expandafter\def\csname glw@gl#1\endcsname{\glw@glx{#1}}%
+ \ifx\gl@style@num\undefined \else
+ \ifnum\gl@style@num=0 \glw@assign@level{#1}\fi\fi
+ \else
+ \@expexwarn{Level #1 is already defined}
+ \fi
+}
+\def\defineglwlevels#1{\XKVforn{#1}\thislevel
+ {\expandafter\define@glw@level\expandafter{\thislevel}}%
+}
+\def\glw@glx#1{% x suggests any label (as argument to \glw@glx)
+ \def\worklist{}%
+ \glw@initializemaxhtdp
+ \def\gl@linelabel{#1}%
+ \@getoptionalarg\glw@glx@a
+}
+
+\def\glw@glx@a #1// {\bgroup
+ \ling@usearg
+ \expandafter\let\expandafter\@every
+ \csname ling@everygl\gl@linelabel\endcsname
+ \glw@glx@b #1 \@nil }
+\def\glw@glx@b{\@ifnextchar\@nil\glw@glx@c\glw@glx@d}
+\def\glw@glx@c#1{\glw@updatelists \glw@mergerow\worklist\to\mainlist \egroup}
+\def\glw@mergerow#1\to #2{%
+ \let\itlist=\itemtypelist
+ \let\alist=#1%
+ \let\blist=#2%
+ \let\clist=\empty
+ \gl@loopmoretrue
+ \loop
+ \ifx\itlist\empty \gl@loopmorefalse \fi
+ \ifgl@loopmore
+ \gl@lop\itlist\to\@@itlist
+ \@itemtype=\@@itlist
+ \gl@lop\blist\to\currb
+ \ifnum\@itemtype=0
+ \gl@lop\alist\to\curra
+ \gl@exappend\curra\to\currb
+ \gl@exappend\currb\to\clist
+ \else \ifnum\@itemtype=5
+ \gl@exappend\currb\to\clist
+ \else
+ \gl@xappend\\{}\to\clist
+ \fi\fi
+ \repeat
+ \global\let#2=\clist
+}
+\def\glw@glx@d #1 {%
+ \setbox0=\hbox{\@every #1}%
+ \ifdim\glw@maxht<\ht0 \glw@maxht=\ht0 \fi
+ \ifdim\glw@maxdp<\dp0 \glw@maxdp=\dp0 \fi
+ \gl@xappend {\glstrut #1}\to\worklist
+ \glw@glx@b
+}
+\defineglwlevels{b,c}
+\newif\ifglw@spacebefore
+\long\def\gl@wrap@below@preamble #1// {%
+ \@glpreambletrue
+ {\hangindent=0pt \hangafter=0
+ \leavevmode\ling@everyglpreamble #1\strut
+ \par
+ \vskip\lingbelowglpreambleskip }%
+}
+\def\gl@wrap@below@ft{\@getoptionalarg\gl@wrap@below@ft@a}
+\long\def\gl@wrap@below@ft@a #1//{%
+ \glw@printilgsetup
+ \glw@printilg@a
+ \vskip\lingaboveglftskip
+ \nointerlineskip
+ \egroup
+ \@glfttrue
+ \ifx\glstrut\strut
+ \ifdim\gl@maxdplast>\dp\strutbox \prevdepth=\gl@maxdplast \fi
+ \fi
+ \ling@usearg
+ \@ilgborderadjustment
+ \ling@everyglft
+ \strut #1\par
+}
+\def\gl@wrap@below@end{%
+ \if@glft \else \glw@printilg\egroup \fi
+ \egroup\egroup\egroup
+}
+\def\glw@printilg{\glw@printilgsetup \glw@printilg@a}
+\def\glw@printilgsetup{%
+ \@glspacefalse
+ \rightskip=\ling@glrightskip
+ \lineskiplimit=0pt
+ \lineskip=\lingextraglskip
+% bug fix, 3/9/2017
+% \ifdim\lingextraglskip=0pt \global\let\@ilgborderadjustment=\relax
+ \ifdim\lineskip=0pt \global\let\@ilgborderadjustment=\relax
+ \else \xdef\@ilgborderadjustment{\vskip\the\lineskip}\fi
+ \if@glpreamble \@ilgborderadjustment \fi
+ \ifcase\ep@glhangstyle
+ \or
+ \hangindent=\ling@glhangindent
+ \hangafter=1
+ \or
+ \ep@glmkcascade
+ \fi
+}
+
+\def\glw@closegroups{\egroup\egroup\egroup}
+\def\glw@printilg@a{\glw@printilg@b \par }
+\def\glw@printilg@b{%
+ \glw@spacebeforefalse
+ \@glpostbrackfalse
+ \leavevmode
+ \gl@loopmoretrue
+ \@glaparsestate=1
+ \loop\ifgl@loopmore
+ \gl@lop\mainlist\to\@currentitem\relax % \@currentitem is one column
+ \gl@lop\itemtypelist\to\@currentitemtype\relax
+ \ifcase\@currentitemtype
+ \glw@printilgspace
+ \glw@printglword
+ \or
+ \vskip\lingextraglskip
+ \ifcase\ep@glhangstyle
+ \or
+ \hangafter=0
+ \hangindent=\ling@glhangindent
+ \or
+ \glhangcarry
+ \leavevmode
+ \fi
+ \@glaparsestate=1
+ \leavevmode
+ \or
+ \@glaparsestate=1
+ \or
+ \ifnum\@glaparsestate=0 \hskip\lingglspace
+ \else\ifnum\@glaparsestate=2 \hskip\lingglbrackbracksep
+ \else\ifnum\@glaparsestate=3 \hskip\lingglspace
+ \fi\fi\fi
+ \printlbrack\nobreak
+ \@glaparsestate=2
+ \or
+ \nobreak
+ \ifnum\@glaparsestate=0 \hskip\lingglbrackwordsep
+ \else\ifnum\@glaparsestate=2 \hskip\lingglspace
+ \else\ifnum\@glaparsestate=3 \hskip\lingglbrackbracksep
+ \fi\fi\fi
+ \printrbrack
+ \@glaparsestate=3
+ \or
+ \ifnum\@glaparsestate=0 \hskip\lingglspace \fi
+ \@glaparsestate=0
+ {\@currentitem}% grouping to prevent font change contagion
+ \leavevmode
+ \fi
+ \ifx\itemtypelist\empty \gl@loopmorefalse \fi
+ \repeat
+ \par \egroup
+}
+\def\glw@printilgspace{%
+ \ifcase\@glaparsestate
+ \hskip\lingglspace
+ \or
+ \or \hskip\lingglbrackwordsep
+ \or \hskip\lingglspace
+ \fi
+ \@glaparsestate=0
+}
+\def\glw@print@i{%
+ \glw@printilgspace
+ \glw@printglword
+}
+\newtoks\gltoks@sofar
+\newtoks\gltoks@every
+\newtoks\gltoks@next
+\newbox\debug@glword
+\def\ep@mklinecolorop{%
+ \ifx\@linecolor\empty \let\@linecolorop=\empty
+ \else \ep@mklinecolorop@a \fi}
+\def\ep@mklinecolorop@a{%
+ \edef\@linecolorop{\noexpand\noexpand\noexpand\color{\@linecolor}}%
+}
+\def\pstglcolors{%
+ \def\ep@mklinecolorop@a{%
+ \edef\@@linecolor{\noexpand\csname\@linecolor\noexpand\endcsname}%
+ \edef\@@@linecolor{\ep@expandtwice\@@linecolor}%
+ \edef\@linecolorop{\expandafter\noexpand
+ \expandafter\noexpand\expandafter\noexpand\@@@linecolor}%
+ }%
+}
+\def\glw@printglword{%
+ \begingroup
+ \gltoks@sofar={}%
+ \gl@loopmoretrue
+ \loop\ifgl@loopmore
+ \gl@lop\colorlist\to\@linecolor
+ \ep@mklinecolorop
+ \gl@lop\aboveskiplist\to\@aboveskip
+ \expandafter\ifdim\@aboveskip=0pt \def\@above{}\else
+ \edef\@above{\noalign{\vskip\@aboveskip}}\fi
+ \gl@lop\strutlist\to\@strut
+ \gl@lopTL\everylist\to\gltoks@every
+ \gl@lopTL\@currentitem\to\gltoks@next
+ \edef\temp{\the\gltoks@sofar \@above\@strut
+ {\@linecolorop\the\gltoks@every \the\gltoks@next}\cr}%
+ \gltoks@sofar=\expandafter{\temp}%
+ \ifx\@currentitem\empty \gl@loopmorefalse \fi
+ \repeat
+ \setbox0\vtop{%
+ \ling@everyglword
+ \halign{\glwordalign{##}\cr \the\gltoks@sofar }}%
+ \box0
+ \endgroup
+}
+
+\def\gl@wordalignleft#1{#1\hfil}
+\def\gl@wordaligncenter#1{\hfil#1\hfil}
+\define@choicekey{ling}{glwordalign}[\ling@glwordalign\ep@glwordalign]
+ {left,center}{%
+ \ifcase\ep@glwordalign
+ \let\glwordalign=\gl@wordalignleft
+ \or
+ \let\glwordalign=\gl@wordaligncenter
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%% nlevel style glosses %%%%%%%%%%%%%%%%%%%%
+\def\ep@setglstrut{%
+ \ifling@glstruts \setbox\glstrutbox=\copy\strutbox
+ \else \setbox\glstrutbox=\hbox{}%
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\gl@nlevel@below@begin{\gl@nlevel@below@begin@a}
+\def\gl@nlevel@below@begin@a{%
+ \bgroup
+ \parindent0pt
+ \bgroup
+ \@glspacefalse
+ \ep@setglstrut
+ \ifdim\ling@glwidth=0pt
+ \bgroup
+ \else
+ \vtop\bgroup
+ \hsize=\ling@glwidth
+ \leftskip=0pt
+ \fi
+ \futurelet\tempt\gl@nlevel@below@begin@b
+}
+\def\gl@nlevel@below@begin@b{%
+ \ifx\tempt\glpreamble \let\next=\gl@nlevel@below@preamble@c
+ \else \let\next=\gln@ilg \fi \next}
+\def\gl@nlevel@below@preamble@c #1{\gl@nlevel@below@preamble@d}
+\def\gl@nlevel@below@preamble@d #1\endpreamble{%
+ \bgroup
+ \ling@everyglpreamble
+ #1\strut
+ \vskip\lingbelowglpreambleskip
+ \vskip\lingextraglskip
+ \egroup
+ \gln@ilg
+}
+%\def\gl@nlevel@below@begin@b{%
+% \ifx\temp\glpreamble \let\next=\relax
+% \else \let\next=\gln@ilg \fi \next}
+%\def\gl@nlevel@below@preamble #1\endpreamble{%
+% \ling@everyglpreamble
+% #1\strut
+% \vskip\lingbelowglpreambleskip
+% \vskip\lingextraglskip
+% \egroup
+% \bgroup
+% \gln@ilg
+%}
+\def\gln@ilg{%
+ \ling@everyglilg
+ \lineskip=\lingextraglskip
+ \rightskip=\ling@glrightskip
+ \ifcase\ep@glhangstyle
+ \or
+ \hangindent=\ling@glhangindent
+ \hangafter=1
+ \or
+ \ep@glmkcascade
+ \fi
+ \leavevmode
+ \gln@ilg@a
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if@glspace
+\def\gln@ilg@a{\futurelet\temp\gln@ilg@b}
+\def\gln@ilg@b{\ifx\temp\endgl \let\next=\relax
+ \else \ifx\temp\nogloss \let\next=\gln@noglossword
+ \else \ifx\temp\glft \let\next=\relax
+ \else \let\next=\gln@word \fi\fi\fi \next }
+\def\gln@noglossword{\expandafter\gln@word}
+\def\gln@word #1[#2]#3 {%
+ \def\@currentitem{\\{#1}}%
+ \def\@diacritic{#3}%
+ \gln@ilg@f #2/\@nil
+ \gln@ilg@a
+}
+\def\nogloss#1{{#1}[]}%
+\def\gln@ilg@f{\@ifnextchar\@space\gln@ilg@fi\gln@ilg@fii}
+\def\gln@ilg@fi #1#2/{\gl@xappend #2\to\@currentitem \gln@ilg@g}
+\def\gln@ilg@fii#1/{\gl@xappend #1\to\@currentitem \gln@ilg@g}
+\def\gln@ilg@g{\@ifnextchar\@nil\gln@ilg@h\gln@ilg@f}
+\def\gln@ilg@h #1{%
+ \gln@printglword
+ \ifx\@diacritic\empty
+ \else \expandafter\gln@diacritic\@diacritic\@nil \fi
+}
+\def\gln@printglword{%
+ \if@glspace \hskip\lingglspace \else \@glspacetrue \fi
+ \begingroup
+ \gltoks@sofar={}%
+ \lineskip=0pt
+ \ling@everyglword
+ \gl@loopmoretrue
+ \loop\ifgl@loopmore
+ \gl@lop\colorlist\to\@linecolor
+ \ep@mklinecolorop
+ \gl@lop\gln@abovelineskip\to\@aboveskip
+ \ifx\@aboveskip\empty \let\@above=\empty
+ \else \edef\@above{\noalign{\vskip\@aboveskip}}\fi
+ \gl@lopTL\gln@everyline\to\gltoks@every
+ \gl@lopTL\@currentitem\to\gltoks@next
+ \edef\temp{\the\gltoks@sofar \@above
+ \glstrut {\@linecolorop \the\gltoks@every \the\gltoks@next}\cr}%
+ \gltoks@sofar=\expandafter{\temp}%
+ \ifx\@currentitem\empty \gl@loopmorefalse \fi
+ \repeat
+ \vtop{%
+ \lineskip=0pt
+ \ling@everyglword
+ \halign{\glwordalign{##}\cr \the\gltoks@sofar}}%
+ \endgroup
+}
+\def\gln@diacritic#1#2\@nil{%
+ \def\temp{#2}\ifx\temp\empty \else \ep@diacriticerror{#1#2}\fi
+ \if\noexpand #1\noexpand @\let\next\@glspacefalse
+ \else \if\noexpand #1\noexpand +\let\next\gln@after@c
+ \else \ep@diacriticerror{#1}\fi\fi
+ \next
+}
+\def\gln@after@c{%
+ \par
+ \ifcase\ep@glhangstyle
+ \or
+ \hangindent=\ling@glhangindent \hangafter=0
+ \or
+ \glhangcarry
+ \fi
+ \leavevmode
+ \@glspacefalse
+}
+\def\ep@diacriticerror#1{%
+ \@expexerror{bad gloss diacritic: #1 (only @ and + permitted)}\end}
+\def\gl@nlevel@below@ft{%
+ \vskip\lingaboveglftskip
+ \vskip\lingextraglskip
+ \egroup\bgroup
+ \nointerlineskip
+ \strut
+ \ling@everyglft
+}
+\def\gl@nlevel@below@end{\par\egroup\egroup\egroup\egroup}
+\define@lingkey{glneveryline}{\ep@setlist\gln@everyline{#1}}
+\define@lingkey{glnabovelineskip}{\ep@setlist\gln@abovelineskip{#1}%
+ \gl@lop\gln@abovelineskip\to\temp % no first line abovelineskip
+ \gl@push{}\to\gln@abovelineskip
+}
+% bug fix 4/9/2016
+\def\gl@append #1\to #2{%
+ \gltoks@a={\\{#1}}%
+ \gltoks@b=\expandafter{#2}%
+ \edef#2{\the\gltoks@b\the\gltoks@a}%
+}
+\def\gl@eappend{\expandafter\gl@append}
+% end bug fix
+\lingset{glneveryline={\it},glnabovelineskip={}}
+%%%%%%%%%%%%%%%% end nlevel %%%%%%%%%%%%%%%%%%%%
+
+% ----- brackets -----
+\newif\if@glpostbrack
+\newcount\@glaparsestate % 0 normal, 1 post @, 2 post [, 3 post ]
+\define@lingincdimenkeys{glbrackbracksep,glbrackwordsep}
+\lingset{glbrackbracksep=.05em,glbrackwordsep=.1em}
+% 2011-12-09 introduce hook into \printlback and \printrbrack to allow font selection
+\define@ling@cmdkeys{everybrack}
+\lingset{everybrack=\rm}
+\def\printlbrack{{\ling@everybrack [}}
+\def\printrbrack{{\ling@everybrack ]}}
+% ----- cascading hanging indentation -----
+\newdimen\glwcascade@pshapeindent
+\newdimen\glwcascade@pshapelinewd
+\def\glwcascade@parshapetarget{}
+\def\glwcascade@mkshapeaux{%
+ \edef\glwcascade@parshapetarget
+ {\glwcascade@parshapetarget\space
+ \the\glwcascade@pshapeindent\space\the\glwcascade@pshapelinewd}%
+ \advance\glwcascade@pshapeindent by \ling@glhangindent
+ \advance\glwcascade@pshapelinewd by -\ling@glhangindent
+}
+\def\ep@glmkcascade{{%
+ \ep@cnta=\ep@cascadecount
+ \ep@dima=\hsize
+ \advance\ep@dima by -\ep@cascadeindent
+ \edef\cascadeshape{}
+ \loop\ifnum\ep@cnta >0
+ \edef\cascadeshape{\cascadeshape \the\ep@cascadeindent\space\the\ep@dima\space}%
+ \advance\ep@cascadeindent by \ling@glhangindent
+ \advance\ep@dima by -\ling@glhangindent
+ \advance\ep@cnta by -1
+ \repeat
+ \xdef\cascadeshape{\noexpand\parshape\the\ep@cascadecount\space\cascadeshape}}%
+ \cascadeshape
+ \ignorespaces
+}
+\def\glhangcarry{%
+ \edef\next{\the\prevgraf}%
+ \advance\ep@cascadecount by -\next
+ \ep@dimc=\ling@glhangindent
+ \advance\ep@cascadeindent by \next\ep@dimc
+ \ep@glmkcascade
+}
+% ----- side by side (ss) gloss style -----
+\def\gl@setprefix{\edef\gl@prefix{gl@\ling@glstyle @\ling@glftpos @}}
+\def\glft{\csname \gl@prefix ft\endcsname}
+\def\gl@beginglstyle{\csname \gl@prefix begin\endcsname}
+\def\endgl{\csname \gl@prefix end\endcsname}
+\def\glpreamble{\csname \gl@prefix preamble\endcsname}
+
+\define@choicekey{ling}{glftpos}[\ling@glftpos\gl@ftpos@num]%
+ {below,right}{\gl@setprefix}
+
+\define@lingcmdkeys{sssep,ssratio,ssrightskip}
+\lingset{sssep=2em,ssratio=.6,ssrightskip=0pt plus 2em}
+\newdimen\ssleftwd
+\newdimen\ssrightwd
+\def\ep@setssdims{%
+ \dimen0 =\hsize
+ \advance\dimen0 by -\leftskip
+ \advance\dimen0 by -\lingsssep
+ \ssleftwd=\lingssratio\dimen0
+ \ssrightwd=\dimen0
+ \advance\ssrightwd by -\ssleftwd
+}
+\def\gl@wrap@right@begin{%
+ \ep@setssdims
+ \leavevmode\bgroup\hbox\bgroup
+ \hsize=\ssleftwd
+ \lingset{glwidth=\ssleftwd}
+ \gl@wrap@below@begin
+}
+\def\gl@wrap@right@end{\egroup\egroup}
+\def\gl@wrap@right@ft #1//{%
+ \gl@wrap@below@end
+ \hskip\lingsssep
+ \vtop{%
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \parindent=0pt
+ \hsize=\ssrightwd
+ \ling@everyglft
+ #1}%
+ \ignorespaces
+}
+\expandafter\def\expandafter\gl@nlevel@right@medial\expandafter
+ {\gl@nlevel@below@end \gl@nlevel@right@medial@a}
+\def\gl@nlevel@right@medial@a{\egroup
+ \def\gl@prefix{gl@nlevel@right@}%
+ \hskip\lingsssep
+ \vtop\bgroup
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \parindent=0pt
+ \hsize=\ssrightwd
+ \ling@everyglft
+}
+\def\gl@nlevel@right@begin{%
+ \ep@setssdims
+ \leavevmode
+ \vtop\bgroup
+ \hsize=\ssleftwd
+ \leftskip=0pt
+ \def\gl@prefix{gl@nlevel@below@}
+ \let\gl@nlevel@below@ft=\gl@nlevel@right@medial \begingl }
+ \def\gl@nlevel@right@end{\egroup\egroup}
+% ----- gloss with a side panel
+%2015 added macros for side panel in nlevel style
+\define@lingcmdkeys{everypanel}
+\lingset{everypanel={}}
+\def\beginglpanel{\@getoptionalarg\beginglpanel@a}
+\def\beginglpanel@a{%
+ \bgroup
+ \ifcase\gl@style@num
+ \let\endgl=\gl@wrap@panel@end
+ \else
+ \let\endgl=\gl@nlevel@panel@end
+ \fi
+ \begin@glpanel@right
+}
+\def\begin@glpanel@right{%
+ \ling@usearg
+ \ep@setssdims
+ \leavevmode
+ \lingset{glwidth=\ssleftwd}
+ \begingl
+}
+\def\gl@wrap@panel@end{%
+ \gl@wrap@below@end
+ \hfill
+ \vtop\bgroup
+ \hsize=\ssrightwd
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \lingeverypanel
+}
+\def\gl@nlevel@panel@end{%
+ \gl@nlevel@below@end
+ \hfill
+ \vtop\bgroup
+ \hsize=\ssrightwd
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \lingeverypanel
+}%
+\def\endpanel{\egroup\egroup\par}
+% ----- underfixes -----
+% removed 11/4/2015
+% put back temporarily 3/9/2017 (still needed in manual)
+\def\gluf/#1/#2/{%
+ \vtop{\offinterlineskip\halign{\hfil##\hfil\cr
+ \strut #1\cr
+ \noalign{\vskip-\ling@glufcloseup}
+ \ling@everygluf \strut#2\cr
+}}}
+% ----------
+\define@ling@cmdkeys{everygluf,glufcloseup}
+\lingset{glufcloseup=.4ex,everygluf=\sc}
+% ----- gloss comments and citations -----
+\def\rightcomment#1{\leavevmode\rlap{%
+ \hbox to\hsize{\hfil \rm #1\hskip\leftskip}}\ignorespaces}
+\let\rightcite=\rightcomment % for backwards compatability
+\define@ling@cmdkeys{mincitesep}
+\lingset{mincitesep=1.5em}
+% jf 2011-12-09 introduce everytrailingcitation hook
+\define@ling@cmdkeys{everytrailingcitation}
+\def\trailingcitation#1{%
+ \hskip\ling@mincitesep plus 1fill
+ \penalty100\null\nobreak \hskip 0pt plus 1fill
+ \hbox{\ling@everytrailingcitation #1}%
+}
+\lingset{everytrailingcitation=}
+%! ----- initial settings -----
+\lingset{%
+ aboveexskip=2.7ex plus .8ex minus .8ex,
+ belowexskip=2.7ex plus .8ex minus .8ex,
+ Everyex=,
+ everyex=,
+ numoffset=0pt,
+ labelanchor=numright,
+ labeloffset=1em,
+ labelwidth=.78em,
+ textanchor=normal,
+ textoffset=1em,
+ preambleanchor=numright,
+ preambleoffset=1em,
+ avoidnumlabelclash=false,
+ appendtopexarg=,
+ labeltype=alpha,
+ everylabel=,
+ labelalign=left,
+ belowpreambleskip=1ex,
+ interpartskip=1ex,
+% splitexpenalty=200,
+ exbreakfil=0pt plus 4ex,
+ exbreakpenalty=-50,
+ splitpartspenalty=200,
+% auxiliary parameters used for building tables
+ dima=2.4em,
+ crskip=.6em
+}
+\lingset{%
+% parameters used in glosses
+ glspace=.5em plus.4em minus.15em,
+ glrightskip=0pt plus .1\hsize,
+ aboveglcskip=0pt,
+ aboveglftskip=1ex,
+ belowglpreambleskip=1ex,
+ everyglpreamble=,
+ glhangindent=1em,
+ everygla=\it,
+ everyglb=,
+ everyglc=,
+ everyglft=,
+ everygl=,
+ everyglilg=,
+ everyglword=,
+ glwordalign=left,
+ glwidth=0pt,
+ glufcloseup=.4ex,
+ everygluf=,
+ glstyle=wrap,
+ extraglskip=.5ex,
+ mincitesep=1.5em,
+ glstruts=true
+}
+%%%%%%%%%%%%%%%% additions to the CTAN file
+\def\tspacea{\hskip\lingdima}
+\def\tspaceb{\hskip\lingdimb}
+\def\tspacec{\hskip\lingdimc}
+\lingset{dimb=1.5em,dimc=1.5em}
+
+\resetatcatcode