私は教会の毎週の配布物を Context に変換しています。フォーマットは 8.5x11 ページの半分で、表と裏に印刷されています。
必要なのは、ConTeXt 面付け 2SIDE スキーマと同等のものですが、半ページが 1 回繰り返されるため、次のようになります...
Printed Page 1 === Half Page 1, Half Page 1
Printed Page 2 === Half Page 2, Half Page 2
最初のファイルをコンパイルしてから、結果の PDF を面付けして再配置することはできると思いますが、扱いにくいようです。可能であれば、1 つのコンテキスト ファイルで実行したいです。
答え1
Hans からメールが届きました。ページを繰り返すための高水準のインターフェースがあり、思ったよりずっと簡単に使えます。繰り返し回数がページのサイズに見合わない場合にのみ難しくなります。
\setuppapersize[A5][A4,landscape]
\setuplayout[nx=2]
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext
参考用の古いソリューション
これはそれほど簡単ではありません。高レベルのインターフェースが存在しないからです(メーリングリストのスレッドかなり前のことですが、これを機能させるには、shipout ルーチンを詳しく調べる必要があります。まず最初に、ページ shipout を複製する必要があります。これは、\page_boxes_shipout
次の 2 行で実行されます。
\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 は、完成したページを操作できる出力ルーチンのフックを提供します。これを使用して、各ページの内容を紙に 2 回配置できます。
\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