我正在將教會的每週講義轉換為上下文。格式為半張 8.5x11 頁,正面和背面列印。
我需要的是相當於 ConTeXt 拼版 2SIDE 模式,除了半頁重複一次,這樣...
Printed Page 1 === Half Page 1, Half Page 1
Printed Page 2 === Half Page 2, Half Page 2
我知道我可能可以編譯第一個文件,然後透過拼版重新排列生成的 PDF,但這似乎很笨拙。如果可能的話,我寧願在一個上下文文件中完成它。
答案1
漢斯給我發了電子郵件。有一個用於重複頁面的高級介面,它比我想像的更容易使用。只有當您所需的重複次數與頁面尺寸不成比例時,事情才會變得困難。
\setuppapersize[A5][A4,landscape]
\setuplayout[nx=2]
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext
舊解決方案供參考
這並不容易,因為沒有高級介面(有一個郵件清單中的線程很久以前)。您必須深入研究發貨例程才能使這項工作發揮作用。您要做的第一件事是複製頁面發貨。這是\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