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

漢斯給我發了電子郵件。有一個用於重複頁面的高級介面,它比我想像的更容易使用。只有當您所需的重複次數與頁面尺寸不成比例時,事情才會變得困難。

\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

在紙張上重複輸出頁面

相關內容