Estou convertendo o folheto semanal da minha igreja para Contexto. O formato é meia página 8,5x11, impressa na frente e no verso.
O que eu preciso é o equivalente ao esquema 2SIDE de imposição do ConTeXt, exceto com as meias páginas repetidas uma vez, para que ...
Printed Page 1 === Half Page 1, Half Page 1
Printed Page 2 === Half Page 2, Half Page 2
Eu sei que provavelmente poderia compilar o primeiro arquivo e depois reorganizar o PDF resultante com imposição, mas isso parece complicado. Prefiro fazer isso em um arquivo de contexto, se possível.
Responder1
Hans me mandou um e-mail. Existe uma interface de alto nível para repetir páginas e é muito mais fácil de usar do que eu pensava. Só fica difícil quando o número desejado de repetições é incomensurável com as dimensões da página.
\setuppapersize[A5][A4,landscape]
\setuplayout[nx=2]
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext
Solução antiga para referência
Não é tão fácil, pois não existe uma interface de alto nível para isso (havia umtópico na lista de discussãoHá muito tempo). Você tem que se aprofundar na rotina de envio para fazer isso funcionar. A primeira coisa que você precisa fazer é duplicar o envio da página. Isso é feito \page_boxes_shipout
nestas duas linhas:
\finalizeshipoutbox\shipoutscratchbox
\page_shipouts_handle{\box\shipoutscratchbox}%
No entanto, isso não é suficiente porque a caixa de envio é liberada após o envio da página. Isso é feito no manipulador de páginas. Se você usar o método de organização, o manipulador será \page_shipouts_arrange
. O problema está nessas linhas
\setbox\scratchbox\hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\box\shipoutscratchbox}%
O comando \box\shipoutscratchbox
limpa a caixa após a composição, então substitua-a por \copy\shipoutscratchbox
.
Aqui está um exemplo completo:
\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
Primeira página de saída:
Responder2
ConTeXt fornece um gancho para a rotina de saída que permite manipular a página finalizada. Você pode usar isso para colocar o conteúdo de cada página duas vezes no papel.
\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