A imposição do ConTeXt repete cada página

A imposição do ConTeXt repete cada página

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

insira a descrição da imagem aqui

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_shipoutnestas 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\shipoutscratchboxlimpa 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:

insira a descrição da imagem aqui

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

Repetir saída de página em papel

informação relacionada