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
(\glc
ii)在自由翻译(\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 文本没有同样好的作用,但如果它在这些特定场景中不起作用,你应该提出一个单独的问题。