我正在将我教堂的每周讲义转换为 Context。格式为半张 8.5x11 页,正面和背面均打印。
我需要的是与 ConTeXt 拼版 2SIDE 模式相当的模式,只是半页重复一次,这样......
Printed Page 1 === Half Page 1, Half Page 1
Printed Page 2 === Half Page 2, Half Page 2
我知道我可能可以编译第一个文件,然后使用拼版重新排列生成的 PDF,但这似乎不太方便。如果可能的话,我更愿意在一个 Context 文件中完成此操作。
答案1
Hans 给我发了一封电子邮件。有一个用于重复页面的高级界面,使用起来比我想象的要容易得多。只有当你想要的重复次数与页面尺寸不相称时,它才会变得困难。
\setuppapersize[A5][A4,landscape]
\setuplayout[nx=2]
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext
旧解决方案供参考
这并不容易,因为没有高级接口来实现这一点(有一个邮件列表中的帖子很久以前)。您必须深入研究 shipout 例程才能使其工作。您要做的第一件事是复制页面 shipout。这在\page_boxes_shipout
以下两行中完成:
\finalizeshipoutbox\shipoutscratchbox
\page_shipouts_handle{\box\shipoutscratchbox}%
但是,这还不够,因为在发送页面后,发货框会被清除。这是在页面处理程序中完成的。如果您使用排列方法,则处理程序是\page_shipouts_arrange
。问题出在这些行中
\setbox\scratchbox\hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\box\shipoutscratchbox}%
该命令\box\shipoutscratchbox
排版后会清除方框,因此用 替换它\copy\shipoutscratchbox
。
以下是完整示例:
\setuppapersize[A5][A4,landscape]
\setuparranging[2SIDE]
\unprotect
%
% from page_imp.mkiv
%
\def\page_boxes_shipout#1% or: \page_shipouts_apply
{\dontcomplain % redundant
\ifcase\c_page_boxes_flush_n\else
\page_boxes_flush_before
\fi
\the\everybeforeshipout
\ifcase\shipoutfinalizemethod
\page_shipouts_handle{#1}%
\else
\setbox\shipoutscratchbox\hpack{#1}% just in case there are objects there, hook for testing (will go away)
\finalizeshipoutbox\shipoutscratchbox
\page_shipouts_handle{\box\shipoutscratchbox}%
% Duplicate the shipout
\finalizeshipoutbox\shipoutscratchbox
\page_shipouts_handle{\box\shipoutscratchbox}%
\fi
\setnextrealpageno % so this comes before \everyaftershipout so in fact:
\the\everyaftershipout % at this point we're already on the next realpage
\ifcase\c_page_boxes_flush_n\else
\page_boxes_flush_after
\fi}
\def\page_shipouts_arrange#1%
{% \global\advance\shippedoutpages\plusone
\begingroup
\setbox\scratchbox\hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\copy\shipoutscratchbox}% \copy instead of \box
\pusharrangedpage\scratchbox
\deadcycles\zerocount
\endgroup}
\protect
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext
输出的第一页:
答案2
ConTeXt 为输出例程提供了一个钩子,让您可以操纵完成的页面。您可以使用它将每页的内容两次放在您的纸上。
\installshipoutmethod{REPEAT}
{\dowithnextbox
{\setbox\scratchbox\hpack to \paperwidth{\box\nextbox\hss}%
\setbox\scratchbox\hpack {\copy\scratchbox\box\scratchbox}%
\invokepagehandler{normal}{\box\scratchbox}}
\hpack}
\setuppapersize[A5][A4,landscape]
\setuppaper[method=REPEAT]
\starttext
\chapter{Knuth}
\input knuth
\chapter{Zapf}
\input zapf
\stoptext