Estoy convirtiendo el folleto semanal de mi iglesia a Contexto. El formato es media página de 8,5x11, impresa por anverso y reverso.
Lo que necesito es el equivalente al esquema de imposición 2SIDE de ConTeXt, excepto que las medias páginas se repiten una vez, de modo que...
Printed Page 1 === Half Page 1, Half Page 1
Printed Page 2 === Half Page 2, Half Page 2
Sé que probablemente podría compilar el primer archivo y luego reorganizar el PDF resultante con imposición, pero eso parece difícil de manejar. Preferiría hacerlo en un archivo de contexto si es posible.
Respuesta1
Hans me envió un correo electrónico. Hay una interfaz de alto nivel para repetir páginas y es mucho más fácil de usar de lo que pensaba. Se vuelve difícil sólo cuando el número deseado de repeticiones no guarda proporción con las dimensiones de la página.
\setuppapersize[A5][A4,landscape]
\setuplayout[nx=2]
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext
Antigua solución como referencia.
No es tan fácil, ya que no existe una interfaz de alto nivel para esto (había unahilo en la lista de correohace mucho tiempo). Tienes que profundizar en la rutina de envío para que esto funcione. Lo primero que tienes que hacer es duplicar el envío de la página. Esto se hace en \page_boxes_shipout
estas dos líneas:
\finalizeshipoutbox\shipoutscratchbox
\page_shipouts_handle{\box\shipoutscratchbox}%
Sin embargo, esto no es suficiente porque la casilla de envío se borra después de enviar la página. Esto se hace en el controlador de páginas. Si utiliza el método de organización, el controlador es \page_shipouts_arrange
. El problema está en estas líneas.
\setbox\scratchbox\hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\box\shipoutscratchbox}%
El comando \box\shipoutscratchbox
borra la casilla después de la composición tipográfica, así que reemplácela con \copy\shipoutscratchbox
.
Aquí hay un ejemplo 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
Primera página de salida:
Respuesta2
ConTeXt proporciona un enlace para la rutina de salida que le permite manipular la página terminada. Puede utilizar esto para colocar el contenido de cada página dos veces en su documento.
\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