在 ExPex 中对齐文本

在 ExPex 中对齐文本

LaTeX 默认对齐文本,但 ExPex 包中的文本似乎并非如此。我想完全对齐\gla\glb\glc以及\glft。这是一个 MWE:

\documentclass{book}
\usepackage{expex}
\begin{document}
\exdisplay[glftpos=right,glhangstyle=none]
\begingl
  \gla aaaa a aaa aaa a aaaa aaaa aaaa aa aa aaaaaaaa aaaa aaaa a aaa aaa a aaaa aaaa aaaa aa aa aaaaaaaa aaaa //

  \glb bbbb b bbb bbb b bbbb bbbb bbbb bb bb bbbbbbbb bbbb bbbb b bbb bbb b bbbb bbbb bbbb bb bb bbbbbbbb bbbb//

  \glc cccc c ccc ccc c cccc cccc cccc cc cc cccccccc cccc cccc c ccc ccc c cccc cccc cccc cc cc cccccccc cccc//

 \glft dddd d ddd ddd d dddd dddd dddd dd dd dddddddd dddd dddd d ddd ddd d dddd dddd dddd dd dd dddddddd dddd//
\endgl
\xe
\end{document}

正如您在下面看到的,文本没有对齐。 在此处输入图片描述

如何在 ExPex 中获得对齐的文本?理想情况下,该解决方案还应适用于非拉丁字母,包括从右到左的语言。

答案1

有两个子问题需要解决:(i)在对齐行(、、等)中获得对齐依据\gla\glb\glcii)在自由翻译(\glft)中获得对齐依据。

对齐行中的对齐方式

expex包提供了两个参数,可以操纵它们的默认值来获得对齐行的依据。

glrightskip参数决定了右边距和一行上最后一个 glword 之间可以有多少空间。(glword 是由\gla下对齐行中的单词和注释组成的框;请参阅文档的第 9.1 节)。此参数的默认值设置为0pt plus .1\hsize(p. 38),允许最多 10% 的行宽为右边距前的空白。如果删除plus .1\hsize,则可以强制最后一个 glword 位于右边距。

您还应该调整glspace参数,该参数决定 glwords 之间的间距量。其默认值设置为.5em plus .4em minus .15em(p. 38),因此如果您想在 glwords 之间留出更多空白(这可能是对齐所必需的),您可以增加plus .4em;在下面的示例中,我将其设置为plus 3em

意译中的正当理由

为了在自由翻译中获得依据,您可以加载ragged2e包并输入参数\justifying\noindent的定义everyglft。(见这个答案。)请注意,您提供的 MWE 中自由翻译的列非常窄,因此在证明自由翻译的合理性时,可能会遇到水平框过满的问题。请参阅这个问题如果是的话,及其答案。

例子

在下面的例子中,我修改了你的 MWE,使对齐的行中的单词更长,这会导致(缺乏)对齐更加明显,因为expex不会在行间破坏任何 glwords。

\documentclass{book}

\usepackage{ragged2e}
\usepackage{expex}

\lingset{% you can use \lingset to define parameters globally for your document
    glftpos=right%
    ,glhangstyle=none%
}

\definelingstyle{justified}{glrightskip=0pt% the default value for this parameter is 0pt plus .1hsize; by removing the "plus .1hsize" you force the last glword to be at the right margin
    ,glspace=0.5em plus 3em minus 0.15em% the default value for this parameter is .5em plus .4em minus .15em; by increasing the "plus" value from 0.4em to 3em, you increase how much stretch there is between glwords; if this isn't enough for your needs, you can always increase the value
    ,everyglft=\justifying\noindent% \justifying is provided by the ragged2e package
}

\begin{document}

\exdisplay
\begingl
\glpreamble \textbf{Without justification}//

\gla aaaa a aaa aaa a aaaa aaaa aaaa aa aa aaaaaaaa aaaa aaaa a aaa aaa a aaaa aaaa aaaa aa aa aaaaaaaa aaaa //

\glb bbbb b bbbbbbbbbb bbb b bbbbbbbbbbbbbb bbbb bbbb bb bbbbbbbbbb bbbbbbbb bbbb bbbb bbb bbb bbb bbbbbbbbb bbbbbbbbbbbbbbb bbbb bbbbbbbbbbbbbbbb bb bbbb bbbbbbbb bbbb//

\glc cccc c ccc ccc c cccc cccc cccc cc cc cccccccc cccc cccc c ccc ccc c cccc cccc cccc cc cc cccccccc cccc//

\glft Some actual English text so that you can see whether the hyphenation and justification provided by \LaTeX{} are actually working in this free translation.//
\endgl
\xe

\exdisplay[lingstyle=justified]
\begingl
\glpreamble \textbf{With justification}//

\gla aaaa a aaa aaa a aaaa aaaa aaaa aa aa aaaaaaaa aaaa aaaa a aaa aaa a aaaa aaaa aaaa aa aa aaaaaaaa aaaa //

\glb bbbb b bbbbbbbbbb bbb b bbbbbbbbbbbbbb bbbb bbbb bb bbbbbbbbbb bbbbbbbb bbbb bbbb bbb bbb bbb bbbbbbbbb bbbbbbbbbbbbbbb bbbb bbbbbbbbbbbbbbbb bb bbbb bbbbbbbb bbbb//

\glc cccc c ccc ccc c cccc cccc cccc cc cc cccccccc cccc cccc c ccc ccc c cccc cccc cccc cc cc cccccccc cccc//

\glft Some actual English text so that you can see whether the hyphenation and justification provided by \LaTeX{} are actually working in this free translation.//
\endgl
\xe
\end{document}

在此处输入图片描述

在此处输入图片描述

我认为这个解决方案对非拉丁字母或 RTL 文本没有同样好的作用,但如果它在这些特定场景中不起作用,你应该提出一个单独的问题。

相关内容