我正在写一篇语言学论文,其中使用了大量来自各种语言的语言学示例,使用的是 gb4e 包。我希望能够为每个示例添加有关其来源语言的信息,就像我在一些文本中看到的那样,有点像这样:
Language (family, citation, etc.) (1) example text glosses 'translation'
gb4e 非常擅长格式化示例本身,但我似乎无法将标签放置在我想要的位置,即放置在示例之前且不缩进。以下是一些示例代码:
\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}
如果标签文本在 exe 环境之外,它将被视为常规段落,但如果我尝试将其放入其中,则会出错。我怎样才能让它看起来像我想要的那样?我查看了其他带有编号示例的软件包,但它们似乎也没有解决方案,而且它们也没有我需要的与 gb4e 相同的功能。
任何帮助将不胜感激。
答案1
如果您使用 Alexis Dimitriadis 的版本,cgloss4e
可在此处获取cgloss.sty
您可以将语言信息与示例的第一行右对齐。在我看来,这是一种非常好的格式化此类信息的方法,并且在该领域相当常见。
这是不是使用此解决方案可以将右对齐的材料放在与光泽本身相同的线上,但是也可以(如果需要)将材料放在线上\glt
。
\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}
解决方案还适用于linguex
另一个用于格式化语言示例的流行包是linguex
包。由于linguex
也使用cgloss4e
,因此上面给出的解决方案也将起作用。这是使用linguex
命令的相同示例。加载包的顺序很重要:必须在加载cgloss
之后加载。linguex
\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}
答案2
我知道这是一个老问题,但为了后代的利益,我想指出expex
提供了几种方法来包含语言名称或其他示例注释。
右对齐,在第一条光泽线上
这是@Alan Munn 在回答中建议的格式:
解释
使用\rightcomment{}
between\gla
和第一个单词。请参阅expex
文档。
代码
\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}
例如,在光泽线上方
这是@cbowern 在回答中建议的格式:
解释
用于\glpreamble
在第一条注释行上方引入前言行。注释前言行的格式可以通过参数 进行全局或局部控制everyglpreamble
。注释前言和第一条注释行之间的垂直间距可以通过参数 进行控制belowglpreambleskip
。请参阅第 9 节expex
文档。
代码
\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}
左对齐,位于示例上方
这是原始问题中建议的格式:
解释
expex
没有为这种格式提供特殊命令,但生成起来仍然非常简单。下面的代码创建一个命令\langlabel
,删除段落缩进并添加通常出现在示例上方的垂直空间。然后它使用\ex~
而不是\ex
,这样标签和示例之间就没有垂直空间。
默认情况下, 生成的示例数字expex
与左边距齐平(与 不同gb4e
, 中的示例数字是缩进的)。如果要缩进 中的示例数字expex
,请使用参数numoffset
。请参阅expex
文档。
代码
\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
这是一个(相当丑陋的)解决方案,通过将语言标签包装在未编号的示例中\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}
答案4
如果您正在使用linguex
,则使用上述答案 #1 中 Alan 的方法可能会遇到错误。我不得不替换 l.361--63 linguex.sty
,...
\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\end{flushleft}%
\global\glossfalse%
\ifindex\expandafter\lookforwords\fi {} }
...内容如下:
\def\gl@stop{{\hskip -\glossglue}\unhbox\gline\leavevmode \egroup
\global\glossfalse%
\ifindex\expandafter\lookforwords\fi {} }
原因是cgloss
重新定义了\gl@stop
,但随后linguex
又重新定义了 。上述更改通过结合两次重新定义避免了该问题。
此外,将第 34 行替换为linguex.sty
...
\RequirePackage{xspace,cgloss4e}
...经过...
\RequirePackage{xspace,cgloss}
...并linguex
加载cgloss
,因此您不必单独调用它。
它在我的安装上运行良好。