我正在绞尽脑汁试图解决(双语文档中的)平行文本问题。首先,我在 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.txt
由Kitty Ipsum 网站,结果如下:
答案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 页放在右列,而左列为空。
最终结果的一些图像: