我目前正在翻译一本书并排版译文。
出于审阅目的,我发现将原文和译文并排显示非常有用,而不必复制我为排版翻译准备的文本。我的翻译存储在一个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
生成带有分割章节的文档。
它的渲染效果如下: