\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.}
The following hack may help you achieve your goal. It's based on the idea of a zero-height minipage to overlap two triple-spaced minipages.
I'll use placeholders for the English and Spanish text (\english and \spanish respectively). Also, be sure to include the setspace package:
\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.}
By giving the top block a height of 0pt we allow for the next minipage to overlap it.
The primary One of the problems with this idea is that if the zero-height section is longer than the regular section, then you'll have some lingering overlapping text to deal with. (Edit: This problem is addressed in the comment below, note that line-breaks will also be a serious drawback to this idea.)
I don't think there is a package to do what you want, but it is possible to implement this yourself using \vsplit, which is well documented in Tex by Topic (availble for free download, or in the dead-tree edition via Lulu). The basic idea is
You define two vboxes, one for the English, one for the Spanish, and you want to take out the contents one line at a time. Call these vboxes \ENbox and \ESbox;
You need to determine the correct vertical dimension to use: this might be \lineheight, or you might need a different value, you will have to experiment. Assuming \lineheight is right ...
... then you can get the next line of English using \setbox\nextline=\vsplit\ENbox to \lineheight, which you can output using \unvbox\ENbox, then likewise the next line from \ESbox, then some vertical space for the intergloss gap;
Then you need to test the loop, which you can do by querying the vertical heights, using \ht, of \ENbox and \ESbox. This bit will be fiddly.
All-in-all, this will be somewhat tricky coding: good luck, and don't hesitate to ask questions here if you run into difficulties.
Postscript This is obviously much more work than Geoff's much simpler solution, which for some reason I hadn't seen when I wrote this, but it should be more flexible if you want to fiddle with it.
\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
If you want to interlace Spanish and English paragraphs, and have them line up approximately correctly, then what you want is to write your translations word-by-word (or several words by several words), and use a gloss package that can wrap long sentences. I've done this before using gloss.sty. An example of its use(the goal was to gloss each word with its part of speech):
\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
The package lines things up words from the first language with words from the second "language" using spaces. To line up multiple words in one language with a single word (or multiple words) from the other language, use braces to group the multiple words. Though the lines here are interlaced, this is just for my editing convenence. You could write really long lines if you wanted to, and the gloss algorithm will wrap them properly.
I've also used a two-column paragraph-by-paragraph approach using the parallel package.
%
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
%
put an extra line break in between each set of lines:
%
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
%
发布评论
评论(4)
以下技巧可能会帮助您实现目标。它基于零高度迷你页面的想法,以重叠两个三倍间距的迷你页面。
我将为英语和西班牙语文本使用占位符(分别为
\english
和\spanish
)。另外,请务必包含setspace
包:通过将顶部块的高度设置为
0pt
,我们允许下一个minipage
与其重叠。主要这个想法的问题之一是,如果零高度部分比常规部分长,那么您将需要处理一些挥之不去的重叠文本。 (编辑:这个问题在下面的评论中得到解决,请注意换行符也将是这个想法的一个严重缺陷。)结果(部分):
The following hack may help you achieve your goal. It's based on the idea of a zero-height minipage to overlap two triple-spaced minipages.
I'll use placeholders for the English and Spanish text (
\english
and\spanish
respectively). Also, be sure to include thesetspace
package:By giving the top block a height of
0pt
we allow for the nextminipage
to overlap it.The primaryOne of the problems with this idea is that if the zero-height section is longer than the regular section, then you'll have some lingering overlapping text to deal with. (Edit: This problem is addressed in the comment below, note that line-breaks will also be a serious drawback to this idea.)The result (in part):
我不认为有一个包可以做你想要的事情,但是可以使用
\vsplit
自己实现这一点,这在 Tex by Topic(可免费下载,或通过 Lulu 获得 dead-tree 版本)。基本思想是\ENbox
和\ESbox
;\lineheight
,或者您可能需要不同的值,您必须进行试验。假设\lineheight
是正确的……\setbox\nextline=\vsplit\ENbox to \lineheight
得到下一行英文,你可以使用可以使用\unvbox\ENbox
输出,然后同样从\ESbox
输出下一行,然后是舌间间隙的一些垂直空间;\ht
、\ENbox
和\ESbox
查询垂直高度来实现。这一点会很麻烦。总而言之,这将是一个有点棘手的编码:祝你好运,如果遇到困难,请不要犹豫,在这里提问。
后记 这显然比 Geoff 的更简单的解决方案需要更多的工作,出于某种原因我在写这篇文章时没有看到它,但如果你想摆弄它,它应该更灵活。
I don't think there is a package to do what you want, but it is possible to implement this yourself using
\vsplit
, which is well documented in Tex by Topic (availble for free download, or in the dead-tree edition via Lulu). The basic idea is\ENbox
and\ESbox
;\lineheight
, or you might need a different value, you will have to experiment. Assuming\lineheight
is right ...\setbox\nextline=\vsplit\ENbox to \lineheight
, which you can output using\unvbox\ENbox
, then likewise the next line from\ESbox
, then some vertical space for the intergloss gap;\ht
, of\ENbox
and\ESbox
. This bit will be fiddly.All-in-all, this will be somewhat tricky coding: good luck, and don't hesitate to ask questions here if you run into difficulties.
Postscript This is obviously much more work than Geoff's much simpler solution, which for some reason I hadn't seen when I wrote this, but it should be more flexible if you want to fiddle with it.
如果您想要交错西班牙语和英语段落,并使它们大致正确地排列,那么您想要的就是逐字(或几个单词几个单词)编写翻译,并使用可以包裹很长的光泽包句子。我在使用 gloss.sty 之前就已经这样做过。它的使用示例(目标是用词性来修饰每个单词):
该包使用空格将第一种语言中的单词与第二种“语言”中的单词排列起来。要将一种语言中的多个单词与另一种语言中的单个单词(或多个单词)对齐,请使用大括号将多个单词分组。虽然这里的线条是交错的,但这只是为了我编辑的方便。如果你愿意的话,你可以写很长的行,光泽算法会正确地包裹它们。
我还使用了两列逐段方法,使用
If you want to interlace Spanish and English paragraphs, and have them line up approximately correctly, then what you want is to write your translations word-by-word (or several words by several words), and use a gloss package that can wrap long sentences. I've done this before using gloss.sty. An example of its use(the goal was to gloss each word with its part of speech):
The package lines things up words from the first language with words from the second "language" using spaces. To line up multiple words in one language with a single word (or multiple words) from the other language, use braces to group the multiple words. Though the lines here are interlaced, this is just for my editing convenence. You could write really long lines if you wanted to, and the gloss algorithm will wrap them properly.
I've also used a two-column paragraph-by-paragraph approach using the parallel package.
在每组行之间添加一个额外的换行符:
put an extra line break in between each set of lines: