texlive[64889] Master/texmf-dist: canoniclayout (1nov22)
commits+karl at tug.org
commits+karl at tug.org
Tue Nov 1 20:51:58 CET 2022
Revision: 64889
http://tug.org/svn/texlive?view=revision&revision=64889
Author: karl
Date: 2022-11-01 20:51:57 +0100 (Tue, 01 Nov 2022)
Log Message:
-----------
canoniclayout (1nov22)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/canoniclayout/README.txt
trunk/Master/texmf-dist/doc/latex/canoniclayout/canoniclayout.pdf
trunk/Master/texmf-dist/source/latex/canoniclayout/canoniclayout.dtx
trunk/Master/texmf-dist/tex/latex/canoniclayout/canoniclayout.sty
Modified: trunk/Master/texmf-dist/doc/latex/canoniclayout/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/canoniclayout/README.txt 2022-11-01 19:51:20 UTC (rev 64888)
+++ trunk/Master/texmf-dist/doc/latex/canoniclayout/README.txt 2022-11-01 19:51:57 UTC (rev 64889)
@@ -1,51 +1,17 @@
-%%
-%% This is file `README.txt',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% canoniclayout.dtx (with options: `txt')
-%% ______________________________________________________
-%% The canoniclayout package for LaTeX
-%% Copyright (C) 2010-2020 Claudio Beccari
-%% All rights reserved
-%%
-%% License information appended
-%%
-\ProvidesFile{README.txt}
- [2020-04-09 v.0.5 Canonic layout circumscribed to a circle]
+Canoniclayout v.1.0
+Canoniclayout is a small module that allows to design a canonic layout
+based of the great circle inscribed within the page and tangent to the
+horizontal sides of the text block rectangle. The margins reflect the
+trimmed page shape ratio, therefore the page block principal diagonal
+coincides with the corresponding page diagonal; this layout is especially
+good for ISO shapes but can be used with many other traditional book
+page~shapes.
-Canoniclayout is a small extension package that allows to design
-a canonic layout based on the great circle inscribed within the
-page and tangent to the horizontal sides of the type block rectangle.
-The margins reflect the trimmed page shape ratio, therefore the
-type block principal diagonal coincides with the corresponding
-page diagonal; this layout is especially good for ISO page shapes
-but it can be used with many other traditional book page shapes.
+This work is released under the Latex Project Pubblic Licence v.1.3c. The
+LPPL is distributed with any TeX system distribution and can be found
+also in any CTAN archive.
-This new version is completely new, in the sense that its code
-calculations are performed by means of the 2018 xfp package
-facilities. For this reason it cannot be used with any TeX
-distribution preceding the year 2018 and updated by the end of
-that year; should this happen this very package aborts its own
-input while advising the user by means of an Error Message.
-
-This work is released under the Latex Project Public Licence
-v.1.3c. The LPPL is distributed with any TeX system distribution
-and can be found also in any CTAN archive.
-
-Claudio Beccari 2020
+Claudio Beccari 2022
+Author maintained
claudio dot beccari at gmail dot com
-
-%% 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 consists of this file canoniclayout.dtx, a README.txt file
-%% and the derived files canoniclayout.sty and canoniclayout.pdf.
-%%
-%% This work is "maintained"
-%%
-%%
-%% End of file `README.txt'.
Modified: trunk/Master/texmf-dist/doc/latex/canoniclayout/canoniclayout.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/canoniclayout/canoniclayout.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/canoniclayout/canoniclayout.dtx 2022-11-01 19:51:20 UTC (rev 64888)
+++ trunk/Master/texmf-dist/source/latex/canoniclayout/canoniclayout.dtx 2022-11-01 19:51:57 UTC (rev 64889)
@@ -1,4 +1,9 @@
% \iffalse
+% !TEX TS-program = pdflatex
+% !TEX encoding = UTF-8 Unicode
+%^^A Ho cercato di renderlo indipendente da m0,emoir (2022-10-24)
+% \fi
+% \iffalse
%<*internal>
\begingroup
\input docstrip.tex
@@ -6,28 +11,28 @@
\preamble
______________________________________________________
The canoniclayout package for LaTeX
- Copyright (C) 2010-2020 Claudio Beccari
+ Copyright (C) 2010 Claudio Beccari
All rights reserved
License information appended
\endpreamble
+\postamble
+Copyright 2010 Claudio Beccari
-\postamble
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 consists of this file canoniclayout.dtx, a README.txt file
+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.
-This work is "maintained"
-
\endpostamble
\askforoverwritefalse
%
\generate{\file{canoniclayout.sty}{\from{canoniclayout.dtx}{package}}}
-\generate{\file{README.txt}{\from{canoniclayout.dtx}{txt}}}
%
\def\tmpa{plain}
\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
@@ -41,23 +46,21 @@
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[2009/01/01]
%<package>\ProvidesPackage{canoniclayout}%
-%<txt>\ProvidesFile{README.txt}
-%<*package,txt>
- [2020-04-09 v.0.5 Canonic layout circumscribed to a circle]
-%</package,txt>
+%<*package>
+ [2022/11/01 v.1.0 Text block height equal to paper width]
+%</package>
%<*driver>
-\documentclass[a4paper]{ltxdoc}
-\paperwidth=210mm\paperheight=297mm
+\documentclass{ltxdoc}
+\paperwidth=220mm\paperheight=280mm
\pdfpagewidth=\paperwidth \pdfpageheight=\paperheight
-\usepackage[utf8]{inputenc}
+%\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage{multicol}
\usepackage{amsmath,array,booktabs}
-\usepackage{pict2e}[2019/06/01]%
-\usepackage{color,xfp}
-\usepackage{canoniclayout}
+\usepackage{pict2e}[2009/06/01]%
+\usepackage{color}
\hfuzz 10pt
\newcommand*\class[1]{\textsf{#1}}
@@ -64,66 +67,45 @@
\newcommand*\pack[1]{\textsf{#1}}
\newcommand*\prog[1]{\textsl{#1}}
\newcommand*\file[1]{\texttt{#1}}
-\definecolor{grigio}{gray}{.85}
+\renewcommand*\meta[1]{{\normalfont\textlangle#1\textrangle}}
+\renewcommand*\marg[1]{\texttt{\{\meta{#1}\}}}
+\newcommand*\Marg[1]{\texttt{\{#1\}}}
+\renewcommand*\oarg[1]{\texttt{[\meta{#1]}}}
+\newcommand*\Oarg[1]{\texttt{[#1]}}
+\renewcommand*\cs[1]{\texttt{\char92#1}}
+\newcommand*\eTeX{$varepsilon$\TeX}
-\makeatletter
-%\newdimen\CLinnermargin % 258
-%\newdimen\CLmm % 262
-%\newdimen\CLpagewidth % 260
-%\newdimen\Clowermargin % 264
-%\newdimen\CLvoffset % 256
-\edef\CLinnermargin{\fpeval{\oddsidemargin+1in}}
-\edef\CLmm{\fpeval{1mm}}
-\edef\CLpagewidth{\fpeval{\paperwidth}}
-\edef\CLlowermargin{\fpeval{\paperheight-\topmargin-\headheight-(1in)-\headsep-\textheight}}
-\edef\CLvoffset{\fpeval{\headheight+\topmargin+1in-\paperheight}}
-\edef\CLpageheight{\fpeval{\paperheight}}
-\def\cblayoutdestro{%
-\begin{picture}(0,0)(\CLinnermargin,-\CLvoffset)
-\put(0,0){\unitlength=\p@
-\put(0,0){\framebox(\CLpagewidth,\CLpageheight){}}
-\color{red}
-\put(\CLinnermargin,\CLlowermargin){\makebox(0,0)[bl]{\color{grigio}\rule{\textwidth}{\textheight}}}
- \Line(0,\CLpageheight)(\CLpagewidth,0)
- \put(\fpeval{\CLpagewidth/2},\fpeval{\CLlowermargin+(\textheight)/2}){\circle{\CLpagewidth}}
-}
-\end{picture}}
-\def\ps at title{\ps at plain
-\def\@oddhead{\cblayoutdestro}
-\let\@evenhead\@oddhead}
+\definecolor{grigio}{gray}{.75}
\allowdisplaybreaks
\begin{document}
\GetFileInfo{canoniclayout.dtx}
-\title{Package \pack{canoniclayout}}
-\author{Claudio Beccari}
-\date{\centering Version number \fileversion; last revision \filedate.\\
- e-mail: \texttt{claudio dot beccari at gmail dot com}\par}
- \maketitle\thispagestyle{title}
+\title{Package \pack{canoniclayout}\\[0.5\baselineskip]{\normalsize Version number \fileversion; last
+ revision \filedate.}}
+\author{Claudio Beccari\thanks{e-mail: \texttt{claudio dot beccari at gmail dot com}}}
+ \maketitle
\DocInput{canoniclayout.dtx}
\end{document}
%</driver>
% \fi
%
-% \CheckSum{128}
-%\begin{abstract}
-%\noindent
-% 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 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.
+% \CheckSum{466}
+% \begin{abstract}
+% This package may be used as an extension to the \class{memoir} or as a
+% standalone package that might work with any standard class. It tests if
+% \class{memoir} was loaded within the preamble, otherwise it does all the
+% necessary calculations with the usual facilities of a recent
+% \LaTeX\ based engine.
%
-% 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 arranged so as to invoke this very package. This
-% allows you to immediately evaluate this traditional layout and see if
-% it fits your requirements.
-%\end{abstract}
+% This package computes the page parameters for a canonical layout where
+% the text block is placed onto the page in such a way that: $(a)$ its,
+% diagonal coincides with the page relevant diagonal, and $(b)$ the circle,
+% vertically 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 top to bottom margin
+% ratios. See figure~\ref{fig:canoniclayout}
%
+% \end{abstract}
+%
% \begin{multicols}{2}
% \tableofcontents
% \end{multicols}
@@ -132,36 +114,30 @@
% As any user of the \class{memoir} class knows well, this class allows
% to customise 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 or conflicting
-% information. Also other classes and/or packages allow the customised
-% design of the page layout; some other classes, such as the standard
-% ones, do not have any facility to customise 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.
+% miss to specify necessary information or give unnecessary and
+% conflicting information. The same happens when \class{memoir} is not
+% being used. In facts, if \class{memoir} is not used, the package computes
+% the necessary data that turn out to be correct with the standard document
+% classes; they might be correct also with other classes, and users can
+% check the correctness by using some commands that are described below,
+% within the code documented section.
%
-% 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.
+% Many packages exist in order to specify a specific 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.
+% stock paper relationship. See the documentation of class \class{memoir}
+% in order to deal with stock paper and the details for configuring the
+% position of the page to be trimmed on the stock paper. With the standard
+% document classes this package works with the standard paper sizes
+% that \LaTeX\ can handle. An attempt to use package \pack{geometry} was
+% made, but it was abandoned, because this package has limitations due to
+% the two digit integer values of element ratios; may be in the future
+% it might be resumed.
%
-% \paragraph{Warning} This package works well only with a modern
-% installation of the \TeX\ system; in particular it uses the
-% facilities of the \pack{xfp} package, that is an interface between
-% the end user and the lower level language known as \LaTeX\,3 (L3 for
-% short). This implies a \LaTeX kernel implementation dated at least
-% 2029-01-01, and a complete installation of the \TeX\ system. In
-% particular the availability of the \pack{xfp} package is checked,
-% and if the typesetting program cannot fetch it, is issues a message
-% and interrupts loading this package. It is a clear message that your
-% installation is obsolete; you might have your good reasons for not
-% using a modern release of the \TeX\ system, but either you upgrade
-% your installation or you cannot use this package.
-
-%
% \begin{figure}
% \makebox[\textwidth]{\makebox[1.1\textwidth][r]{%
% \unitlength=0.0015\textwidth
@@ -190,20 +166,19 @@
% \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}}
+% \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 it is important to notice the page proportions, not the
-% scale; matter of fact the letter paper height is 17.6\,mm shorter than
-% the A4 paper, but the drawings to the same height emphasise the relative
-% proportions of the various page parts.}
+% canonical circle. In this figure the important pieces of information are
+% the page proportions, not the drawing scale; matter of fact the letter
+% paper is 17.6~mm shorter than the A4 paper, but the drawings to the same
+% height emphasises the relative proportions of the various page parts.}
% \label{fig:canoniclayout}
% \end{figure}
%
@@ -211,87 +186,91 @@
% the grey 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.
-%
+% and the page contour\footnote{Geometrically speaking this sentence is
+% meaningless, but the drawings in the picture show what we mean.}.
+%.
% 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.
+% value so as this same ratio exists between the top and the bottom margin.
%
-% 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.
+% 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 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.
%
-% 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.
+% With the ISO paper shape, in the sketch on the center, this ratio is
+% 0.707, and so on.
%
+% But it is also evident that this layout is unsuitable with squarish
+% pages, such as the sketch on the right where the page proportions are
+% those of 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 trimmed page the type block
+% fills he whole page so that the margins vanish.
+%
% \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:
+% With reference to the drawing on figure~\ref{fig:canoniclayout}
+% and what has been described in the Introduction, the following formulas
+% may be easily derived:
%\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}
+% &\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&=b/2 \\
+% &\text{Circle center ordinate:}& C_y&=h(1-x)/(1+x)+b/2 \\
+% &\text{Circle radius:} & R &=b/2 \label{equ:10}
%\end{align}
-% whose results are summarised in table~\ref{tab:canoniclayout} for
-% three common values of the shape factor and for the letter paper
-% shape ratio.
+% Notice that the circle center coordinates are referred to the lower
+% left corner of the trimmed page.
%
-%\begin{table}[!b]\centering^^A\let~\enspace
-%^^A\hrule
-%\caption{Canonical layout ratios referred to the base
-% (or width, $b$) and the height ($h$) of the trimmed page.}
-%\label{tab:canoniclayout}
+% The results of the above formulas are summarised in
+% table~\ref{tab:canoniclayout} for four values of the shape factor
+% including the USA letter paper, that is 8.5~inches wide and 11~inches
+% high.
+%
+%\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$).
+% The circle coordinates are referred to the lower left corner of the
+% trimmed page.}\label{tab:canoniclayout}
%\bigskip
%\begin{tabular}{l@{\qquad}*4{>{$}c<{$}}}
%\toprule
-% &\multicolumn4c{Canon} \\
-%\multicolumn1c{Shape ratio} & \phi:1 & 3:2 & \sqrt2:1 & 11:8.5\\
+% &\multicolumn4c{Page ratio $h/b$} \\
+%\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 block width & 0,618b &0,666b &0,707b &0,773b \\
-% Text block 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 \\
+% Base to height ratio &0.6180 &0.6666 &0.7071 &0.7727~\\
+% Inner margin &0.146b &0.133b &0.121b &0.099b \\
+% External margin &0.236b &0.200b &0.172b &0.128b \\
+% Top margin &0.146h &0.133h &0.121h &0.099h \\
+% Bottom 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 diameter & b & b & b & b \\
%\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 \pack{xfp} functions.
-% 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 better
-% 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.
+% Actually the formulas~\ref{equ:1}--\ref{equ:10}, and their numerical
+% values reported in table~\ref{tab:canoniclayout}, are just for general
+% information. The actual computations are performed by this package, by
+% means of the package built-in facilities. But it can be easily seen that
+% as the trimmed page becomes more squarish, the page size ratio tends to
+% one, and the margins become smaller and tend to vanish. Therefore it
+% seems that this layout is most suited for intermediate page ratios, such
+% as the ISO one or the common European book page size of 170\,mm
+% by~240\,mm with a ratio $b/h=0.708$.
%
% \section{Usage}
% This package is invoked as usual with:
@@ -298,52 +277,49 @@
%\begin{verbatim}
% \usepackahe{canoniclayout}
%\end{verbatim}
-% No options are necessary; but it is necessary to invoke the package
-% only after the actual 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}\meta{size} specification, for example
-% \texttt{pagebv} for calling the ISO B5 size.
+% No options are required; but it is necessary to invoke the package only
+% after the page dimensions are known, be they specified by a class option,
+% such as, for example, \texttt{a4paper}, or by means of explicit
+% \verb|\paperwidth| and \verb|\paperheight| assignments.
%
-% 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.
+% At a convenient moment after calling this package, the trimming margins
+% with respect to the trimmed page may be computed and the layout
+% rechecked and fixed for consistency. The convenient moment is chosen by
+% the package to be at the \cs{begin}\Marg{document} statement execution,
+% because only at that moment all required packages are loaded and
+% possibly the user's macros are defined and settings are~set.
%
% \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 10\,pt
-% 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 is too much). 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\pm6$, 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
+% 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 (about 86 characters with 10pt Latin Modern
+% fonts). The computations might be left, for example, to the used class
+% \class{memoir} commands or to the user specifications, but it is
+% important that the user is aware of this particular point.
+%
+% For the user's sake this package provides the command
+% |\currentfontletters| (to be used only after |\begin{document}|,
+% because this package computations are available only after the
+% \cs{begin}\Marg{document} delayed computations are done; in any case the
+% command types out a sentence such as “The number of characters in one
+% text line with the current font is $n$'', where the $n$ is the actual
+% number printed out. If such number is much outside the ideal Bringhurst
+% range of $66\pm5$, it is wiser to chose a larger or smaller normal font
+% size.
+%
+% In any case the alternative command |\charactersperpage| types out the
+% same above information, the number of lines and the estimated number of
+% characters per page. These commands are supposed to be useful while
+% setting up or revise the complete preliminary parameters for the page
% layout.
%
-% Just to have a comparison, table~\ref{tab:sizes} displays the number
-% of characters in one text line for several fonts and for page sizes
-% A4, A5, and B5. As you see, although that Bringhurst range comes form
-% socio-psychological studies and therefore has a large standard deviation,
-% It appears that for the larger papers only those fonts with wider
-% lowercase letters are suitable for this canonical layout; with smaller
-% paper sizes, quite understandably, more font collections are suited.
-% This very document, typeset with this canonical layout on A4 paper
-% with a Latin Modern 10\,pt font size, has long text lines that stress
-% the readers eyes.
+% 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
@@ -354,113 +330,145 @@
% \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\\
+% 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 & \b60 & \i55 & \i51 & \b72 & \b66 & \b61\\
-% Kepler Project
-% & \i83 & 76 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 58\\
-% Palatino eXtended
-% & \i82 & 75 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 57\\
+% 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\pm6$; 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{newpxtext}) 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{newtxtext}), and the Latin Modern ones (package \pack{lmodern})
-% but substantially all the examined fonts are acceptable, while with
-% 12\,pt fonts none are acceptable.
+% It can be seen that the bold typeset numbers satisfy the Bringhurst rule
+% with such numbers falling within the range $66\pm5$; the computed numbers
+% typeset in normal series and shape are slightly out of the optimal
+% Bringhurst range, and may be considered acceptable; those typeset in
+% italics are completely out of the interval $66\pm10$ and should not be
+% accepted.
+% This means that the large A4 paper size may be best used with
+% intrinsically large fonts such as the Palatino eXtended (package
+% \pack{pxfonts} or \pack{newpxtext}) 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} or \pack{newtxtext}), but
+% substantially all the examined fonts are acceptable except those in
+% 12\,pt size.
+%
% 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.
+% 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).
+% Many books have trimmed pages sized close the B5 paper size, therefore
+% the page layout produced with this package is most useful with medium and
+% smaller paper sizes (at least with the ISO ones).
% \section{Conclusion}
-% I don't think this package should set also the header and footer
+% We 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 over lined 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.
+% “decorations”, such as underlined headers, or over lined footers, or
+% the font size, 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, besides a \file{README.txt}
-% required for uploading to the \textsc{ctan} archives. 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 and if you have a Mik\TeX\ installation,
-% remember to refresh the file name data base.
%
+% \StopEventually{}^^A==================================================
%
-% \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 use the functionalities of the \LaTeX\,3 language, already
+% contained in the \LaTeX\ kernel since 2020; even dimensions and skip
+% calculations are being available since June 2022. But the first thing
+% to do is to verify if the package is being used with a sufficiently
+% recent version of the \LaTeX\ engine; we test if the kernel has
+% a date of at least 2022/06/01
%
-% \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 package
-% \pack{xft}, that are already available in the most recent \LaTeX\
-% kernel files; in facts, the \LaTeX\,3 (L3) language computing
-% facilities have been available for several years, but the simple
-% and efficient user interface package \pack{xfp} has been available
-% since the 2018 autumn. 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.
+% We exploit also the \eTeX\ dimensional computing capabilities, 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 \LaTeX\ based 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 interpreter, not \prog{pdftex},
+% or\prog{luatex}, or \prog{xetex}, is being used, then this entire
+% package contents is skipped and nothing is done, except issuing a
+% suitable warning.
%\iffalse
%<*package>
%\fi
% \begin{macrocode}
-\IfFileExists{xfp.sty}{\RequirePackage{xfp}}{%
- \PackageError{canoniclayout}{\MessageBreak%
- The xfp package is not available\MessageBreak
- and this package cannot work without\MessageBreak}{
- Reading of this package is skipped\MessageBreak
- Expect a different layout form the canonical one\Messagebreak
- Update your TeX system installation!\expandafter\endinput}}
+\IfFormatAtLeastTF{2022/06/01}{}{%
+ \PackageWarning{canoniclayout}{%
+ The format file is not suited\MessageBreak
+ for working with this package.\MessageBreak
+ This package is being skipped and \MessageBreak
+ its functionalities are not available
+ \expandafter\endinput}
+\fi}
+
% \end{macrocode}
+% Then we test if the \class{memoir} class is being used; if that is the
+% case, we use its code (identical to the one of the previous package
+% version), otherwise we set up the code for this package internal
+% computations..
%
-% In order to have this layout work with the \class{memoir} class or
-% with any other class we have to test the fact that this 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.
+% We delay both codes to the \cs{begin}\Marg{document} statement execution,
+% so% we are sure that there are no interferences between the document
+% preamble settings and the \pack{canoniclayout}~ones.
+%
+% The user might start his main document \file{.tex} file according to the
+% following model:
+% \begin{flushleft}\obeylines
+% \cs{documentclass}\Oarg{...,a4paper,...}\marg{class}
+% ...
+% \cs{usepackage}\Marg{canoniclayout}
+% ...
+% \cs{begin}\Marg{document}
+% \meta{main document body}
+% \cs{end}\Marg{document}
+% \end{flushleft}
+% It is very important that the paper size be established within the
+% options of the \cs{documentclass} statement, because this package
+% needs the dimensions of the page to deal with.
+% \subsection[Using the memoir class]{Using the \class{memoir} class}
% \begin{macrocode}
\@ifclassloaded{memoir}{%
+\AtBeginDocument{%
% \end{macrocode}
-% Working with the \class{memoir} facilities, we can determine the page
-% shape factor and we save it into the control sequence |\CLshape|.
+% Now we can determine the page shape factor and we save it into the
+% control sequence \cs{CLshape}. The trick of multiplying by \cs{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 so that we have to perform this calculation two times
+% with different factors. This “strange” way of computing real ratios
+% derives from the ability of the \eTeX\ 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 within the computer CPU 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
+% therefore 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}
-\edef\CLshape{\fpeval{\paperwidth / \paperheight}}
-\edef\CLinvshape{\fpeval{1/\CLshape}}
+\dimen@=\dimexpr \p@ * \paperwidth / \paperheight\relax
+\edef\CLshape{\strip at pt\dimen@}
+\dimen@=\dimexpr \p@ * \p@ / \dimen@\relax
+\edef\CLinvshape{\strip at 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.
+% layout has the block height just as long as the page width, thanks to the
+% circle property mentioned in the Introduction; in any case
+% formulas~\ref{equ:1}--\ref{equ:10} and table~\ref{tab:canoniclayout}
+% confirm this property for any shape.
% \begin{macrocode}
\textheight=\paperwidth
% \end{macrocode}
@@ -475,158 +483,292 @@
% \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.
+% We now use the \cs{checkandfixthelayout} so that it prints the page
+% parameters to the \file{.log} file.
% \begin{macrocode}
\checkandfixthelayout
+}}% memoir class end code; start code for standard classes
% \end{macrocode}
%
-% At this point we are finished with the computations if the
-% \class{memoir} class is the active one, but we need to perform
-% the complete calculations in case we are not working with the
-% \class{memoir} class.
+% \subsection{Using a standard class}
+% Now we define the code in case \class{memoir} is not being used; the
+% various computations require a longer code. We need the
+% \pack{pict2e} package in order to use the |picture| environment with the
+% upgrades foreseen by Leslie Lamport himself and available since 2003.
+% We need also package \pack{etoolbox} in order to have an easy access to
+% the recent \LaTeX\ kernel hooks. In particular we use the
+% \cs{AtEndPreamble} hook command so as to be sure that all settings
+% for the paper size and the user preamble settings are already fixed.
+%
% \begin{macrocode}
-}{%
+%
+{\RequirePackage{etoolbox,pict2e}%
+\AtEndPreamble{%
+%
% \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.
+% If we use a standard class, we miss the powerful \class{memoir} commands;
+% we do not copy them into this package, but we make our own calculations;
+% by so doing we have full control also on the necessary parameters for
+% drawing the circles and the relevant diagonals. The necessary code is
+% going to be longer that that required for the \class{memoir} class,
+% also because we have to redefine the four standard page styles.
+%
+% We compute the relevant values by using equations from~\ref{equ:1}
+% to~\ref{equ:10}. Notice that we also create the service macros for
+% drawing the circle and the relevant page diagonal in case the user
+% wants them to appear in certain pages; see below for more details.
+% In any case we must check if the |\color| macro is available; in case
+% it is not, we load the \pack{xcolor} package without any options.
+%
+% Attention: if users want to use colors in their document, they should
+% load either package \pack{color} or package \pack{xcolor} with their
+% options \textcolor{red}{before} loading this package
+% \pack{canoniclayout}. If this is done, users are sure that the package
+% loaded within this module will not override their settings; notice that
+% \pack{xcolor} redefines some macros that have the same name as those of
+% \pack{color}; therefore \pack{color} might be loaded before
+% \pack{canoniclayout}, absolutely not \textcolor{red}{after}, otherwise
+% some \pack{xcolor} functionalities get corrupted; see the \pack{xcolor}
+% documentation. In a different wording: \textcolor{red}{avoid loading
+% package \pack{color}, because its functionalities are given
+% by \pack{xcolor} and \pack{color} is not required any more!}
% \begin{macrocode}
-\newlength\innermargin
-\newlength\outermargin
-\newlength\uppermargin
+\unless\ifcsname color\endcsname \RequirePackage{xcolor}\fi
+\newlength\CLinner \newlength\CLouter % new length registers
+\newlength\CLtop \newlength\CLbottom % other new registers
+\edef\CLx{\fpeval{\paperwidth/\paperheight}}% equation 1
+\edef\CLxx{\fpeval{(1-\CLx)/(1+\CLx)}}% for equations 2, 3, 4, 5, 9
+\CLinner=\fpeval{\paperwidth*\CLx*\CLxx}\p@% equation 2
+\CLouter=\fpeval{\paperwidth*\CLxx}\p@% equation 3
+\CLtop=\fpeval{\paperheight*\CLx*\CLxx}\p@% equation 4
+\CLbottom=\fpeval{\paperheight*\CLxx}\p@% equation 5
+\textwidth=\fpeval{\CLx*\paperwidth}\p@% equation 6
+\textheight=\paperwidth% equation 7
+\edef\CLcirclecenterX{\fpeval{\paperwidth/2}}% equation 8
+\edef\CLcirclecenterY{\fpeval{\CLxx*\paperheight+\paperwidth/2}}% eq. 9
+\let\CLcircleradius\CLcirclecenterX% equation 10
+\edef\CLcirclediameter{\strip at pt\paperwidth}%
+\let\CLpageW\CLcirclediameter
+
% \end{macrocode}
-% Then we use some macros where to store some constant values;
-% we compute them using the rimmed page width and height;
+% Then the text body height is proportional to the text body width trough
+% the above determined ratios.
+% We now set the other necessary page settings, even if by so doing, it
+% becomes impossible to modify them either in the preamble or after the
+% \cs{begin}\Marg{document} command. May be in the future this constraint
+% may be eliminated.
% \begin{macrocode}
-\edef\CLpageratio{\fpeval{\paperwidth/\paperheight}} % x
-\edef\CLlargeratio{\fpeval{(1-\CLpageratio)/(1+\CLpageratio)}} % y
-\edef\CLsmallratio{\fpeval{\CLpageratio*\CLlargeratio}} % z
+\normalsize
+\headheight=\baselineskip
+\headsep=\baselineskip
+\footskip=2\baselineskip
+\marginparsep=0.1\CLouter\relax
+\marginparwidth=0.8\CLouter\relax
+\topmargin=\dimexpr\CLtop-\headsep-\headheight-1in\relax
+\oddsidemargin=\dimexpr\CLinner-1in \relax
+\evensidemargin=\dimexpr\CLouter-1in \relax
+
% \end{macrocode}
-% We compute the type block dimensions:
+%
+% While \class{memoir} uses its computed results and applies them to all
+% pages; with the local calculations it is necessary to redesign the page
+% styles; we redefine also the |empty| and |plain| styles so as to have a
+% place holder in the otherwise empty headers, such that users can verify
+% the correct layout geometry by placing under the text being typeset,
+% a red drawing that shows the circle and the diagonal. Since the place
+% holder may contain some executable code, it is necessary to have handy
+% user macros to set it on or off.
+%
% \begin{macrocode}
-\textheight\paperwidth
-\textwidth=\CLpageratio\textheight
+\edef\CLdiagX{\strip at pt\paperwidth}% diagonal horizontal component
+\edef\CLdiagY{\strip at pt\paperheight}% diagonal vertical component
+\let\@CLdrawing\relax% initially drawings are turned off
+%Coordinates of the lower left page corner relative to the header origin
+\edef\CLlly{-\expandafter\strip at pt% both pages corner ordinate
+ \dimexpr\paperheight-\CLtop+\headsep}%
+\edef\CLllLx{-\strip at pt\CLouter}% lower left left-page corner abscissa
+\edef\CLllRx{-\strip at pt\CLinner}% lower left right-page corner abscissa
% \end{macrocode}
-% We then compute the real margins between the page sides and the type block:
+% The user commands for turning on and off the canonical layout drawings
+% are the following; sometimes it might be necessary to delay them
+% to the start of a new page; this may me easily done by using the
+% \pack{afterpage} package and its command \cs{afterpage}.
+% There are two commands, one for starting to insert drawings
+% in consecutive pages, and another to stop this functionality.
% \begin{macrocode}
-\innermargin=\CLsmallratio\paperwidth
-\outermargin=\CLlargeratio\paperwidth
-\uppermargin=\CLsmallratio\paperheight
+
+\newcommand*\CLstartdrawings{\let\@CLdrawing\CLdrawing}
+\newcommand*\CLstopdrawings{\let\@CLdrawing\relax}
+
+\newcommand*\CLdrawing{%
+ \begin{picture}(0,0)\color{red}%
+ \unitlength=\p@
+ \if at twoside
+ \ifodd\value{page}%
+ \put(\CLllRx,\CLlly){% right page: displaces the origin to the
+% lower left paper corner
+ \put(\CLcirclecenterX,\CLcirclecenterY){\circle{\CLcirclediameter}}
+ \put(\CLpageW,0){\line(-\CLdiagX,\CLdiagY){\CLpageW}}
+ }
+ \else
+ \put(\CLllLx,\CLlly){% left page: displaces the origin to the
+% lower left paper corner
+ \put(\CLcirclecenterX,\CLcirclecenterY){\circle{\CLcirclediameter}}
+ \put(0,0){\line(\CLdiagX,\CLdiagY){\CLpageW}}
+ }
+ \fi
+ \else
+ \put(\CLllRx,\CLlly){% one side: displaces the origin to the
+% lower left paper corner
+ \put(\CLcirclecenterX,\CLcirclecenterY){\circle{\CLcirclediameter}}
+ \put(\CLcirclecenterX,\CLcirclecenterY){%
+ \put(0,0){\line(\CLdiagX,\CLdiagY){\CLcircleradius}}
+ \put(0,0){\line(-\CLdiagX,-\CLdiagY){\CLcircleradius}}
+ }
+ }
+ \fi
+ \end{picture}
+}
% \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:
+% Now we redefine the four standard page styles so as to set the place
+% holder in all the headers; when this place holder is activated by
+% \cs{CLstartdrawings}, it gets defined with an environment |picture|
+% code extended by the use of package \pack{pict2e}. The environment
+% |picture| initial command has zero dimensions, therefore it does not
+% occupy any space in the headers. Command \cs{CLstopdrawings} redefines
+% the place holder to \cs{relax} and stops all drawings relative
+% to the page design.
% \begin{macrocode}
-\marginparwidth=\fpeval{0.8\outermargin-\marginparsep}pt
-\evensidemargin=\fpeval{\outermargin -(1in)}pt
-\oddsidemargin=\fpeval{\innermargin-(1in)}pt
-\topmargin=\fpeval{\uppermargin-(1in)-\headheight-\headsep}pt
+\def\ps at empty{%
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\makebox[\textwidth][l]{{\@CLdrawing}}}\let\@oddfoot\@empty
+ \def\@evenheadhead{\makebox[\textwidth][l]{{\@CLdrawing}}}
+ \let\@evenfoot\@empty}
% \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 |\baselineskip| value and
-% compute the number of lines contained in the initial type block minus
-% the first line standard height equal to |\topskip|; notice that the
-% integer value expression is a rounded value,
-% not a truncated one, therefore the actual type block height might get
-% enlarged or reduced by 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.
+% The above settings for an empty page may be useful to get the drawing
+% in a completely empty page, without any other object entering the page.
+%
+% The following redefinition of the |plain| page style is necessary in
+% order to get a chapter page overlaid on the red drawing.
% \begin{macrocode}
-\normalfont\textheight=%
-\fpeval{round((\textheight - \topskip)/\baselineskip, 0) * \baselineskip + \topskip}pt%
-\normalbaselineskip\baselineskip
+\def\ps at plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\makebox[\textwidth][l]{{\@CLdrawing}}}
+ \def\@oddfoot{\reset at font\hfil\thepage\hfil}
+ \def\@evenheadhead{\makebox[\textwidth][l]{{\@CLdrawing}}}
+ \let\@evenfoot\@oddfoot}
% \end{macrocode}
-% and we eventually close the second action depending on the use of the
-% \class{memoir} class:
+% Th redefinition of the |headings| and |myhheadings| page styles are the
+% most useful ones because the typeset text is overlaid on the red drawing
+% and the user can see the effect of the canonical layout in the style of
+% a typeset page.
% \begin{macrocode}
-}% end of test on the class being used
+\if at twoside
+ \def\ps at headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\@CLdrawing\thepage\hfil{\slshape\leftmark}}%
+ \def\@oddhead{\@CLdrawing{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\chaptermark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c at secnumdepth >\m at ne
+ \if at mainmatter
+ \@chapapp\ \thechapter. \ %
+ \fi
+ \fi
+ ##1}}{}}%
+ \def\sectionmark##1{%
+ \markright {\MakeUppercase{%
+ \ifnum \c at secnumdepth >\z@
+ \thesection. \ %
+ \fi
+ ##1}}}}
+\else
+ \def\ps at headings{%
+ \let\@oddfoot\@empty
+ \def\@oddhead{\@CLdrawing{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\chaptermark##1{%
+ \markright {\MakeUppercase{%
+ \ifnum \c at secnumdepth >\m at ne
+ \if at mainmatter
+ \@chapapp\ \thechapter. \ %
+ \fi
+ \fi
+ ##1}}}}
+\fi
% \end{macrocode}
+% The |myheadings| page style is much simpler, at least this is the
+% definition based on the standard \LaTeX\ class \class{book} code:
+% \begin{macrocode}
+\def\ps at myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\@CLdrawing\thepage\hfil{\slshape\leftmark}}%
+ \def\@oddhead{\@CLdrawing{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\chaptermark\@gobble
+ \let\sectionmark\@gobble
+ }
+
+% \end{macrocode}
%
-% Just for testing the number of characters in a line, the following
-% macros are provided. A couple of variables will be used |\CLaux|
-% and |\CLabcwidth|; |\CLabcwidth| will hold the current lowercase
-% alphabet length, while |\CLaux| will hold several values in succession.
-% The scratch variable |\CLcharcount| will receive the final result to be
-% printed out.
+% At this point we may close the argument of the \cs{AtEndPreamble}
+% command and the test on the use of the \class{memoir}~class.
+% \begin{macrocode}
+}}%
+% \end{macrocode}
+%\subsection{Service macros}
+% 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 counters |\count254|, |\count252|, and |count250| will
+% receive the final result to be printed out. \eTeX\ arithmetics will be
+% used throughout, and we know this is possible, since we already tested
+% it at the very beginning.
%
% 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 of 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 typography shop generally wants to know a good
-% estimate before the source \TeX\ files are finished.
+% macro typesets the 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 users may easily estimate the number of pages of their
+% document; of course they must make a certain allowance for the front
+% and back matter pages, so that they can evaluate the total
+% amount of signatures of the whole typeset document; of course, by
+% typesetting it with any engine based on \LaTeX\ they know exactly the
+% number of pages of the final document, but typographers like
+% to know a good estimate before the source \TeX\ files are finished.
% \begin{macrocode}
\newlength\abc at width
-\settowidth\abc at width{abcdefghijklmnopqrstuvwxyz}%
-\edef\CLcharcount{\fpeval{round(\textwidth * 26 / \abc at width,0)}}
\newcommand*\currentfontletters{%
+\settowidth\abc at width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
+\dimen0=\dimexpr \textwidth * \dimen0 / \abc at width \relax
+\count254=\numexpr \dimen0 / \p@ \relax
\par The number of characters in one text line with the current font is
- \CLcharcount.\par}
-%
+ \the\count254.\par}
+
\newcommand*\charactersperpage{%
-\edef\CLlinesperpage{\fpeval{round(\textheight / \baselineskip,0)}}
-\edef\CLcharsperpage{%
- \fpeval{\CLcharcount * \CLlinesperpage}}
-\begin{quote} The average number of characters in one text line
- with the current font is \CLcharcount;
- this text block contains \CLlinesperpage\ lines;
+\settowidth\abc at width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
+\dimen0=\dimexpr \textwidth * \dimen0 / \abc at width \relax
+\count254=\numexpr \dimen0 / \p@ \relax
+\count252=\numexpr \textheight / \baselineskip \relax
+\count250=\numexpr \count252 * \count254\relax
+\quote The 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
- \CLcharsperpage.\par
- This information may be useful to evaluate the total number
- of pages in a document.
-\end{quote}}
-
+ \the\count250.\par
+ This might be used to estimate the total number of pages of
+ a document.
+\endquote}
% \end{macrocode}
-% Using these macros, we can type out the information relative to this
-% specific documentation.
-% \charactersperpage
+%
+%{\centering\color{red} \LARGE Happy \LaTeX{ing} \par}
+% \Finale
%\iffalse
%</package>
-%<*txt>
%\fi
-%
-% \begin{macrocode}
-Canoniclayout is a small extension package that allows to design
-a canonic layout based on the great circle inscribed within the
-page and tangent to the horizontal sides of the type block rectangle.
-The margins reflect the trimmed page shape ratio, therefore the
-type block principal diagonal coincides with the corresponding
-page diagonal; this layout is especially good for ISO page shapes
-but it can be used with many other traditional book page shapes.
-
-This new version is completely new, in the sense that its code
-calculations are performed by means of the 2018 xfp package
-facilities. For this reason it cannot be used with any TeX
-distribution preceding the year 2018 and updated by the end of
-that year; should this happen this very package aborts its own
-input while advising the user by means of an Error Message.
-
-This work is released under the Latex Project Public Licence
-v.1.3c. The LPPL is distributed with any TeX system distribution
-and can be found also in any CTAN archive.
-
-Claudio Beccari 2020
-claudio dot beccari at gmail dot com
-% \end{macrocode}
-%\iffalse
-%</txt>
-%\fi
-% \Finale
% \endinput
%
+%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Modified: trunk/Master/texmf-dist/tex/latex/canoniclayout/canoniclayout.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/canoniclayout/canoniclayout.sty 2022-11-01 19:51:20 UTC (rev 64888)
+++ trunk/Master/texmf-dist/tex/latex/canoniclayout/canoniclayout.sty 2022-11-01 19:51:57 UTC (rev 64889)
@@ -7,7 +7,7 @@
%% canoniclayout.dtx (with options: `package')
%% ______________________________________________________
%% The canoniclayout package for LaTeX
-%% Copyright (C) 2010-2020 Claudio Beccari
+%% Copyright (C) 2010 Claudio Beccari
%% All rights reserved
%%
%% License information appended
@@ -14,19 +14,23 @@
%%
\NeedsTeXFormat{LaTeX2e}[2009/01/01]
\ProvidesPackage{canoniclayout}%
- [2020-04-09 v.0.5 Canonic layout circumscribed to a circle]
+ [2022/11/01 v.1.0 Text block height equal to paper width]
+\IfFormatAtLeastTF{2022/06/01}{}{%
+\PackageWarning{canoniclayout}{%
+The format file is not suited\MessageBreak
+for working with this package.\MessageBreak
+This package is being skipped and \MessageBreak
+its functionalities are not available
+\expandafter\endinput}
+\fi}
-\IfFileExists{xfp.sty}{\RequirePackage{xfp}}{%
-\PackageError{canoniclayout}{\MessageBreak%
-The xfp package is not available\MessageBreak
-and this package cannot work without\MessageBreak}{
-Reading of this package is skipped\MessageBreak
-Expect a different layout form the canonical one\Messagebreak
-Update your TeX system installation!\expandafter\endinput}}
\@ifclassloaded{memoir}{%
-\edef\CLshape{\fpeval{\paperwidth / \paperheight}}
-\edef\CLinvshape{\fpeval{1/\CLshape}}
+\AtBeginDocument{%
+\dimen@=\dimexpr \p@ * \paperwidth / \paperheight\relax
+\edef\CLshape{\strip at pt\dimen@}
+\dimen@=\dimexpr \p@ * \p@ / \dimen@\relax
+\edef\CLinvshape{\strip at pt\dimen@}
\textheight=\paperwidth
\settypeblocksize{\textheight}{*}{\CLshape}
\setlrmargins{*}{*}{\CLinvshape}
@@ -34,54 +38,160 @@
\setmarginnotes{7pt}{\dimexpr \foremargin-3\marginparsep}{\onelineskip}
\checkandfixthelayout
-}{%
-\newlength\innermargin
-\newlength\outermargin
-\newlength\uppermargin
-\edef\CLpageratio{\fpeval{\paperwidth/\paperheight}} % x
-\edef\CLlargeratio{\fpeval{(1-\CLpageratio)/(1+\CLpageratio)}} % y
-\edef\CLsmallratio{\fpeval{\CLpageratio*\CLlargeratio}} % z
-\textheight\paperwidth
-\textwidth=\CLpageratio\textheight
-\innermargin=\CLsmallratio\paperwidth
-\outermargin=\CLlargeratio\paperwidth
-\uppermargin=\CLsmallratio\paperheight
-\marginparwidth=\fpeval{0.8\outermargin-\marginparsep}pt
-\evensidemargin=\fpeval{\outermargin -(1in)}pt
-\oddsidemargin=\fpeval{\innermargin-(1in)}pt
-\topmargin=\fpeval{\uppermargin-(1in)-\headheight-\headsep}pt
-\normalfont\textheight=%
-\fpeval{round((\textheight - \topskip)/\baselineskip, 0) * \baselineskip + \topskip}pt%
-\normalbaselineskip\baselineskip
-}% end of test on the class being used
+}}% memoir class end code; start code for standard classes
+{\RequirePackage{etoolbox,pict2e}%
+\AtEndPreamble{%
+\unless\ifcsname color\endcsname \RequirePackage{xcolor}\fi
+\newlength\CLinner \newlength\CLouter % new length registers
+\newlength\CLtop \newlength\CLbottom % other new registers
+\edef\CLx{\fpeval{\paperwidth/\paperheight}}% equation 1
+\edef\CLxx{\fpeval{(1-\CLx)/(1+\CLx)}}% for equations 2, 3, 4, 5, 9
+\CLinner=\fpeval{\paperwidth*\CLx*\CLxx}\p@% equation 2
+\CLouter=\fpeval{\paperwidth*\CLxx}\p@% equation 3
+\CLtop=\fpeval{\paperheight*\CLx*\CLxx}\p@% equation 4
+\CLbottom=\fpeval{\paperheight*\CLxx}\p@% equation 5
+\textwidth=\fpeval{\CLx*\paperwidth}\p@% equation 6
+\textheight=\paperwidth% equation 7
+\edef\CLcirclecenterX{\fpeval{\paperwidth/2}}% equation 8
+\edef\CLcirclecenterY{\fpeval{\CLxx*\paperheight+\paperwidth/2}}% eq. 9
+\let\CLcircleradius\CLcirclecenterX% equation 10
+\edef\CLcirclediameter{\strip at pt\paperwidth}%
+\let\CLpageW\CLcirclediameter
+
+\normalsize
+\headheight=\baselineskip
+\headsep=\baselineskip
+\footskip=2\baselineskip
+\marginparsep=0.1\CLouter\relax
+\marginparwidth=0.8\CLouter\relax
+\topmargin=\dimexpr\CLtop-\headsep-\headheight-1in\relax
+\oddsidemargin=\dimexpr\CLinner-1in \relax
+\evensidemargin=\dimexpr\CLouter-1in \relax
+
+\edef\CLdiagX{\strip at pt\paperwidth}% diagonal horizontal component
+\edef\CLdiagY{\strip at pt\paperheight}% diagonal vertical component
+\let\@CLdrawing\relax% initially drawings are turned off
+\edef\CLlly{-\expandafter\strip at pt% both pages corner ordinate
+ \dimexpr\paperheight-\CLtop+\headsep}%
+\edef\CLllLx{-\strip at pt\CLouter}% lower left left-page corner abscissa
+\edef\CLllRx{-\strip at pt\CLinner}% lower left right-page corner abscissa
+
+\newcommand*\CLstartdrawings{\let\@CLdrawing\CLdrawing}
+\newcommand*\CLstopdrawings{\let\@CLdrawing\relax}
+
+\newcommand*\CLdrawing{%
+ \begin{picture}(0,0)\color{red}%
+ \unitlength=\p@
+ \if at twoside
+ \ifodd\value{page}%
+ \put(\CLllRx,\CLlly){% right page: displaces the origin to the
+ \put(\CLcirclecenterX,\CLcirclecenterY){\circle{\CLcirclediameter}}
+ \put(\CLpageW,0){\line(-\CLdiagX,\CLdiagY){\CLpageW}}
+ }
+ \else
+ \put(\CLllLx,\CLlly){% left page: displaces the origin to the
+ \put(\CLcirclecenterX,\CLcirclecenterY){\circle{\CLcirclediameter}}
+ \put(0,0){\line(\CLdiagX,\CLdiagY){\CLpageW}}
+ }
+ \fi
+ \else
+ \put(\CLllRx,\CLlly){% one side: displaces the origin to the
+ \put(\CLcirclecenterX,\CLcirclecenterY){\circle{\CLcirclediameter}}
+ \put(\CLcirclecenterX,\CLcirclecenterY){%
+ \put(0,0){\line(\CLdiagX,\CLdiagY){\CLcircleradius}}
+ \put(0,0){\line(-\CLdiagX,-\CLdiagY){\CLcircleradius}}
+ }
+ }
+ \fi
+ \end{picture}
+}
+\def\ps at empty{%
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\makebox[\textwidth][l]{{\@CLdrawing}}}\let\@oddfoot\@empty
+ \def\@evenheadhead{\makebox[\textwidth][l]{{\@CLdrawing}}}
+ \let\@evenfoot\@empty}
+\def\ps at plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\makebox[\textwidth][l]{{\@CLdrawing}}}
+ \def\@oddfoot{\reset at font\hfil\thepage\hfil}
+ \def\@evenheadhead{\makebox[\textwidth][l]{{\@CLdrawing}}}
+ \let\@evenfoot\@oddfoot}
+\if at twoside
+ \def\ps at headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\@CLdrawing\thepage\hfil{\slshape\leftmark}}%
+ \def\@oddhead{\@CLdrawing{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\chaptermark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c at secnumdepth >\m at ne
+ \if at mainmatter
+ \@chapapp\ \thechapter. \ %
+ \fi
+ \fi
+ ##1}}{}}%
+ \def\sectionmark##1{%
+ \markright {\MakeUppercase{%
+ \ifnum \c at secnumdepth >\z@
+ \thesection. \ %
+ \fi
+ ##1}}}}
+\else
+ \def\ps at headings{%
+ \let\@oddfoot\@empty
+ \def\@oddhead{\@CLdrawing{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\chaptermark##1{%
+ \markright {\MakeUppercase{%
+ \ifnum \c at secnumdepth >\m at ne
+ \if at mainmatter
+ \@chapapp\ \thechapter. \ %
+ \fi
+ \fi
+ ##1}}}}
+\fi
+\def\ps at myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\@CLdrawing\thepage\hfil{\slshape\leftmark}}%
+ \def\@oddhead{\@CLdrawing{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\chaptermark\@gobble
+ \let\sectionmark\@gobble
+ }
+
+}}%
\newlength\abc at width
-\settowidth\abc at width{abcdefghijklmnopqrstuvwxyz}%
-\edef\CLcharcount{\fpeval{round(\textwidth * 26 / \abc at width,0)}}
\newcommand*\currentfontletters{%
+\settowidth\abc at width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
+\dimen0=\dimexpr \textwidth * \dimen0 / \abc at width \relax
+\count254=\numexpr \dimen0 / \p@ \relax
\par The number of characters in one text line with the current font is
- \CLcharcount.\par}
+ \the\count254.\par}
+
\newcommand*\charactersperpage{%
-\edef\CLlinesperpage{\fpeval{round(\textheight / \baselineskip,0)}}
-\edef\CLcharsperpage{%
- \fpeval{\CLcharcount * \CLlinesperpage}}
-\begin{quote} The average number of characters in one text line
- with the current font is \CLcharcount;
- this text block contains \CLlinesperpage\ lines;
+\settowidth\abc at width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
+\dimen0=\dimexpr \textwidth * \dimen0 / \abc at width \relax
+\count254=\numexpr \dimen0 / \p@ \relax
+\count252=\numexpr \textheight / \baselineskip \relax
+\count250=\numexpr \count252 * \count254\relax
+\quote The 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
- \CLcharsperpage.\par
- This information may be useful to evaluate the total number
- of pages in a document.
-\end{quote}}
+ \the\count250.\par
+ This might be used to estimate the total number of pages of
+ a document.
+\endquote}
-
+%% Copyright 2010 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 consists of this file canoniclayout.dtx, a README.txt file
+%% 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.
%%
-%% This work is "maintained"
-%%
%%
%% End of file `canoniclayout.sty'.
More information about the tex-live-commits
mailing list.