【问题标题】:Dual-line bilingual paragraph in LaTeX [closed]LaTeX中的双行双语段落[关闭]
【发布时间】:2010-05-25 18:19:12
【问题描述】:

行间注释可用于对文档的翻译进行布局。

http://en.wikipedia.org/wiki/Interlinear_gloss

通常这是逐字或逐词素完成的。但是,我想以不同的方式执行此操作,一次翻译整个段落。以下链接和图片是我想要完成的示例,尽管我想为更大的不同文本执行此操作。

http://www.optimnem.co.uk/learning/spanish/three-little-pigs.php

现在我对考虑在语言之间改变顺序的单词或短语的顺序不感兴趣。也就是说,我不介意段落中的单词是否对齐,或者一个段落的长度比另一个段落的长度长得多,从而导致悬垂线。

据我所知,以下软件包不能满足我的需求:

covingtn.sty
cgloss4e.sty
gb4e.sty
lingmacros.sty - shortex

这里是英文版:

In the heart of the forest lived three little pigs who were brothers. The wolf always was chasing them in order to eat them. In order to escape the wolf, the pigs decided to make a house each. The smallest made his from straw, to finish first and go out to play. The middle one constructed a cottage from wood. Seeing that his little brother had finished already, he hurried to go and play with him. The oldest worked on his house of brick. 'You'll soon see what the wolf does with your houses,' he scolded his brothers but they were having a great time.

这是西班牙语版本:

En el corazón del bosque vivían tres cerditos que eran hermanos. El lobo siempre andaba persiguiéndoles para comérselos. Para escapar del lobo, los cerditos decidieron hacerse una casa. El pequeño la hizo de paja, para acabar antes y poder irse a jugar. El mediano construyó una casita de madera. Al ver que su hermano perqueño había terminado ya, se dio prisa para irse a jugar con él. El mayor trabajaba en su casa de ladrillo. - Ya veréis lo que hace el lobo con vuestras casas - riñó a sus hermanos mientras éstos se lo pasaban en grande.

不想想像这样手动操作:

