1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
%D \module
%D [ file=t-typearea,
%D version=2008.04.05,
%D title=\CONTEXT\ User Module,
%D subtitle=Something like KOMA-TypeArea,
%D author=Peter Münster,
%D date=\currentdate,
%D copyright={Peter Münster}]
%C This module is copyrighted by Peter Münster.
%C Please send any comments to pmrb at free.fr.
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
% This program is distributed in the hope that it will be useful,
% but without any warranty; without even the implied warranty of
% merchantability or fitness for a particular purpose. See the
% GNU General Public License for more details.
\writestatus{loading}{Something like KOMA-TypeArea}
\unprotect
%D \macros{setupTypeArea}
%D Setting up some values.
%D
%D Default setup:
%D
%D \starttyping
%D \setupTypeArea[bcor=0pt,oneside=no,alphabets=2.6]
%D \stoptyping
%D
%D Example:
%D
%D \starttyping
%D \setupTypeArea[bcor=3mm,oneside=yes,alphabets=3.1]
%D \stoptyping
\def\setupTypeArea[#1]{\getparameters[TA@][#1]\doTypeArea}
%D Some internal dimensions:
\newdimen\PageWidth \newdimen\Back
\doifundefined{Width}{\newdimen\Width}
\doifundefined{Height}{\newdimen\Height}
%D This internal macro does the whole work:
\def\doTypeArea{
%D Set visible page width:
\PageWidth=\dimexpr\paperwidth-\TA@bcor\relax
%D Determine the paper aspect ratio:
\edef\Ratio{\withoutpt{\the\dimexpr2\paperheight/(\PageWidth/32768)\relax}}
%D Set the textarea width to X alphabets:
\setbox\scratchbox\hbox{\dorecurse{26}{\character\recurselevel}}
\Width=\dimexpr\TA@alphabets\wd\scratchbox\relax
\ifdim\Width<\PageWidth\else
\writestatus{error}{line wider than page}\end\fi
%D Set the textarea height proportional to the width:
\Height=\dimexpr(\Ratio\Width)
%D Set the margin/gutter widths to be equal on a full spread:
\doifelse\TA@oneside{yes}
{\Back=\dimexpr(\PageWidth - \Width) / 2 + \TA@bcor\relax}
{\Back=\dimexpr(\PageWidth - \Width) / 3 + \TA@bcor\relax}
%D Set the top and bottom margins in a 1:2 ratio, ignoring headers:
\edef\Top{\the\dimexpr(\paperheight - \Height) / 3 - 3\lineheight\relax}
%D Redefine \type{\Height} to include header and footer space:
\Height=\dimexpr(\Height + 8\lineheight)
%D Set up the page layout using the calculated parameters:
\setuplayout[
backspace=\the\Back,
height=\the\Height,
width=\the\Width,
header=2\lineheight,
headerdistance=\lineheight,
footer=2\lineheight,
footerdistance=3\lineheight,
topspace=\Top]
}
\protect
\setupTypeArea[bcor=0pt,oneside=no,alphabets=2.6]
\doifnotmode{demo}{\endinput}
%D Usage example:
\usemodule[typearea]
\setupTypeArea[bcor=0mm,alphabets=3.1]
\setuppagenumbering[alternative=doublesided]
\starttext
\dorecurse4{\framed[width=\textwidth,height=\textheight]{test}\page}
\stoptext
|