The parallel package is able to set parallel columns and align them at \ParallelPar tokens:
\documentclass{article}
\usepackage{parallel}
\usepackage{mwe}
\begin{document}
\begin{Parallel}[c]{.45\textwidth}{.45\textwidth}
\ParallelLText{\lipsum[1]}
\ParallelRText{\lipsum[3]}
\ParallelPar
\ParallelLText{\lipsum[2]}
\ParallelRText{\lipsum[4]}
\ParallelPar
\ParallelLText{\lipsum[5]}
\ParallelRText{\lipsum[7]}
\end{Parallel}
\end{document}
When you change the c (column) option to p (page) however, the alignment is lost. How can I get the behavior I need?
I am not tied to any particular input format, although I am reading in the translations in this format.
Solution Idea
\tikzmark comes to mind, but I've never used it and I'm not sure it's applicable. The core problem here is that, at the start of every paragraph, we need to record the vertical position we are at on the page and save it in some queue. Say we are typesetting the original text (foreign) on the verso (left hand page of the spread) and the translation on the recto. Every paragraph to be set on the verso and recto should be saved in a box. (I'm assuming that we won't have more than n paragraphs :). n is small.; I know there are a limited number of box registers.) The depth of each box should be set to the maximum of the original and the translation. This depth is then enqueued. Boxes continue to be set on the verso in this way until we can't fit the paragraph on the page. At this point, the boxes destined for recto are placed according the queue of depths. (Perhaps this queue isn't necessary if we set the depths of the boxes manually, but I'm not sure if this would distort the text a la graphicx.)
Potential Algorithm
If this isn't supported by the parallel package, I've come up with an algorithm that should work—I am just uncomfortable implementing it; I've never worked across pages before.
- Read text blocks to be aligned into boxes:
\l_original_boxand\l_translation_box. - Set the depth of each box to the maximum between them.
- Does
\l_original_boxfit on this page?- Yes
- Typeset
\l_original_box. - Place
\l_translation_boxinto a queue (aseq).
- Typeset
- No
- Start a new page.
- Empty queue (of translations) onto the page. (Assuming identical page dimensions, this should fit on the page since the depths are identical to the originals.)
- Yes
- Loop until
EOF. (See linked.)
EDIT: As I'm going through with trying to solve this using the above algorithm (Work In-Progress), I've noticed that care has to be taken for long lines. In the verse environment, long lines are indented. (Is there anything like a parbox for expl3?)


cvs.pare supposed to mean? Is your output supposed to remain on one page? I am not familiar with this package. – Steven B. Segletes Apr 22 '14 at 15:07parallelis meant for parallel texts (e.g. translations) set side-by-side. Thecoption sets them in columns on the same page, whereas thepoption sets them on separate pages. Unfortunately,\ParallelParseems to just be\newpagewhen thepoption is in effect. The output is to appear to operate on the entire spread. – Sean Allred Apr 22 '14 at 15:10