我正在尝试想出一种方法来表示自然发生的对话的语言示例。我还没有使用 LaTeX 进行语言注释,所以我需要一些帮助,看看哪种软件包最适合入门。
我查看了linguex
、expex
和gb4e
,expex
似乎最适合我的需求。但是,即使有 ,也有一些事情我还是搞不清楚expex
。我提供了一张最终应该是什么样子的图片。
在我的子领域(语言人类学)中,我们使用对话分析惯例来表示自然发生的对话,但对于非英语语言,我们也使用行间注释。由于我正在研究代码转换,所以我有一行额外的注释,其中每个词素都由其语言标识,因此我需要的注释不仅仅是两行(这就是为什么我的第一选择是expex
)。
现在,主要的问题是:如何使用expex
(或其他包或包组合)来获得(a)行号(图中的 12、13)、(b)每个发言者的标签,然后理想情况下(c)还可以缩进一行以表示重叠的语音?
如果能有人帮我实现 (a) 和 (b),我就会很高兴,因为我意识到 (c) 似乎相当复杂。我知道只需一行代码就可以用软件包实现,Tabbing
但由于行间注释的复杂性,我不知道如何开始。
我知道还有conan
一个专门为对话分析设计的包,但我无法让它用于我正在做的事情,而且我找不到任何关于如何修改它的文档(请参阅下面的评论)。
编辑:我遇到了这问题,这基本上和我遇到的问题是一样的。那个人通过手动插入所有缩进行解决了这个问题hspace
,这可以用于一些简短的例子,但 (a) 它不精确,(b) 在格式化多页对话时相当麻烦。
有谁对此有专业知识吗expex
?;)或者也许有人知道如何修改conan
以满足我的需求?还有其他建议吗?
EDIT2:为了说明我想要实现的目标,下面是我所取得的进展(我知道这不起作用,可能是因为我不能一起使用tabbing
和expex
,但它说明了我希望它如何工作,将第二句话与“句子”一词的后半部分对齐)
\documentclass{article}
\usepackage{expex}
\begin{document}
\begin{tabbing}
\ex[exno=Speaker A, exnoformat=X]
\begingl
\glpreamble An example test sen\=tence//
\gla An example test sentence//
\glb gl gl gl gl gl//
\glc A B C D E//
\glft Free translation//
\endgl
\xe
\ex[exno=Speaker B, exnoformat=X]
\begingl
\glpreamble \>A second example test sentence//
\gla A second example test sentence//
\glb gl gl gl gl gl//
\glc A B C D E//
\glft Free translation//
\endgl
\xe
\end{tabbing}
\end{document}
我还没有结婚expex
,只是我可以自己用手册弄清楚如何至少了解基本结构。
任何帮助都非常感谢!
EDIT3:根据以下建议,这可能是通过包实现此目的的一种方法conan
,但现在我不知道在哪里插入\glll
命令?
\documentclass{article}
\usepackage[linenumbers,spacing=1,tt,singlebracket]{conan}
\usepackage{gb4e}
\usepackage{cgloss}
\begin{document}
\begin{exe}
\exi{A}{
\begin{conan*}
\simul{A}{A test sen[tence] with overlap.}
{B}{[Overlap]}
\end{conan*}}
\end{exe}
\end{document}
答案1
savepos
这是使用 ExPex 和包模块的一种概念验证zref
。感谢 David Carlisle 帮助编写zref
聊天中的代码。
基本思想是设置重叠的参考点,然后将其传递给textoffset
ExPex 的参数。这允许您将多个注释示例与任何先前的示例对齐。代码定义了一个环境和 3 个用户宏:
\begin{discourse} ... \end{discourse}
用于对论题中的示例进行分组的环境。这是一个简单的环境,它只是重置行号计数器,但如果您需要标记每个论题并希望将它们列在内容列表中,则可以使其变得更复杂。为此,我将使用包tocloft
。\spkr{}
该宏设置线路号并生成说话者姓名。\overmk{}
这将生成一个标签并跟踪其位置。集合的第一个示例(或者实际上是文档,因为标签是全局的)应包含此实例作为其第一个元素。后续标记可以添加到注释中的任何位置。\offset{}{}
这需要两个标签(由 创建\overmk
)并设置从第二个标记开始的偏移量。
第四个宏\deflargestlabel
用于前言部分。它需要一个强制参数来表示最长的预期发言者姓名,以及一个可选参数来表示最大的预期行号(默认值为 99)。
\deflargestlabel[<longest line number>]{<longest speaker name>}
这是一个完整的示例。请注意,该zref
包正在将标签写入文件.aux
,因此您需要多次编译才能确保引用(以及间距)正确。
\documentclass{article}
\usepackage[user,savepos]{zref}
\newcommand{\offset}[2]{%
\dimexpr\zposx{#2}sp-\zposx{#1}sp+1em\relax}
\newcommand{\overmk}[1]{\leavevmode\zsaveposx{#1}}
\usepackage{expex}
\newcounter{linenum}
\newlength{\largestspkr}
\newlength{\largestnum}
% Use this to define the size of the largest speaker number+name
% The main argument is the longest speaker name; optional argument
% is the largest line number. (default is 99)
\newcommand{\deflargestlabel}[2][99]{
\settowidth{\largestnum}{#1.}
\settowidth{\largestspkr}{~#2}}
% Now we define the largest label to be Elder 1 with a line number of 999
\deflargestlabel[999]{Elder 1}
\newcommand{\spkr}[1]{\refstepcounter{linenum}\makebox[\largestnum][r]{\thelinenum.}~\makebox[\largestspkr][l]{#1}}
%create an environment for each discourse so that the numbers will reset
%this could be made more complicated depending on whether you want to label
%them and include them in a list of discourses, etc., in which case
%using \newlistof from the tocloft package would be preferable.
\newenvironment{discourse}{\setcounter{linenum}{0}}{}
\begin{document}
\begin{discourse}
\setcounter{linenum}{97}
\ex[exno=\spkr{Elder 1}, exnoformat=X]
\begingl
\glpreamble\overmk{A1}An example test sentence//
\gla An exam\overmk{A2}ple test sentence//
\glb gl gl gl gl gl//
\glc A B C D E//
\glft Free translation//
\endgl
\xe
\ex[exno=\spkr{Host}, exnoformat=X,textoffset={\offset{A1}{A2}}]
\begingl
\glpreamble A second example test sentence//
\gla A se\overmk{B3}cond example te\overmk{B2}st sentence//
\glb gl gl gl gl gl//
\glc A B C D E//
\glft Free translation//
\endgl
\xe
\ex[exno=\spkr{Elder 1}, exnoformat=X,textoffset={\offset{A1}{B2}}]
\begingl
\glpreamble A second example test sentence//
\gla A second example test sentence//
\glb gl gl gl gl gl//
\glc A B C D E//
\glft Free translation//
\endgl
\xe
\end{discourse}
\begin{discourse}
\ex[exno=\spkr{Elder 2}, exnoformat=X,textoffset={\offset{A1}{B3}}]
\begingl
\glpreamble A second example test sentence//
\gla A second example test sentence//
\glb gl gl gl gl gl//
\glc A B C D E//
\glft Free translation//
\endgl
\xe
\end{discourse}
\end{document}