\documentclass{article}
\usepackage[margin=1in, paperwidth=8.5in, paperheight=11in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{url}
\begin{document}

\noindent
\url{http://www.optimnem.co.uk/learning/spanish/three-little-pigs.php}\\
\\
\indent
En el corazón del bosque vivían tres cerditos que eran hermanos. El lobo siempre\\
\indent
In the heart of the forest lived three little pigs who were brothers. The wolf always\\
\\
%
andaba persiguiéndoles para comérselos. Para escapar del lobo, los cerditos decidieron\\
was chasing them in order to eat them. In order to escape the wolf, the pigs decided to\\
\\
%
hacerse una casa. El pequeño la hizo de paja, para acabar antes y poder irse a jugar.\\
make a house each. The smallest made his from straw, to finish first and go out to play.\\
\\
%
El mediano construyó una casita de madera. Al ver que su hermano perqueño había\\
The middle one constructed a cottage from wood. Seeing that his little brother had\\
\\
%
terminado ya, se dio prisa para irse a jugar con él. El mayor trabajaba en su casa de\\
finished already, he hurried to go and play with him. The oldest worked on his house of\\
\\
%
ladrillo. - Ya veréis lo que hace el lobo con vuestras casas - riñó a sus hermanos\\
brick. 'You'll soon see what the wolf does with your houses,' he scolded his brothers\\
\\
%
mientras éstos se lo pasaban en grande.\\
but they were having a great time.\\
\\

\end{document}\\

我想使用一个包或宏来自动让英文和西班牙文文本在到达行尾时自动穿插换行符。如何以更自动化的方式在 Latex 中布局这个简单的双行双语段落(无需手动添加换行符)?

【问题讨论】:

标签: latex translation linguistics


【解决方案1】:

以下技巧可以帮助您实现目标。它基于一个零高度的 minipage 与两个 triple 间隔的 minipage 重叠的想法。

我将为英语和西班牙语文本使用占位符(分别为\english\spanish)。另外,一定要包含setspace 包:

\usepackage{setspace}
\def\english{In the heart of the forest lived three little pigs who were brothers. The wolf always was chasing them in order to eat them. In order to escape the wolf, the pigs decided to make a house each. The smallest made his from straw, to finish first and go out to play. The middle one constructed a cottage from wood. Seeing that his little brother had finished already, he hurried to go and play with him. The oldest worked on his house of brick. 'You'll soon see what the wolf does with your houses,' he scolded his brothers but they were having a great time.}
\def\spanish{En el corazón del bosque vivían tres cerditos que eran hermanos. El lobo siempre andaba persiguiéndoles para comérselos. Para escapar del lobo, los cerditos decidieron hacerse una casa. El pequeño la hizo de paja, para acabar antes y poder irse a jugar. El mediano construyó una casita de madera. Al ver que su hermano perqueño había terminado ya, se dio prisa para irse a jugar con él. El mayor trabajaba en su casa de ladrillo. - Ya veréis lo que hace el lobo con vuestras casas - riñó a sus hermanos mientras éstos se lo pasaban en grande.}

通过将顶部块的高度设置为 0pt,我们允许下一个 minipage 与其重叠。

\begin{minipage}[t][0pt]{\linewidth}
    \setstretch{3}
    \english
\end{minipage}

\begin{minipage}[t]{\linewidth}
    \setstretch{3}
    \spanish
\end{minipage}

主要 这个想法的一个问题是,如果零高度部分比常规部分长,那么您将需要处理一些挥之不去的重叠文本。 (编辑:这个问题在下面的评论中得到解决,注意换行也是这个想法的一个严重缺陷。)

结果(部分):

【讨论】:

  • 看起来我的西班牙语复制粘贴删除了所有重音字符。对此感到抱歉。
  • +1 聪明:我花了一段时间才弄明白。我知道如何处理重叠:您可以先在 vboxes 中设置文本,然后计算高度差。一个可能更严重的问题是,我怀疑您是否可以告诉零高度的 minipage 在页面末尾停止,如果您想排版长翻译,就会出现问题,这意味着您必须在重叠文本之前进行 vssplit。
  • +1 感谢@Geoff 的回复和工作示例。 \usepackage[utf8]{inputenc} 是我用来保留西班牙语字符的。当我尝试时,您的解决方案有效。我现在正在尝试了解 vspilt,以便我可以解决页面末尾的问题。
【解决方案2】:

我不认为有一个包可以做你想做的事,但可以使用\vsplit 自己实现它,Tex by Topic 中有详细记录(可免费下载,或在死机中)通过露露的树版)。基本思路是

  1. 您定义了两个 vbox,一个用于英语,一个用于西班牙语,并且您想一次取出一行内容。将这些 vbox 称为 \ENbox\ESbox
  2. 您需要确定要使用的正确垂直尺寸:这可能是\lineheight,或者您可能需要不同的值,您必须进行试验。假设\lineheight 是对的......
  3. ...然后你可以使用\setbox\nextline=\vsplit\ENbox to \lineheight得到下一行英文,你可以使用\unvbox\ENbox输出,然后同样从\ESbox输出下一行,然后为intergloss间隙留一些垂直空间;李>
  4. 然后您需要测试循环,您可以通过使用\ht\ENbox\ESbox 查询垂直高度来完成。这一点会很繁琐。

总而言之,这将是一些棘手的编码:祝你好运,如果遇到困难,请随时在这里提问。

后记 这显然比 Geoff 的更简单的解决方案要多得多,出于某种原因,我在写这篇文章时没有看到,但如果你想摆弄它,它应该更灵活.

【讨论】:

  • +1 感谢您的回复。我正在调查 \vsplit。
  • 我想这太难了……真可惜。我很想知道这会如何发展。制作一些检测句点并尝试在较短的句子中添加空格以对齐所有句子开头的环境会特别酷。
  • @D W, @Geoff:这是我的客户可能会使用的东西——我有兴趣编写一个合适的 Latex 包来执行此操作。同事?
  • 我没有编写环境或直接使用 TeX 的经验,所以我的回答是“不”。不过我很好奇。将技术文档翻译成简单的英语,或提出两种不同的措辞方式会很有帮助。 (就像一个好答案与坏答案。)
  • 您好,查尔斯,感谢您的提问。我有兴趣编写一个 Latex 包,但还没有真正详细地完成一个。我用 Python 等语言进行编程,但对 Latex 很陌生。因此,我想我对你帮助不大。这样的包会很有用,但我很惊讶它还没有完成。我进行了一些 Google 搜索并与语言学家交谈,但我认为它不存在。
【解决方案3】:

如果您想将西班牙语和英语段落交错排列,并让它们大致正确排列,那么您想要的是逐字(或几个字接几个字)编写您的翻译,并使用一个光泽包可以换长句。我在使用gloss.sty 之前已经这样做了。它的使用示例(目标是用词性修饰每个单词):

\gloss Both knowledge and wisdom extend man's reach. Knowledge led to
     cjc  nn0       cjc nn0    vvb    {nn0 pos} {nn0 pun} nn0 vvd prp
\gloss computers, wisdom to chopsticks. Unfortunately our association is
       {nn2 pun}  nn0    prp {nn2 pun}  av0           dps nn1        vbz
\gloss overinvolved with the former. The latter will have to wait for a
       ad0         prp  at0 {nn0 pun} at0 nn0  vm0  vhb to0 vvb  avp at0
\gloss more sublime day.
       av0  aj0     {nn1 pun}
\unhbox\gline

该包使用空格将第一种语言中的单词与第二种“语言”中的单词对齐。要将一种语言中的多个单词与另一种语言中的单个单词(或多个单词)对齐,请使用大括号对多个单词进行分组。虽然这里的线条是交错的,但这只是为了我的编辑方便。如果你愿意,你可以写很长的行,光泽算法会正确地包裹它们。

我还使用了parallel 包的两列逐段方法。

【讨论】:

  • 嗨@Ken,感谢您的评论。我对两列解决方案不感兴趣。我想你给我的光泽链接与这个光泽不同:tug.ctan.org/tex-archive/macros/latex/contrib/gloss 对吗?我对乳胶很陌生,您能否提供指向该gloss.sty的示例用法的链接,或者更好地提供您在使用该样式文件之前完成的翻译的sn-p。
  • 不,它和 CTAN 的 macros/latex/contrib/gloss 不一样
【解决方案4】:

在每组行之间添加一个额外的换行符:

%
andaba persiguiéndoles para comérselos. Para escapar del lobo, los cerditos decidieron

was chasing them in order to eat them. In order to escape the wolf, the pigs decided to
%

【讨论】:

  • 感谢您的回答。我不确定我是否清楚地解释了自己。我想输入一整段英语,然后输入一整段西班牙语,并让它们穿插自动放置换行符。您键入的内容与我的示例相同,只是您在我有 \\.您仍然需要手动添加这些。我可能会删除我的示例,它似乎比有用更令人困惑。
  • 用 LaTeX 很难做到这一点,我相信因为 TeX 使用“最合适”的算法来排版字母和单词等等。所以除非你有完全相同的字母,否则很难用 tex 做。如果是逐段,为什么不采用两列方法,一列英文,一列西班牙语。抱歉,我帮不上忙!
  • 是的,两列方法可能有用。希望有人会按照我的要求知道如何做到这一点。如果 TeX 可以自动为一条线放置换行符,我认为有人必须让它为双线工作。请记住,如果每行中的单词不对齐,我不介意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多