ConTeXt 임포지션은 각 페이지마다 반복됩니다.

ConTeXt 임포지션은 각 페이지마다 반복됩니다.

나는 우리 교회의 주간 유인물을 Context로 변환하고 있습니다. 형식은 8.5x11 페이지의 절반으로 앞면과 뒷면에 인쇄되어 있습니다.

내가 필요한 것은 절반 페이지가 한 번 반복된다는 점을 제외하면 ConTeXt 임포지션 2SIDE 스키마와 동일합니다.

Printed Page 1 === Half Page 1, Half Page 1
Printed Page 2 === Half Page 2, Half Page 2

첫 번째 파일을 컴파일한 다음 임포지션을 사용하여 결과 PDF를 다시 정렬할 수 있다는 것을 알고 있지만 이는 다루기 힘든 것 같습니다. 가능하다면 하나의 컨텍스트 파일에서 수행하는 것이 좋습니다.

답변1

Hans가 나에게 이메일을 보냈습니다. 페이지 반복을 위한 고급 인터페이스가 있고 생각보다 사용하기가 훨씬 쉽습니다. 원하는 반복 횟수가 페이지 크기와 맞지 않는 경우에만 어려워집니다.

\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

종이에 페이지 출력 반복

관련 정보