summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/canoniclayout/canoniclayout.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/canoniclayout/canoniclayout.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/canoniclayout/canoniclayout.dtx')
-rw-r--r--macros/latex/contrib/canoniclayout/canoniclayout.dtx546
1 files changed, 546 insertions, 0 deletions
diff --git a/macros/latex/contrib/canoniclayout/canoniclayout.dtx b/macros/latex/contrib/canoniclayout/canoniclayout.dtx
new file mode 100644
index 0000000000..0855bd860e
--- /dev/null
+++ b/macros/latex/contrib/canoniclayout/canoniclayout.dtx
@@ -0,0 +1,546 @@
+% \iffalse
+%<*internal>
+\begingroup
+\input docstrip.tex
+\keepsilent
+\preamble
+ ______________________________________________________
+ The canoniclayout package for LaTeX
+ Copyright (C) 2010-2011 Claudio Beccari
+ All rights reserved
+
+ License information appended
+
+\endpreamble
+\postamble
+Copyright 2011 Claudio Beccari
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is "author-maintained"
+
+This work consists of this file canoniclayout.dtx, a README file
+and the derived files canoniclayout.sty and canoniclayout.pdf.
+
+\endpostamble
+\askforoverwritefalse
+%
+\generate{\file{canoniclayout.sty}{\from{canoniclayout.dtx}{package}}}
+%
+\def\tmpa{plain}
+\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
+\endgroup
+%</internal>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{canoniclayout.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[2009/01/01]
+%<package>\ProvidesPackage{canoniclayout}%
+%<*package>
+ [2011/11/05 v.0.3 Canonic layout circumscribed to a circle]
+%</package>
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\paperwidth=210mm\paperheight=297mm
+\pdfpagewidth=\paperwidth \pdfpageheight=\paperheight
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{textcomp}
+\usepackage{multicol}
+\usepackage{amsmath,array,booktabs}
+\usepackage{pict2e}[2009/06/01]%
+\usepackage{color}
+\usepackage{canoniclayout}
+\hfuzz 10pt
+
+\newcommand*\class[1]{\textsf{#1}}
+\newcommand*\pack[1]{\textsf{#1}}
+\newcommand*\prog[1]{\textsl{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\definecolor{grigio}{gray}{.75}
+
+\makeatletter
+\def\cblayoutdestro{\dimen256=\dimexpr\headheight+\topmargin+1in-\paperheight\relax
+\dimen258=\dimexpr\oddsidemargin+1in\relax
+\dimen262=1mm\relax
+\dimen260=\dimexpr \paperwidth*\p@/\dimen262\relax
+\dimen264=\dimexpr \paperheight-\topmargin-\headheight-1in-\headsep-\textheight\relax
+\begin{picture}(0,0)(\strip@pt\dimen258,-\strip@pt\dimen256)
+\put(0,0){\unitlength=\p@
+\put(0,0){\framebox(\strip@pt\paperwidth,\strip@pt\paperheight){}}
+\color{red}
+\put(\strip@pt\dimen258,\strip@pt\dimen264){\makebox(0,0)[bl]{\color{grigio}\rule{\textwidth}{\textheight}}}
+ \Line(0,\strip@pt\paperheight)(\strip@pt\paperwidth,0)
+ \put(\strip@pt\dimexpr\paperwidth/2\relax,\strip@pt\dimexpr\dimen264+\textheight/2\relax){\circle{\strip@pt\paperwidth}}
+}
+\end{picture}}
+\def\ps@title{\ps@plain
+\def\@oddhead{\cblayoutdestro}
+\let\@evenhead\@oddhead}
+\allowdisplaybreaks
+\begin{document}
+\GetFileInfo{canoniclayout.dtx}
+\title{Package \pack{canoniclayout}\thanks{Version number \fileversion; last
+ revision \filedate.}}
+\author{Claudio Beccari\thanks{e-mail: \texttt{claudio dot beccari at gmail dot com}}}
+ \maketitle\thispagestyle{title}
+ \DocInput{canoniclayout.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{211}
+% \begin{abstract}
+% This package is a small extension that allows to determine the page
+% parameters for a canonical layout where the text block is placed onto the page in such a
+% way as: $(a)$ its diagonal coincides with the page relevant diagonal, and $(b)$ the
+% circle inscribed within the text block is also tangent to the page sides. The text
+% block width to height ratio is kept equal to the page ratio, as well as the inner to
+% outer and the upper to lower margin ratios.
+%
+% The canonical layout determined by this package is laid down on this very page; of
+% course the actual text block fits the text block grid, because this
+% documentation is typeset by means of the \texttt{ltxdoc} document class, that by
+% itself would use other layout parameters, but that is has been arrayed so as to invoke
+% this very package. This allows you to immediately evaluate this traditional layout and
+% see if it fits to your needs.
+% \end{abstract}
+%
+% \begin{multicols}{2}
+% \tableofcontents
+% \end{multicols}
+%
+% \section{Introduction}
+% As any user of the \class{memoir} class knows well, this class allows to customize the
+% page layout virtually without any limitation; such limitations are connected mainly with
+% the user inconsistent data that miss to specify necessary information or give unnecessary
+% and contrasting information. Also other classes and/or packages allow the customized
+% design of the page layout; some other classes, such as the standard ones, do not have any
+% facility for customizing the page geometry, unless the user invokes suitable packages,
+% such as \pack{geometry} or \pack{tyeparea}, just to male a couple of well known examples.
+%
+% Many packages exist in order to specify a named layout; this package \pack{canoniclayout}
+% is another one that computes the page parameters to determine the horizontal and vertical
+% dimensions of the margins and the text block. All other details shall be specified by the
+% user, for example the dimensions of the stock paper, the trimming widths, and therefore
+% the position of the page onto the stock paper, and so on.
+% This package deals only with the trimmed page, not with the page and stock paper
+% relationship.
+%
+% \begin{figure}
+% \makebox[\textwidth]{\makebox[1.1\textwidth][r]{%
+% \unitlength=0.0015\textwidth
+% \let\ul\unitlength
+% \begin{picture}(184,320)(0,-20)
+% \put(0,0){\framebox(184,297){}}
+% \put(27,70){\makebox(0,0)[bl]{\color{grigio}\rule{113\ul}{184\ul}}}
+% \put(92,-20){\makebox(0,0)[t]{Golden number canonical layout}}
+% \color{red}
+% \put(92,162){\circle{184}}
+% \linethickness{.2pt}
+% \multiput(0,297)(1.98918918919,-3.21081081082){93}{\line(184,-297){1}}
+% \end{picture}%
+% \hfill
+% \unitlength0.0015\textwidth
+% \let\ul\unitlength
+% \begin{picture}(210,330)(0,-20)
+% \put(0,0){\framebox(210,297){}}
+% \put(25,51){\makebox(0,0)[bl]{\color{grigio}\rule{149\ul}{210\ul}}}
+% \put(105,-35){\makebox(0,0)[b]{ISO canonical layout}}
+% \color{red}
+% \put(105,156){\circle{210}}
+% \multiput(0,297)(2.27027027027,-3.21081081082){93}{\line(210,-297){1}}
+% \end{picture}%
+% \hfill
+% \unitlength0.001591\textwidth
+% \let\ul=\unitlength
+% \begin{picture}(220,330)(0,-20)
+% \put(0,0){\framebox(220,280){}}
+% \put(20.742,33.6){\makebox(0,0)[bl]{\color{grigio}\rule{172.86\ul}{220\ul}}}
+% \put(110,-35){\makebox(0,0)[b]{Letter paper canonical layout}}
+% \color{red}
+% \put(110,143.6){\circle{220}}
+% \multiput(0,280)(2.37837837838,-3.02702702703){93}{\line(220,-280){1}}
+% \end{picture}
+% }}%
+% \caption{A right page with the relevant diagonal, the text block and the canonical circle.
+% In this figure the important information is the page proportions, not the scale; matter of
+% fact the letter paper is 17.6 mm shorter than the A4 paper, but the drawings to the same
+% height emphasize the relative proportions of the various page parts.}
+% \label{fig:canoniclayout}
+% \end{figure}
+%
+% Figure~\ref{fig:canoniclayout} depicts the situation described above; the gray rectangle
+% represents the type block; the dotted page diagonal, as it can be seen, passes through
+% the diagonal vertices of the type block; at the same time the circle is tangent to both
+% the type block and the page contour.
+%
+% It must also be noticed, in the sketch on the left, that the page rectangle is a golden
+% one; therefore also the type block is a golden rectangle; the inner to the outer margin
+% ratio is the golden section value so as this same ratio exists between the upper and the
+% lower margin. This canonical layout implies that the type block height is equal to the
+% page width.
+%
+% Therefore this canonical layout is not suited when the page width is too small compared
+% to the page height: with the golden section\footnote{Here we denote $\phi=1,618\dots$
+% with the name of \emph{golden number}, and its reciprocal $\varphi=0,618\dots$ with the
+% name of \emph{golden section}.} this ratio is 0.618, with the ISO paper shape, in the
+% sketch on the center, this ratio is 0,707, and so on.
+%
+% But it is equally unsuitable with squarish pages, such as the sketch on the right where
+% the page proportions conform with the USA letter paper size: the type block leaves little
+% space for the margins, as it is evident from the properties of the canonical circle, which
+% is tangent to the page lateral sides and to the type block horizontal sides; to the limit
+% in a square page the type block is so large that there is no room for the margins.
+%
+% \section{The mathematics of the canonical layout}
+% If one plays a little with the drawing of figure~\ref{fig:canoniclayout} and applies what
+% has been described in the Introduction, may easily derive the following formulas:
+%\begin{align}
+%&\text{Page shape ratio:}& x&=b/h \label{equ:1} \\
+%&\text{Inner margin:}& I&=bx(1-x)/(1+x) \\
+%&\text{External margin:}& E&=b(1-x)/(1+x) \\
+%&\text{Top margin:}& T&=hx(1-x)/(1+x) \\
+%&\text{Bottom margin:}& B&=h(1-x)/(1+x) \\
+%&\text{Text width:}& W&=xb \\
+%&\text{Text height:}& H&=b \\
+%&\text{Circle center abscissa:}&C_x&=0.5b \\
+%&\text{Circle center ordinate:}&C_y&=h(1-x)/(1+x)+b/2 \\
+%&\text{Circle radius:}& R&=0.5b \label{equ:10}
+%\end{align}
+% whose results are summarized in table~\ref{tab:canoniclayout} for three common values of
+% the shape factor and for the letter paper shape ratio.
+%
+%\begin{table}[!b]\centering\let~\enspace
+%\hrule
+%\caption{Canonical layout ratios referred to the the base (or width, $b$) of the trimmed
+% page and its height ($h$).}\label{tab:canoniclayout}
+%\bigskip
+%\begin{tabular}{l@{\qquad}*4{>{$}c<{$}}}
+%\toprule
+% &\multicolumn4c{Canon} \\
+%\multicolumn1c{Quantity} & \phi:1 & 3:2 & \sqrt2:1 & 11:8.5\\
+%\midrule
+% Page shape ratio &0,618~ &0,666~ &0,707~ &0,773~ \\
+% Inner margin &0,146b &0,133b &0,121b &0,099b \\
+% External margin &0,236b &0,200b &0,172b &0,128b \\
+% Upper margin &0,146h &0,133h &0,121h &0,099h \\
+% Lower margin &0,236h &0,200h &0,172h &0,128h \\
+% Text width & 0,618b &0,666b &0,707b &0,773b \\
+% Text height & b & b & b &b \\
+% Circle center abscissa & b/2 & b/2 & b/2 &b/2 \\
+% Circle center ordinate & 0,545h &0,533h &0,526h &0,515h \\
+% Circle radius & b/2 & b/2 & b/2 &b/2 \\
+%\bottomrule
+%\end{tabular}
+%\end{table}
+%
+% Actually the formulas~\ref{equ:1}--\ref{equ:10}, and their numerical evaluations reported
+% in table~\ref{tab:canoniclayout}, are just for general information. The actual
+% computations are performed by this package, either by means of the \class{memoir} built-in
+% facilities or by explicit computations that exploit the $\varepsilon$-\TeX\ extensions.
+% But it can be easily seen that as the trimmed page becomes more squarish, the
+% page size ratio tends to one, ad the margins become smaller and smaller. Therefore it
+% seems that this layout is most suited for intermediate page ratios, such as the ISO one
+% or the common European book size of 170\,mm $\times$ 240\,mm with a ratio of 0,708.
+%
+% \section{Usage}
+% This package is invoked as usual with:
+%\begin{verbatim}
+% \usepackahe{canoniclayout}
+%\end{verbatim}
+% No options are necessary; but it is necessary to invoke the package only after the page
+% dimensions are known, be they specified by an option passed to the class, such as, for
+% example, \texttt{a4paper}, or by means of a \texttt{page}$size$ specification, for example
+% \texttt{pagebv} for calling the ISO B5 size.
+%
+% At any convenient moment after calling this package, the trimming margins with respect to
+% the stock paper may be computed and the layout rechecked and fixed for consistency.
+%
+% \section{Font normal size}
+% At the same time if this page layout is chosen, the font normal size should be selected on
+% the actual text block width; it is possible that the golden ratio type block, on a golden
+% rectangle paper obtained by trimming an ISO A4 stock paper, might be suitable with a 10pt
+% normal font size (exactly 66 characters per line with 10pt Latin Modern fonts), while a
+% full ISO A4 paper yields a type block that might be more suited for a 12pt normal font
+% size (86 characters with 10pt Latin Modern fonts). The computations might be left to the
+% \class{memoir} class commands, but it's better the user is aware of this particular point.
+% For his/her sake this package provides the command |\currentfontletters| (to be used
+% only after |\begin{document}|, because specific font packages might be loaded after the
+% page layout has been computed; in any case the command is ``text producing'', therefore
+% it can't be used while in the preamble!) that types out a sentence such as ``The number
+% of characters in one text line with the current font is $nn$'', where the $nn$ is the
+% actual number printed out. If such number is much larger than the ideal Bringhurst range
+% of $66\pm5$, it's wiser to chose a larger normal font size.
+% In any case the alternative command |\charactersperpage| types out the same information,
+% the number of lines and the estimated number of characters per page. These commands are
+% supposed to be useful while setting up the complete preliminary parameters for the page
+% layout.
+%
+% Just to have a comparison, table~\ref{tab:sizes} displays the number of characters in one
+% line of text for several fonts and for page sizes A4, A5, and B5.
+%
+%\begin{table}
+%\caption{Text line lengths measured in average number
+% of characters in different fonts}\label{tab:sizes}
+% \bigskip
+%
+% \centering
+% \let\b\bfseries \let\i\itshape\tabcolsep=5pt
+% \makebox[\textwidth]{\small\begin{tabular}{l*9c}
+% \toprule
+% Font collection & \multicolumn3c{A4 paper size}
+% & \multicolumn3c{A5 paper size}
+% &\multicolumn3c{B5 paper size}\\
+% & 10\,pt & 11\,pt & 12\,pt & 10\,pt & 11\,pt & 12\,pt & 10\,pt & 11\,pt & 12\,pt \\
+% \midrule
+% Times eXtended & \i92 & \i84 & \i77 & \b64 & 59 & \i54 & \i77 & \b70 & \b64 \\
+% Latin Modern & \i86 & \i79 & 73 & 60 & \i55 & \i51 & 72 & \b66 & \b61 \\
+% Kepler Project & \i83 & 76 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 58 \\
+% Palatino eXtended& \i82 & 75 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 57 \\
+% \bottomrule
+% \end{tabular}}
+%\end{table}
+%
+% It can be seen that the bold measures satisfy the Bringhurst rule with a number of
+% characters in the range $66\pm5$; the measures typeset in medium series type are out of
+% the optimal Bringhurst range, but may be considered acceptable; the measures typeset in
+% italics are completely out of the interval $66\pm10$ and should not be considered
+% acceptable. This means that the large A4 paper size may be best used with intrinsically
+% large fonts such as the Palatino eXtended (package \pack{pxfonts}) and the Kepler Project
+% (package \pack{kpfonts}). With the smaller A5 paper size with 10\,pt size fonts the best
+% ones are the Times eXtended (package \pack{txfonts}), but substantially all the examined
+% fonts are acceptable, while with 12\,pt fonts none are acceptable.
+%
+% With an intermediate sized paper, such as a B5 ISO size, all the considered fonts are
+% acceptable inside or just outside the optimal Bringhurst interval.
+%
+% Many books are trimmed to a size close the B5 paper size, therefore the page layout
+% produced with this package is most useful with medium and smaller sizes (at least with
+% ISO sizes).
+
+% \section{Conclusion}
+% I don't think this package should set also the header and footer distances, for example,
+% or should set any specification for the page ``decorations'', such as underlined headers,
+% or overlined footers, or the size, font family, series and shape of the header and footer
+% contents. These specifications are of course important, but have nothing to do with the
+% relationship between the paper size, the page size and the type block size.
+%
+% As a final remark it's worth noting that a single pass of \prog{pdflatex} on this
+% \file{canoniclayout.dtx} file produces at the same time both the \file{canoniclayout.sty}
+% package file and the documentation \file{canoniclayout.pdf} file. After running
+% \prog{pdflatex} move \file{canoniclayout.sty} to a \file{tex/latex/canoniclayout/} folder
+% and \file{canoniclayout.pdf} to a \file{doc/latex\discretionary{}{/}{/}canoniclayout/} one;
+% if such folders don't exist, create them on your personal \TeX\ tree. After moving these
+% files remember to refresh the file name data base.
+%
+%
+% \StopEventually{}
+%
+% \section{Documented code}
+% The package preliminaries are already in place. We are going to make some computations in
+% order to determine the page shape factor $x$; to this end we exploit the dimensional
+% computing capabilities of $\varepsilon$-\TeX, that are already embedded in the most recent
+% implementations of the program \prog{pdftex}; in fact it must be remarked that these
+% facilities are being embedded into the \prog{pdftex} typesetting engine since the \TeX~Live
+% distribution of the year 2005. If these facilities are not available, either
+% because the \TeX\ distribution is a little too old, or because the real \prog{tex}
+% typesetting engine, not \prog{pdftex}, is being used, then, this entire package contents is
+% skipped and nothing is done, except issuing a suitable warning.
+% \begin{macrocode}
+%<*package>
+\expandafter\ifx\csname eTeXversion\endcsname\relax
+ \PackageWarning{canoniclayout}{%
+ The typesetting engine is not suited\Messagebreak
+ for working in extended mode.\Messagebreak}
+ This package is being skipped}
+ \expandafter\endinput
+\fi
+\ifnum\eTeXversion>\z@\else
+ \PackageWarning{canoniclayout}{%
+ The typesetting engine is not working in extended mode.\MessageBreak
+ This package is being skipped}
+ \expandaftter\endinput
+\fi
+% \end{macrocode}
+%
+% In order to have this layout work with the \class{memoir} class or with any other
+% class we have to test the fact they they package has been loaded within the preamble
+% of a \class{memoir} styled document; according to the result of this test we can exploit
+% the \class{memoir} facilities for determining the page geometry, or we have to carry out
+% the complete computations ourselves.
+% \begin{macrocode}
+\@ifclassloaded{memoir}{% }% balancing brace
+% \end{macrocode}
+% Working with the \class{memoir} facilities, we can determine the page shape factor
+% and we save it into the control sequence |\CLshape|. The trick of multiplying by |p@|,
+% a length of 1\,pt, is a simple trick for reducing the shape ratio to a length whose
+% numerical value is exactly the ratio we are interested in. By stripping the `pt' part
+% from this dimension value we remain with the real number we want to keep in memory.
+% Of course we need also the reciprocal value, therefore we have to perform this
+% calculation a second time with different factors.
+% This ``strange'' way of computing real ratios derives from the ability of the
+% $\varepsilon$-\TeX\ engine to scale lengths with a higher computational precision than
+% ``normal'' \TeX\ can do with the standard dimension and integer operations. In facts
+% all the computational operations are performed in the CPU registers and the intermediate
+% first result of the multiplication is kept into a double length register, so that no bits
+% are rounded or truncated; the division operation is performed with a double length
+% numerator and a single length denominator, so that, again, almost no information is lost
+% at the inevitable end of the division algorithm with a non vanishing remainder.
+% \begin{macrocode}
+\dimen@=\dimexpr \p@ * \paperwidth / \paperheight\relax
+\edef\CLshape{\strip@pt\dimen@}
+\dimen@=\dimexpr \p@ * \p@ / \dimen@\relax
+\edef\CLinvshape{\strip@pt\dimen@}
+% \end{macrocode}
+% We then assign the text height, thanks to the fact that the canonical layout has the
+% block height just as long as the page width, due to the circle property mentioned in the
+% Introduction; in any case the formulas~\ref{equ:1}--\ref{equ:10} and
+% table~\ref{tab:canoniclayout} confirm this property for any shape.
+% \begin{macrocode}
+\textheight=\paperwidth
+% \end{macrocode}
+%
+% This done, we can use the internal \class{memoir} commands to determine the other layout
+% dimensions.
+% \begin{macrocode}
+\settypeblocksize{\textheight}{*}{\CLshape}
+\setlrmargins{*}{*}{\CLinvshape}
+\setulmargins{*}{*}{\CLinvshape}
+\setmarginnotes{7pt}{\dimexpr \foremargin-3\marginparsep}{\onelineskip}
+
+% \end{macrocode}
+%
+% We now use the |\checkandfixthelayout| so that it adjusts the type block dimensions
+% to an integer number of lines in the normal font and eventually prints the page
+% parameters to the% \file{.log} file.
+% \begin{macrocode}
+\checkandfixthelayout
+% \end{macrocode}
+%
+% At this point we are finished with the computations if the \class{memoir} class is the active one, nut we need to perform the complete calculations in case we are not working with the \class{memoir} class.
+% \begin{macrocode}
+}{%
+% \end{macrocode}
+% We start by defining the lengths registers that hold the real inner, outer and upper
+% margins, without the one inch shift and without taking into consideration the headings
+% and their spacings, that must be specified before calling this package.
+% \begin{macrocode}
+\newlength\innermargin
+\newlength\outermargin
+\newlength\uppermargin
+% \end{macrocode}
+% Then we define scratch length registers in order to maintain intermediate values.
+% \begin{macrocode}
+\dimendef\CLpageratio=1256% x=b/h
+\dimendef\CLsmallratio=1258% z=x*y
+\dimendef\CLlargeratio=1260% y=(1-x)/(1+x)
+% \end{macrocode}
+% Now we determine the actual values based on the page width and height; we work on dimensions, and we extract the decimal fractional value by stripping off the `pt' part of their measure; we keep the decimal fractionl values into service macros:
+% \begin{macrocode}
+\CLpageratio=\dimexpr \p@*\paperwidth/\paperheight\relax % x
+\CLlargeratio=\dimexpr \p@*(\p@-\CLpageratio)/(\p@+\CLpageratio)\relax % y
+\CLsmallratio=\dimexpr \CLpageratio*\CLlargeratio/\p@\relax % z
+%
+\edef\CL@pageratio{\strip@pt\CLpageratio}
+\edef\CL@smallratio{\strip@pt\CLsmallratio}
+\edef\CL@largeratio{\strip@pt\CLlargeratio}
+% \end{macrocode}
+% We compute the type block dimensions:
+% \begin{macrocode}
+\textheight\paperwidth% altezza griglia
+\textwidth=\CL@pageratio\textheight
+% \end{macrocode}
+% We then compute the real margins between the page sides and the type block:
+% \begin{macrocode}
+\innermargin=\CL@smallratio\paperwidth
+\outermargin=\CL@largeratio\paperwidth
+\uppermargin=\CL@smallratio\paperheight
+% \end{macrocode}
+% But the typesetting engine does not use the net margins, due to the historical
+% one inch shift of the original \TeX\ implementation and, for the upper margin,
+% due to the fact that by default this layout implies the headings and the footers
+% outside the type block. Since we have the real outer margin dimension, we compute
+% the actual default marginal note measure:
+% \begin{macrocode}
+\marginparwidth=\dimexpr0.8\outermargin-\marginparsep\relax
+\evensidemargin=\dimexpr\outermargin -1in\relax
+\oddsidemargin=\dimexpr\innermargin-1in\relax
+\topmargin=\dimexpr\uppermargin-1in-\headheight-\headsep\relax
+% \end{macrocode}
+% When using different classes from the \class{memoir} one, we adjust the type block
+% dimensions so that the type block contains an integer number of lines; we use the
+% normal size |\baslineskip| value and compute the number of lines contained in the
+% initial type block minus the first line stander height equal to |\topskip|; notice
+% that the integer value expression computed for counter 256 is a rounded value, not
+% a truncated value, therefore the actual type block height might get enlarged or
+% reduced a very little bit that will not be noticed with naked eye when one examines
+% a typeset page; eventually we recompute the |\textheight| taking into account the
+% height of the first line.
+% \begin{macrocode}
+\normalfont
+\count256=\numexpr(\textheight-\topskip)/\baselineskip\relax
+\textheight=\count256\baselineskip\relax
+\textheight=\dimexpr\textheight+\topskip\relax
+\normalbaselineskip\baselineskip
+% \end{macrocode}
+% and we eventually close the second action depending on the use of the \class{memoir}
+% class:
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% Just for testing the number of characters in a line, the following macros are provided.
+% A couple of scratch dimension registers will be used |dimen@| and |\abcwidth|; |\abcwidth|
+% will hold the current lowercase alphabet length, and |\dimen@| will hold several values
+% in succession. The scratch counter |\count254| will receive the final result to be
+% printed out. $\varepsilon$-\TeX\ arithmetics will be used throughout.
+%
+% Another service macro for the user's sake is |\charactersperpage|; this macro
+% typesets the average number of characters per line, the numbers of lines per
+% page, and eventually their product, a good estimate of the number of characters
+% per page.
+%
+% Many text editors have facilities for counting a ``compuscript'' number o words
+% and characters; with this further information the user may easily estimate the
+% number of pages of his/her document; of course s/he must allow a certain allowance
+% for the front and back matter pages, so that s/he can evaluate the total amount
+% of signatures of the whole typeset document; of course, by typesetting it with
+% \prog{(pdf)latex} s/he knows exactly the number of pages of the final document, but the
+% typographer wants to know a good estimate before the source \TeX\ files are finished.
+% \begin{macrocode}
+\newlength\abc@width
+\newcommand*\currentfontletters{%
+\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
+\dimen0=\dimexpr \textwidth * \dimen0 / \abc@width \relax
+\count254=\numexpr \dimen0 / \p@ \relax
+\par The number of characters in one text line with the current font is
+ \the\count254.\par}
+
+\newcommand*\charactersperpage{%
+\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
+\dimen0=\dimexpr \textwidth * \dimen0 / \abc@width \relax
+\count254=\numexpr \dimen0 / \p@ \relax
+\count252=\numexpr \textheight / \baselineskip \relax
+\count250=\numexpr \count252 * \count254\relax
+\begin{quote} The average number of characters in one text line
+ with the current font is \the\count254;
+ this text block contains \the\count252\ lines;
+ a rough estimate of the number of characters per page is
+ \the\count250.\par
+ This information may be useful to evaluate the total number
+ of pages in a document.
+\end{quote}}
+
+%</package>
+% \end{macrocode}
+% \Finale
+% \endinput
+%
+