Difference between revisions of "KOMA-scrartcl Type Area"
Jump to navigation
Jump to search
m (Slight formatting and clarification.) |
(Clarified and commented the sample code.) |
||
Line 17: | Line 17: | ||
<texcode> | <texcode> | ||
− | \def\ | + | % Set binding correction value (mode=BCOR turns it on). |
− | \newdimen\PageWidth | + | \doifmodeelse{BCOR}{\def\bindingcorr{3mm}}{\def\bindingcorr{0pt}} |
− | + | ||
+ | % Set visible page width. | ||
+ | \newdimen\PageWidth | ||
+ | \PageWidth=\dimexpr(\paperwidth-\bindingcorr) | ||
+ | |||
+ | % Determine the paper aspect ratio. | ||
\edef\Ratio{\withoutpt{\the\dimexpr(2\paperheight/(\PageWidth/32768))}} | \edef\Ratio{\withoutpt{\the\dimexpr(2\paperheight/(\PageWidth/32768))}} | ||
+ | |||
+ | % Set the textarea width to 2.6 alphabets. | ||
\setbox\scratchbox\hbox{\dorecurse{26}{\character\recurselevel}} | \setbox\scratchbox\hbox{\dorecurse{26}{\character\recurselevel}} | ||
− | \newdimen\Width | + | \newdimen\Width \Width=\dimexpr(2.6\wd\scratchbox) |
− | \Width=\dimexpr(2.6\wd\scratchbox) \Height=\dimexpr(\Ratio\Width) | + | |
− | \doifmodeelse{oneside}{\Back=\dimexpr((\PageWidth - \Width) / 2)} | + | % Set the textarea height proportional to the width. |
− | {\Back=\dimexpr((\PageWidth - \Width) / 3) | + | \newdimen\Height \Height=\dimexpr(\Ratio\Width) |
− | + | ||
+ | % Set the margin/gutter widths to be equal on a full spread. | ||
+ | \newdimen\Back | ||
+ | \doifmodeelse{oneside} | ||
+ | {\Back=\dimexpr(((\PageWidth - \Width) / 2) + \bindingcorr)} | ||
+ | {\Back=\dimexpr(((\PageWidth - \Width) / 3) + \bindingcorr)} | ||
+ | |||
+ | % Set the top and bottom margins in a 1:2 ratio, ignoring headers. | ||
\edef\Top{\the\dimexpr((\paperheight - \Height) / 3 - 3\lineheight)} | \edef\Top{\the\dimexpr((\paperheight - \Height) / 3 - 3\lineheight)} | ||
+ | |||
+ | % Redefine \Height to include header and footer space. | ||
\Height=\dimexpr(\Height + 8\lineheight) | \Height=\dimexpr(\Height + 8\lineheight) | ||
− | \setuplayout[backspace=\the\Back,height=\the\Height,width=\the\Width, | + | |
− | header=2\lineheight,headerdistance=\lineheight, | + | % Set up the page layout using the calculated parameters. |
− | footer=2\lineheight,footerdistance=3\lineheight,topspace=\Top] | + | \setuplayout[ |
+ | backspace=\the\Back, | ||
+ | height=\the\Height, | ||
+ | width=\the\Width, | ||
+ | header=2\lineheight, | ||
+ | headerdistance=\lineheight, | ||
+ | footer=2\lineheight, | ||
+ | footerdistance=3\lineheight, | ||
+ | topspace=\Top] | ||
\starttext | \starttext | ||
Line 37: | Line 61: | ||
\stoptext | \stoptext | ||
</texcode> | </texcode> | ||
+ | |||
+ | This can be processed with a <code>-mode=BCOR</code> option on <code>texexec</code> to activate the binding correction, or with a <code>-mode=oneside</code> option to activate the single-sided page layout rather than the (default) double-sided version. |
Revision as of 04:15, 5 September 2005
LaTeX
The scrartcl class from the KOMA package does some fairly sophisticated calculations to determine an optimal page layout, with the text width set in terms of average characters-per-line, and the text height and location set to provide pleasing proportions based on that and the paper proportions. A sample document (with a framebox to show the text area) is simply:
\documentclass[DIVcalc,twoside]{scrartcl} \begin{document} \noindent\framebox{\rule{0pt}{\textheight}\rule{\textwidth}{0pt}} \end{document}
ConTeXt
The following code duplicates the scrartcl calculations to set the text area and produces a similar sample document, again with a framed box to show the text area.
% Set binding correction value (mode=BCOR turns it on). \doifmodeelse{BCOR}{\def\bindingcorr{3mm}}{\def\bindingcorr{0pt}} % Set visible page width. \newdimen\PageWidth \PageWidth=\dimexpr(\paperwidth-\bindingcorr) % Determine the paper aspect ratio. \edef\Ratio{\withoutpt{\the\dimexpr(2\paperheight/(\PageWidth/32768))}} % Set the textarea width to 2.6 alphabets. \setbox\scratchbox\hbox{\dorecurse{26}{\character\recurselevel}} \newdimen\Width \Width=\dimexpr(2.6\wd\scratchbox) % Set the textarea height proportional to the width. \newdimen\Height \Height=\dimexpr(\Ratio\Width) % Set the margin/gutter widths to be equal on a full spread. \newdimen\Back \doifmodeelse{oneside} {\Back=\dimexpr(((\PageWidth - \Width) / 2) + \bindingcorr)} {\Back=\dimexpr(((\PageWidth - \Width) / 3) + \bindingcorr)} % Set the top and bottom margins in a 1:2 ratio, ignoring headers. \edef\Top{\the\dimexpr((\paperheight - \Height) / 3 - 3\lineheight)} % Redefine \Height to include header and footer space. \Height=\dimexpr(\Height + 8\lineheight) % 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] \starttext \framed[width=\textwidth,height=\textheight]{} \stoptext
This can be processed with a -mode=BCOR
option on texexec
to activate the binding correction, or with a -mode=oneside
option to activate the single-sided page layout rather than the (default) double-sided version.