将两段文本并排放置

将两段文本并排放置

我目前正在翻译一本书并排版译文。

出于审阅目的,我发现将原文和译文并排显示非常有用,而不必复制我为排版翻译准备的文本。我的翻译存储在一个chapters/目录中,每章一个文件,以一个\chapter命令开头,每个命令包含几个\section*命令。

我的想法是建立一个chapters_orig/包含原始语言章节的目录,然后自动生成一个包含两种语言并列逐段的文档。我读过有关该parallel软件包的信息,但我不知道如何使用它来自动生成此文档而不更改我当前的文档。

笔记:

虽然我已经用 bash 脚本回答了我的问题,但我仍然对基于 TeX 的解决方案感兴趣,并且我很乐意将其作为一个软件包。

答案1

我认为parallel这是最好的方法,但按照我想要的方式在纯 TeX 中执行有点棘手。经过深思熟虑,我最终编写了一个 bash 脚本来实现它。这不是最优雅的解决方案(如果这让你感觉更好,你可以称它为丑陋),但它确实有用。

这是我的脚本:

#!/bin/bash


CHAPDIR="chapters"
SPLITDIR="splits"

# Split all files
for l in fr en; do
   mkdir -p $SPLITDIR/$l
   for c in $CHAPDIR/$l/*.tex; do
      f=$(basename $c)
      num=${f%%_*}
      csplit --quiet --prefix $SPLITDIR/$l/${num}_                         --suffix-format=%02d.tex                          --elide-empty-files                  $c /^$/+1 {*}
   done
done


# Generate document
for c in $CHAPDIR/fr/*.tex; do
   f=$(basename $c)
   chnum=${f%%_*}
   sfile="$SPLITDIR/${chnum}.tex"

   # Make chapter title
   #echo "\input{$SPLITDIR/en/${chnum}_00}" > $sfile
   #sed -i 's@\\chapter@\\chapstyle\\chapheadstyle@' $SPLITDIR/fr/${chnum}_00.tex
   #echo "\input{$SPLITDIR/fr/${chnum}_00}" >> $sfile
   enchap=$(sed -e 's@\\chapter{\(.*\)}@\1@' $SPLITDIR/en/${chnum}_00.tex)
   frchap=$(sed -e 's@\\chapter{\(.*\)}@\1@' $SPLITDIR/fr/${chnum}_00.tex)
   echo "\\chapter{$enchap \\\\$frchap}" > $sfile


   echo '\normalfont' >> $sfile

   echo '\begin{Parallel}{2in}{2in}' >> $sfile
   for pfr in $SPLITDIR/fr/${chnum}_*.tex; do
        secname=$(basename $pfr .tex)
        secnum=${secname##*_}
        [[ "x$secnum" = "x00" ]] && continue

        pen=${pfr/fr/en}

        # Replace chapter with \Huge, section with \Large
        sed -i 's@\\section\*@\\secstyle@' $pfr

        # Remove lettrines
        sed -i 's@\\chlettrine{\(.*\)}{\(.*\)}@\1\2@' $pfr

        if [ ! -f "$pen" ]; then
           echo "E: Missing file $pen"
           exit 1
        fi

        echo '\ParallelPar' >> $sfile
        echo "\ParallelLText{\selectlanguage{english}\input{$pen}}" >> $sfile
        echo "\ParallelRText{\selectlanguage{french}\input{$pfr}}" >> $sfile
   done
   echo '\end{Parallel}' >> $sfile
done

我已将翻译的文本移至chapters/fr/并在 中添加了原始章节chapters/en/。脚本创建splits/fr/splits/en/目录(注意,splits/有一个“s”,因为我的 Makefile 中有一个名为“split”的规则),chapters/*按段落拆分 中的章节(使用),并使用包csplit重新组合 中的章节。splits/parallel

然后,主文档包含加载包的调用parallel以及以下\input调用:

% All chapters
\pagewiselinenumbers
\input{splits/01}
\input{splits/02}
\input{splits/03}
\input{splits/04}

运行./split.sh然后pdflatex masterdoc.tex生成带有分割章节的文档。

它的渲染效果如下:

带行号的拆分视图

相关内容