Двухстрочный двуязычный абзац в LaTeX
Межлинейный глянец может быть использован для верстки перевода документа.
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 более автоматизированным (без добавления разрывов строк)?
4 ответа
Следующий хак может помочь вам достичь вашей цели. Он основан на идее мини-страницы нулевой высоты, чтобы перекрывать две тройные мини-страницы.
Я буду использовать заполнители для английского и испанского текста (\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}
Основная проблема, связанная с этой идеей, заключается в том, что если секция нулевой высоты длиннее, чем обычная секция, то вам придется иметь дело с задерживающимся перекрывающимся текстом. (Изменить: эта проблема рассматривается в комментарии ниже, обратите внимание, что разрывы строк также будут серьезным недостатком этой идеи.)
Результат (частично): http://i49.tinypic.com/w80u8k.jpg
Я не думаю, что есть пакет, чтобы делать то, что вы хотите, но это можно реализовать самостоятельно, используя \vsplit
, что хорошо задокументировано в Tex by Topic (доступно для бесплатной загрузки или в версии "мертвого дерева" через Lulu). Основная идея
- Вы определяете два vbox, один для английского, один для испанского, и вы хотите извлечь содержимое по одной строке за раз. Называть эти vboxes
\ENbox
а также\ESbox
; - Вам необходимо определить правильный вертикальный размер для использования: это может быть
\lineheight
или вам может потребоваться другое значение, вам придется экспериментировать. Если предположить,\lineheight
правильно... - ... тогда вы можете получить следующую строку английского языка, используя
\setbox\nextline=\vsplit\ENbox to \lineheight
, который вы можете вывести с помощью\unvbox\ENbox
затем аналогично следующая строка из\ESbox
, затем некоторое вертикальное пространство для промежутка между блесками; - Затем вам нужно проверить цикл, который вы можете сделать, запрашивая вертикальные высоты, используя
\ht
из\ENbox
а также\ESbox
, Этот бит будет неудобным.
В общем, это будет несколько сложное кодирование: удачи, и не стесняйтесь задавать вопросы здесь, если вы столкнетесь с трудностями.
Постскриптум Очевидно, что это гораздо больше работы, чем гораздо более простое решение Джеффа, которого я почему-то не видел, когда писал это, но оно должно быть более гибким, если вы хотите возиться с ним.
Если вы хотите чередовать абзацы на испанском и английском языках и располагать их примерно правильно, то вам нужно написать свои переводы слово за словом (или несколько слов на несколько слов) и использовать глянцевый пакет, который может переноситься долго. приговоры. Я сделал это до использования 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
Пакет выравнивает слова первого языка со словами второго "языка", используя пробелы. Чтобы выровнять несколько слов в одном языке с одним словом (или несколькими словами) из другого языка, используйте фигурные скобки для группировки нескольких слов. Хотя строки здесь чересстрочные, это только для удобства редактирования. Вы можете написать действительно длинные строки, если хотите, и алгоритм глянца обернет их правильно.
Я также использовал двухколоночный подход по параграфам с использованием параллельного пакета.
Поместите дополнительный разрыв строки между каждым набором строк:
%
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
%