跨页工作时,如何使用 \ParallelPar 实现(或模拟)“正常”行为?

跨页工作时,如何使用 \ParallelPar 实现(或模拟)“正常”行为?

parallel包能够设置平行列并将它们在\ParallelPar标记处对齐:

\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}

但是,当您将c(列) 选项更改为p(页) 时,对齐会丢失。我该如何获得所需的行为?

我没有被任何特定的输入格式所束缚,尽管我正在阅读这种格式

解决方案构想

\tikzmark我想到了,但我从未使用过它,我不确定它是否适用。这里的核心问题是,首先开始在每个段落的开头,我们需要记录我们在页面上的垂直位置,并将其保存在某个队列中。假设我们正在排版原始文本(外文)背面(跨页左页)和右页。每个要在背面和正面设置的段落都应保存在一个框中。(我假设我们不会拥有超过n段落:)n很小。;我知道盒子寄存器的数量是有限的。)每个盒子的深度应设置为原文和译文的最大值。然后将此深度排入队列。继续以这种方式在背面设置盒子,直到我们无法将段落放在页面上。此时,根据深度队列放置要放在正面的盒子。(如果我们手动设置盒子的深度,也许这个队列不是必需的,但我不确定这是否会扭曲文本graphicx。)

潜在算法

如果该软件包不支持此功能parallel,我已经想出了一个应该可行的算法 - 我只是不太愿意实现它;我以前从未跨页面工作过。

  1. 阅读要对齐到框中的文本块:\l_original_box\l_translation_box
  2. 将每个箱子的深度设置为它们之间的最大值。
  3. \l_original_box适合此页面吗 ?
    • 是的
      1. 排版\l_original_box
      2. 放入\l_translation_box队列(a seq)。
      1. 开始新的一页。
      2. 将(翻译的)清空队列放到页面上。(假设页面尺寸相同,这应该适合页面,因为深度与原始内容相同。)
  4. 循环直到EOF。(见链接

编辑:当我尝试使用上述算法来解决这个问题时(工作正在进行中),我注意到必须小心处理长行。在verse环境中,长行会缩进。(有没有类似parboxfor 的东西expl3?)

答案1

正如我在评论中所建议的那样,我修改了答案如何创建按段落对齐的 6 个平行文本,每页 3 个文本?。在这里,我将其设为两列而不是六列,并删除了外语支持。我在表格中保留了行,因为我认为更容易看到在哪里删除它们,而不是在哪里添加它们。列宽由长度定义\colwidth,当前设置为0.9\textwidth

我还只是按照您的 MWE 在框中放置了简单的 lipsum,尽管该方法支持列\centeringquote环境。列条目不会在中间断开,但将完全包含在单个页面上。每个条目底部的空白行是 的产物\lipsum,默认情况下,末尾包含一个新段落。

\documentclass[]{article}
\usepackage{ifthen}
\usepackage{calc}
\usepackage{lipsum}

\makeatletter
\newcounter{tabindex}
\newtoks\@tabtoks
\newcommand\addtabtoks[1]{%
  \@tabtoks\expandafter{\the\@tabtoks\stepcounter{tabindex}#1}}
\newcommand*\resettabtoks{\@tabtoks{}}
\newcommand*\synctabindex[1]{\setcounter{tabindex}{\value{#1}}}
\newcommand*\printtabtoks{\the\@tabtoks}
\makeatother

\def\colwidth{.9\textwidth}
\newcounter{sptstartrow}
\newcounter{sptendrow}
\newcounter{entries}
\newcounter{pagerows}
\newlength\CurrentTableHeight
\newlength\CurrentRowHeight
\newsavebox\pagerow

\newcommand\newspecialtable{%
  \setcounter{sptendrow}{0}%
  \setcounter{entries}{0}%
  \setcounter{pagerows}{0}%
  \setlength\CurrentTableHeight{0pt}%
}

\makeatletter
\newcommand\twoby[2]{%
  \stepcounter{entries}%
  \expandafter\def\csname entryX\roman{entries}Xa\endcsname{#1}%
  \expandafter\def\csname entryX\roman{entries}Xf\endcsname{#2}%
  \synctabindex{entries}%
  \sbox{\pagerow}{\formatcol{a}\formatcol{f}}%
  \setlength\CurrentRowHeight{\ht\pagerow+\dp\pagerow}%
  \addtolength\CurrentTableHeight{\CurrentRowHeight}%
  \ifdim\CurrentTableHeight>\textheight %
    \makespecialtable[\thepagerows]%
    \setcounter{pagerows}{0}%
    \setlength\CurrentTableHeight{\CurrentRowHeight}%
    \else\fi%
  \stepcounter{pagerows}%
}
\makeatother
\newcounter{index}
\newcommand\makespecialtable[1][\theentries]{%
  \setcounter{sptstartrow}{\thesptendrow}%
  \addtocounter{sptendrow}{#1}%
  \ifthenelse{\thesptendrow > \theentries}{\setcounter{sptendrow}{\theentries}}{}%
  \clearpage
  \setcounter{index}{\thesptstartrow}%
  \synctabindex{index}
  \resettabtoks%
  \whiledo{\theindex < \thesptendrow}{%
    \stepcounter{index}%
    \addtabtoks{%
      \csname entryX\roman{tabindex}Xa\endcsname &
      \vphantom{\formatcol{f}}
      \\%
      \hline%
    }%
  }%
  \begin{tabular}{|p{\colwidth}|@{\extracolsep{-\tabcolsep}}l}%
   \hline%
   \printtabtoks%
  \end{tabular}%
  \clearpage
  \setcounter{index}{\thesptstartrow}%
  \synctabindex{index}
  \resettabtoks%
  \whiledo{\theindex < \thesptendrow}{%
    \stepcounter{index}%
    \addtabtoks{%
      \csname entryX\roman{tabindex}Xf\endcsname &
      \vphantom{\formatcol{a}}
      \\%
      \hline%
    }%
  }%
  \begin{tabular}{|p{\colwidth}|@{\extracolsep{-\tabcolsep}}l}%
   \hline%
   \printtabtoks%
  \end{tabular}%
}

\newcommand\formatcol[1]{%
   \parbox[t]{\colwidth}{\csname entryX\roman{tabindex}X#1\endcsname\strut}%
}

\newcommand\finishspecialtable{\makespecialtable}

\begin{document}
\centering
\newspecialtable
\twoby
  {\lipsum[1]}%
  {\lipsum[3]}%
\twoby
  {\lipsum[2]}%
  {\lipsum[4]}
\twoby
  {\lipsum[5]}%
  {\lipsum[7]}
\twoby
  {\lipsum[1-2]}%
  {\lipsum[3]}%
\twoby
  {\lipsum[2]}%
  {\lipsum[5]}

\finishspecialtable
\end{document}

在此处输入图片描述

在此处输入图片描述

相关内容