乳胶包装 ( parallelfiles.sty)

乳胶包装 ( parallelfiles.sty)

我正在绞尽脑汁试图解决(双语文档中的)平行文本问题。首先,我在 stackexchange 上看到了很多关于这个问题的例子,但都不是我想要的解决方案。

在我的文档中,我为每一章提供了单独的 tex 文件。因此,我有一组针对一种语言的文件,然后有另一组针对翻译的文件。出于各种原因,我希望保持这种方式,而不是编写一个大文件,每二十行左右包含大量 \ParallelPars 来保持段落连贯。不同语言的章节长度存在显著差异,大约每页左右有三行的差异,因此到结尾时会累加(我可以在每章中多添加一到两页针对一种语言的文件)。

有没有办法同步通过输入文件提供的文档的章节和段落?还有什么其他方法可以做到这一点?也许是另一种并行段落包?我正在考虑的一件事是调整文本宽度,以便较长的语言具有更宽的列(使段落长度更接近),但我认为这看起来不太好看。

您还会看到我正在使用 pdfcolparallel,它有助于使用文档中的颜色,并将其转换为 PDF。

示例代码:

\documentclass[10pt]{article}

\usepackage{yfonts,color,lettrine,pdfcolparallel}
\usepackage[top=.5in, bottom=1in, left=1in, right=1in]{geometry}

\begin{document}

\begin{Parallel}{.47\textwidth}{.47\textwidth}
\ParallelLText{\input{cv/doc1.tex}}
\ParallelRText{\input{dr/doc1.tex}}
\ParallelPar
\newpage
\ParallelLText{\input{cv/doc2.tex}}
\ParallelRText{\input{dr/doc2.tex}}
\ParallelPar
\newpage
\ParallelLText{\input{cv/doc3.tex}}
\ParallelRText{\input{dr/doc3.tex}}
\ParallelPar
\newpage
\ParallelLText{\input{cv/doc4.tex}}
\ParallelRText{\input{dr/doc4.tex}}
\ParallelPar
\newpage
\ParallelLText{\input{cv/doc5.tex}}
\ParallelRText{\input{dr/doc5.tex}}
\ParallelPar
\newpage
\end{Parallel}
\end{document}

答案1

\ParallelLText{}让我检查一下我是否理解了这个问题。您想要拥有两个包含由空行分隔的段落的单独文件,就像在标准乳胶中一样,并且您希望这些文件像您在它们周围书写或书写一样进行段落同步\ParallelRText{}

如果是这样,我想到唯一的解决方案就是使用 Luatex 读取这些文件,将它们按段落拆分,然后插入适当的命令。

这是我的实现:

Lua 代码(parallelfiles.lua):

local function paragraphs(str)
    local t = {}
    local function helper(line) table.insert(t, line) return "" end
        helper((str:gsub("(.-)\n\n+", helper)))
    return t
end

function parallel_files(f1, f2)
    local left = io.open(f1, "r"):read("*a"):gsub("\r","");
    local left_pars = paragraphs(left);
    local right = io.open(f2,"r"):read("*a"):gsub("\r","");
    local right_pars = paragraphs(right);
    if (#left_pars ~= #right_pars) then
        tex.print("\\PackageWarning{parallelfiles}{Warning, the files do not have the same number of paragraphs}");
    end
    local i
    local max_lines = #left_pars
    if (#right_pars>max_lines) then
        max_lines = #right_pars
    end
    for i=1,max_lines do
        if i<#left_pars then
            tex.print("\\ParallelLText{");
            tex.print(left_pars[i]);
            tex.print("}")
        end;
        if i<#right_pars then
            tex.print("\\ParallelRText{");
            tex.print(right_pars[i]);
            tex.print("}");
        end
        tex.print("\\ParallelPar");
    end
end

乳胶包装 ( parallelfiles.sty)

这只是 lua 函数的一个包装:

\directlua{
    dofile("parallelfiles.lua")
}

\newcommand{\parallelfiles}[2]{
    \directlua{ parallel_files("#1", "#2") }
}

使用示例:

\documentclass[10pt]{article}
\usepackage{yfonts,color,lettrine,pdfcolparallel}
\usepackage[top=.5in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage{parallelfiles}

\begin{document}    
\begin{Parallel}{.47\textwidth}{.47\textwidth}
\parallelfiles{lipsum.txt}{catsum.txt}
\end{Parallel}
\end{document}

假设lipsum.txt包含由利普森网包含catsum.txtKitty Ipsum 网站,结果如下:

第1-2页 第2-3页 第3-4页

答案2

这是我第一次测试的结果。这是一个拙劣的解决方案,可能包含几个陷阱,我希望其他人能帮助解决。

正如我在评论中所解释的那样,它包括构建两个不同的单列文档,稍后将与pdfpages帮助合并。

第一个文件是:

%----184768b.tex-------%
\documentclass{article}
\usepackage[paperwidth=11cm,paperheight=29.7cm,nohead,nofoot]{geometry}
\pagestyle{empty}
\usepackage{kantlipsum}

\begin{document}
\thispagestyle{empty}
\kant
\end{document}

第二个

%------184768c.tex --------%
\documentclass{article}
\usepackage[paperwidth=11cm,paperheight=29.7cm,nohead,nofoot]{geometry}
\pagestyle{empty}
\usepackage{lipsum}

\begin{document}
\thispagestyle{empty}
\lipsum[1-30]
\end{document}

我使用了半a4paper尺寸。结果如下

在此处输入图片描述

第一个文档(kantlipsum)有 4 页,而第二个文档(lipsum)有 8 页。可以将它们合并到最终文档中

\documentclass[a4paper]{article}

\usepackage{pdfpages}
\usepackage{pgffor}

\begin{document}

\foreach \i in {1,2,...,4}{
\includepdfmerge[nup=2x1]{104768b, \i, 104768c, \i}}

\foreach \i in {5,6,...,8}{
\includepdf[nup=2x1, pages={{},\i}]{104768c}}

\end{document}

我们需要foreach(或任何其他循环实用程序)因为

\includepdfmerge[nup=2x1]{104768b, {1-4}, 104768c, {1-4}}

将第一个文件中的 4 页与第二个文件中的 4 页合并,并且

\foreach \i in {1,2,...,4}{
\includepdfmerge[nup=2x1]{104768b, \i, 104768c, \i}}

会在每个最终页面中放置一个。虽然

\foreach \i in {5,6,...,8}{
\includepdf[nup=2x1, pages={{},\i}]{104768c}}

将会把第二个文件的最后 4 页放在右列,而左列为空。

最终结果的一些图像:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

相关内容