%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