16

I'm writing a linguistics paper that uses a large amount of linguistic examples from a wide variety of languages, using the gb4e package. I want to be able to label each example with information about the language it comes from, as I've seen in some texts, sort of like this:

Language (family, citation, etc.)  
   (1) example text  
       glosses
       'translation'

gb4e is great at formatting the examples themselves, but I can't seem to get the label placed where I want it, that is, placed immediately before the example and without an indent. Here's some example code:

\documentclass{article}
\usepackage{gb4e}
\usepackage{lipsum}

\begin{document}
\lipsum[2]

Hungarian (Finn-Ugric, \emph{reference})  
\begin{exe}  
\ex \gll    J\'anos h\'aza\\  
            John house.his\\  
    \glt    `John's house'  
\end{exe}

\lipsum[3]
\end{document}

If the label text is outside the exe environment, it's treated like a regular paragraph, but if I try to put it inside, it gives me an error. How can I make it look the way I want? I've looked at other packages that do numbered examples, but they don't seem to have solutions either, and they also don't have the same functionality as gb4e that I need.

Any help would be greatly appreciated.

2
  • 1
    I have edited your question to include lipsum package for introducing dummy text for better readability and focus, you can also use egreg's kantlipsum package for the same purpose. Please rollback if this is not desired.
    – percusse
    Commented Mar 27, 2012 at 3:19
  • Didn't even know those existed. Thank you!
    – Garrett
    Commented Mar 27, 2012 at 14:07

6 Answers 6

18

If you use Alexis Dimitriadis' version of cgloss4e available here as cgloss.sty you can put language information right aligned with the first line of the example. This is IMO a very nice way to format such information, and quite common in the field.

It is not possible with this solution to put right aligned materials on the same line as the gloss itself, but it is possible (if needed) to put material on the \glt line.

\documentclass{article}
\usepackage{gb4e}
\usepackage{cgloss}
\usepackage{lipsum}

\begin{document}
\lipsum[2]

 
\begin{exe}  
\ex \gll    J\'anos h\'aza\\ 
            John house.his\\ \hfill Hungarian (Finno-Ugric, \emph{reference}) 
    \glt    `John's house'  
\end{exe}

\lipsum[3]
\end{document}

Solution also works with linguex

Another popular package for formatting linguistic examples is the linguex package. Since linguex also uses cgloss4e, the solution given above will also work. Here's the same example using the linguex commands. The order of loading the packages matters: cgloss must be loaded after linguex is loaded.

\documentclass{article}
\usepackage{linguex}
\usepackage{cgloss}
\usepackage{lipsum}

\begin{document}
\lipsum[2]

\exg. 
   J\'anos h\'aza\\ 
   John house.his\\ \hfill Hungarian (Finno-Ugric, \emph{reference}) 
   \glt    `John's house'  

\lipsum[3]
\end{document}

output of code

7
  • That does look nice. Does cgloss4e otherwise work the same as gb4e? I noticed it's not included in Texlive.
    – Garrett
    Commented Mar 27, 2012 at 14:11
  • 1
    cgloss4e is loaded by gb4e; it's the part that handles the glosses and part of the regular gb4e distribution. You don't see it because you usually never load it by itself. cgloss is a replacement for cgloss4e not for gb4e itself. But yes, it works identically as far as I know. I'm not sure why Alexis has never put it up on CTAN.
    – Alan Munn
    Commented Mar 27, 2012 at 14:16
  • 1
    So if I load cgloss, does it automatically replace cgloss4e? Also, should it be loaded before or after gb4e? I've discovered that gb4e usually needs to be loaded last or it causes problems.
    – Garrett
    Commented Mar 27, 2012 at 14:23
  • 2
    Yes. You should load it after gb4e. And yes, gb4e should be loaded almost last since it messes with the category codes of _ and ^.
    – Alan Munn
    Commented Mar 27, 2012 at 14:27
  • Here's a question related to this answer.
    – user125234
    Commented Apr 13, 2021 at 3:07
7

I realize this is an old question, but for posterity's sake, I thought I'd point out that expex provides several ways to include language name or other example annotations.

Right-aligned, on first gloss line

This is the format suggested in the answer by @Alan Munn:

enter image description here

Explanation

Use \rightcomment{} between \gla and the first word. See section 11.2 of the expex documentation.

Code

\documentclass{article}
\usepackage{expex}
\lingset{everygla=, belowglpreambleskip=-0.5ex, aboveglftskip=-0.5ex} % gloss formatting

\usepackage{lipsum}

\begin{document}
    \lipsum[2]  

    \ex
    \begingl
    \gla\rightcomment{Hungarian (Finno-Ugric, \emph{reference})}J\'anos h\'aza//
    \glb John house.his//
    \glft `John's house'//
    \endgl
    \xe

    \lipsum[3]
\end{document}

Within example, above gloss lines

This is the format suggested in the answer by @cbowern:

enter image description here

Explanation

Use \glpreamble to introduce the preamble line above the first gloss line. Formatting of the gloss preamble line can be controlled globally or locally by the parameter everyglpreamble. The vertical space between the gloss preamble and the first gloss line can be controlled by the parameter belowglpreambleskip. See section 9 of the expex documentation.

Code

\documentclass{article}
\usepackage{expex}
\lingset{everygla=, belowglpreambleskip=-0.5ex, aboveglftskip=-0.5ex} % gloss formatting

\usepackage{lipsum}

\begin{document}
    \lipsum[2]  

    \ex
    \begingl
    \glpreamble Hungarian (Finno-Ugric, \emph{reference})//
    \gla J\'anos h\'aza //
    \glb John house.his//
    \glft `John's house' //
    \endgl
    \xe

    \lipsum[3]
\end{document}

Left-aligned, above the example

This is the format suggested in the original question:

enter image description here

Explanation

expex doesn't provide a special command for this format, but it's still pretty simple to produce. The code below creates a command \langlabel that removes the paragraph indent and adds the vertical space that normally appears above examples. It then uses \ex~ instead of \ex so that there is no vertical space between the label and the example.

By default, example numbers produced by expex are flush with the left margin (unlike in gb4e, where they are indented). If you want to indent the example numbers in expex, use the parameter numoffset. See sections 4 and 5 of the expex documentation.

Code

\documentclass{article}
\usepackage{expex}
\newlength{\aboveexskip} % creates a length \aboveexskip
\setlength{\aboveexskip}{2.7ex plus .4ex minus .4ex} % sets a value for \aboveexskip (this the default value for vertical space above examples taken from the expex documentation)
\lingset{aboveexskip=\aboveexskip, everygla=, belowglpreambleskip=-0.5ex, aboveglftskip=-0.5ex} % gloss formatting, aboveexskip=\aboveexskip sets the expex parameter aboveexskip to the length specified in the line above

\newcommand{\langlabel}[1]{\vspace{\aboveexskip}\noindent{#1}} % \aboveexskip is used here because \ex~ will remove the vertical spacing above the example

\usepackage{lipsum}

\begin{document}
    \lipsum[2]  

    \langlabel{Hungarian (Finno-Ugric, \emph{reference})}
    \ex~ % use the ~ version with \langlabel unless you want vertical space between the label and the example
    \begingl
    \gla J\'anos h\'aza //
    \glb John house.his//
    \glft `John's house' //
    \endgl
    \xe

    \lipsum[3]
\end{document}
3

Here's a (rather ugly) solution by wrapping the language label in an un-numbered example via \sn:

\newcommand\langlabel[1]{\sn\hspace*{-\leftmargin}{#1}\\[-1em]}
...
\begin{exe}  
\langlabel{Hungarian (Finn-Ugric, \emph{reference})}
\ex \gll    J\'anos h\'aza\\  
            John house.his\\  
    \glt    `John's house'  
\end{exe}

enter image description here

3

You can also just put the language label between the \ex and \gll commands:

\begin{exe}  
\ex Hungarian (Finn-Ugric, \emph{reference}) \gll    J\'anos h\'aza\\  
            John house.his\\  
    \glt    `John's house'  
\end{exe}
2

If you're using linguex, you might encounter an error if you use Alan's method from answer #1 above. I had to replace l.361--63 of linguex.sty,...

\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\end{flushleft}%
         \global\glossfalse%
         \ifindex\expandafter\lookforwords\fi {} }

...with the following:

\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\leavevmode \egroup 
         \global\glossfalse%
         \ifindex\expandafter\lookforwords\fi {} }

The reason was that cgloss redefines \gl@stop, but then linguex re-re-defines it. The changes above avoid that problem by combining both re-definitions.

In addition, replace line 34 in linguex.sty...

\RequirePackage{xspace,cgloss4e}

...by...

\RequirePackage{xspace,cgloss}

...and linguex loads cgloss, so you don't have to call it seperately.

It works fine on my installation.

1
  • 2
    Welcome to TeX.sx! You can add highlighting of code by selecting it and hitting Ctrl + K (or click the button marked {} above the answer field. Blocks are indented by four spaces, inline code placed between backticks (`). Commented Jan 22, 2014 at 15:30
2

Whilst this doesn't answer the OP's specific question, it relates to the same issue as in the question title.

If you use linguex then I think the best solution is to simply place the \hfill Language info after the translation line, which of course aligns your language info to the last line of your glossed example, but this avoids far worse problems.

\documentclass{article}
\usepackage{linguex}

\begin{document}

\exg. Gianni teme questo.\\
      Gianni fears this\\ 
      `Gianni fears this' \hfill Experiencer subjects

\end{document}

Which looks like this:

last line language info with linguex

The problem with all of the above solutions for people who already use linguex is that

  1. you have to modify linguex.sty as per Daniel Büring's response above and/or download and install cgloss as all the previous answers suggest, and more importantly

  2. you'll have to modify the way you write ALL your linguex glossed examples to include \glt at the beginning of the translation line. I use \exg. all the time and don't always need extra info right aligned alongside it so I don't want to re-write all of my examples according to what the cgloss package requires.

1
  • Note that this also works for gb4e without cgloss, with the same advantages and disadvantages as noted in this answer.
    – Marijn
    Commented Mar 4, 2020 at 16:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .