diff options
Diffstat (limited to 'macros/latex/required/tools/layout.dtx')
-rw-r--r-- | macros/latex/required/tools/layout.dtx | 1025 |
1 files changed, 1025 insertions, 0 deletions
diff --git a/macros/latex/required/tools/layout.dtx b/macros/latex/required/tools/layout.dtx new file mode 100644 index 0000000000..40f790aed9 --- /dev/null +++ b/macros/latex/required/tools/layout.dtx @@ -0,0 +1,1025 @@ +% \iffalse meta-comment +% +% Copyright 1993-2014 +% +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the Standard LaTeX `Tools Bundle'. +% ------------------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% The list of all files belonging to the LaTeX `Tools Bundle' is +% given in the file `manifest.txt'. +% +% \fi +%\iffalse +% This file is built for \LaTeXe, so we make sure an error is +% generated when it is used with another format +%<*dtx> +\ProvidesFile{layout.dtx} +%</dtx> +%<+package>\NeedsTeXFormat{LaTeX2e} +%<+package>\ProvidesPackage{layout} +%<+driver>\ProvidesFile{layout.drv} +%\ProvidesFile{layout.dtx} + [2014/10/28 v1.2c Show layout parameters] +% +% A short driver is provided that can be extracted if necessary by +% the \textsf{DocStrip} program provided with \LaTeXe. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} + +\usepackage{layout} + +\newcommand\Lopt[1]{\textsf{#1}} +\pagestyle{myheadings} +\DisableCrossrefs +\begin{document} +\DocInput{layout.dtx} +\end{document} +%</driver> +% \end{macrocode} +%\fi +% \changes{v1.1c}{1994/07/13}{Moved Identification code to the front +% and removed the permanent use of \cs{filedate} and friends} +% \changes{v1.1d}{1994/09/08}{Stored texts in control sequences to +% allow other languages} +% +% \GetFileInfo{layout.dtx} +% \title{Displaying page layout variables} +% \author{Kent McPherson a.o.\thanks{Converted for \LaTeXe\ by +% Johannes Braams and modified by Hideo Umeki}} +% \date{\filedate} +% +% \markboth{layout package version \fileversion\space as of \filedate} +% {layout package version \fileversion\space as of \filedate} +% +% \MaintainedByLaTeXTeam{tools} +% \maketitle +% +% \section{Introduction} +% +% This \LaTeXe\ package is a reimplementation of +% \texttt{layout.sty} by Kent McPherson. It defines the command +% |\layout| which produces an overview of the layout of the current +% document. The command |\layout*| recomputes the values it uses to +% produce the overview. +% +% The figure on the next page shows the output of the |\layout| +% command for this document. +% +% \begin{figure}[p] +% \layout +% \end{figure} +% +% \StopEventually{} +% +% \section{The implementation} +% +% \changes{v1.1b}{1994/03/23}{removed the \cs{wlog} as +% \cs{ProvidesPackage} does that now} +% \changes{v1.1d}{1994/09/08}{Added language options dutch and +% english} +% +% This package prints a figure to illustrate the layout that is +% implemented by the document class. In the figure several words +% appear. They are stored in control sequences to be able to select +% a different language. +% \changes{v1.1e}{1994/10/29}{The dutch texts should be one word.} +% \changes{v1.1f}{1995/03/14}{Added \cs{notshown}} +% \changes{v1.1f}{1995/03/14}{Added option french} +% \changes{v1.1j}{1995/10/29}{Added the options spanish, brazilian and +% portuguese} +% \changes{v1.1k}{1995/11/23}{Documentation fixes} +% \changes{v1.2}{1998/04/13}{Redesign of the output by Hideo Umeki} +% \changes{v1.2c}{2000/09/21}{Added option german} +% \changes{v1.2c}{2000/09/25}{Added option for italian by Claudio Beccari} +% \begin{macrocode} +%<*package> +\DeclareOption{dutch}{% + \def\Headertext{Kopregel} + \def\Bodytext{Broodtekst} + \def\Footertext{Voetregel} + \def\MarginNotestext{Marge\\Notities} + \def\oneinchtext{een inch} + \def\notshown{niet getoond} + } +\DeclareOption{german}{% + \def\Headertext{Kopfzeile} + \def\Bodytext{Haupttext} + \def\Footertext{Fu{\ss}zeile} + \def\MarginNotestext{Rand-\\ notizen} + \def\oneinchtext{ein Zoll} + \def\notshown{ohne Abbildung} + } +\DeclareOption{ngerman}{\ExecuteOptions{german}} +\DeclareOption{english}{% + \def\Headertext{Header} + \def\Bodytext{Body} + \def\Footertext{Footer} + \def\MarginNotestext{Margin\\Notes} + \def\oneinchtext{one inch} + \def\notshown{not shown} + } +\DeclareOption{french}{% + \def\Headertext{Ent\^{e}te} + \def\Bodytext{Corps} + \def\Footertext{Pied de page} + \def\MarginNotestext{Marge\\Notes} + \def\oneinchtext{un pouce} + \def\notshown{non affich\'{e}} + } +\DeclareOption{francais}{\ExecuteOptions{french}} +\DeclareOption{spanish}{% + \def\Headertext{Encabezamiento} + \def\Bodytext{Cuerpo} + \def\Footertext{Pie de p\'agina} + \def\MarginNotestext{Notas\\ Marginales} + \def\oneinchtext{una pulgada} + \def\notshown{no mostradas} + } +\DeclareOption{portuguese}{% + \def\Headertext{Cabe\c{c}alho} + \def\Bodytext{Corpo} + \def\Footertext{Rodap\'e} + \def\MarginNotestext{Notas\\ Marginais} + \def\oneinchtext{uma polegada} + \def\notshown{n\~ao mostradas} + } +\DeclareOption{brazilian}{% + \def\Headertext{Cabe\c{c}alho} + \def\Bodytext{Corpo} + \def\Footertext{Rodap\'e} + \def\MarginNotestext{Notas\\ Marginais} + \def\oneinchtext{uma polegada} + \def\notshown{n\~ao mostradas} + } +\DeclareOption{italian}{% + \def\Headertext{Testatina} + \def\Bodytext{Corpo} + \def\Footertext{Piedino} + \def\MarginNotestext{Note\\ Marginali} + \def\oneinchtext{un pollice} + \def\notshown{non mostrato} + } +% \end{macrocode} +% +% This package has an option \Lopt{verbose}. Using it will make the +% command |\layout| type some of the parameters on the terminal. +% \begin{macrocode} +\DeclareOption{verbose}{\let\LayOuttype\typeout} +\DeclareOption{silent}{\let\LayOuttype\@gobble} +% \end{macrocode} +% +% \changes{v1.1h}{1995/04/07}{Added the options \Lopt{integers} +% (default) and \Lopt{reals}} +% +% The normal behaviour of this package when showing the values of +% the parameters is to truncate them. However, if you want to see +% the real parameter values you can use the option \Lopt{reals} to +% get that effect. +% \changes{v1.1i}{1995/06/25}{\LaTeX\ release 1995/06/01 no longer +% needs double hashmarks in the argument of \cs{DeclareOption}} +% \begin{macrocode} +\def\lay@value{} +\DeclareOption{integers}{% + \renewcommand*{\lay@value}[2]{% + \expandafter\number\csname #1@#2\endcsname pt}} +\DeclareOption{reals}{% + \renewcommand*{\lay@value}[2]{\the\csname #2\endcsname}} +% \end{macrocode} +% +% The default language is English, the default mode is +% \Lopt{silent} and the default way of showing parameter values is +% to use integers. +% \begin{macrocode} +\ExecuteOptions{english,silent,integers} +\ProcessOptions +% \end{macrocode} +% +% \begin{macro}{\LayOutbs} +% Define |\LayOutbs| to produce a backslash. We use a definition +% which also works with OT1 fonts. +% \changes{v1.2b}{1998/06/21}{Renamed \cs{bs} to avoid possible conflicts +% with other packages} +% \begin{macrocode} +\newcommand\LayOutbs{} +\chardef\LayOutbs`\\ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ConvertToCount} +% This macro stores the value of a \emph{length} register in a +% \emph{count} register. +% \begin{macrocode} +\def\ConvertToCount#1#2{% +% \end{macrocode} +% First copy the value +% \begin{macrocode} + #1=#2 +% \end{macrocode} +% Then divide it by 65536. +% \begin{macrocode} + \divide #1 by 65536} +% \end{macrocode} +% The result of this is that the \emph{count} register holds the +% value of the \emph{length} register in points. +% \end{macro} +% +% \begin{macro}{\SetToHalf} +% \begin{macro}{\SetToQuart} +% Small macros used in computing positions. +% \begin{macrocode} +\def\SetToHalf#1#2{#1=#2\relax\divide#1by\tw@} +\def\SetToQuart#1#2{#1=#2\relax\divide#1by4} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Identify} +% A small macro used in identifying dimensions. +% \begin{macrocode} +\def\Identify#1{% + \put(\PositionX,\PositionY){\circle{20}} + \put(\PositionX,\PositionY){\makebox(0,0){\tiny #1}} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\InsideHArrow} +% This macro is used to produce two horizontal arrows inside a box. +% The argument gives the width of the box. +% \changes{v1.1c}{1994/07/14}{Added check for a negative arrow length} +% \begin{macrocode} +\def\InsideHArrow#1{{% + \ArrowLength = #1 + \divide\ArrowLength by \tw@ + \advance\ArrowLength by -10 + \advance\PositionX by -10 + \ifnum\ArrowLength<\z@ + \put(\PositionX,\PositionY){\vector(1,0){-\ArrowLength}} + \advance\PositionX by 20 + \put(\PositionX,\PositionY){\vector(-1,0){-\ArrowLength}} + \else + \put(\PositionX,\PositionY){\vector(-1,0){\ArrowLength}} + \advance\PositionX by 20 + \put(\PositionX,\PositionY){\vector(+1,0){\ArrowLength}} + \fi +}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\InsideVArrow} +% This macro is used to produce two vertical arrows inside a box. +% The argument gives the height of the box. +% \begin{macrocode} +\def\InsideVArrow#1{{% + \ArrowLength = #1 + \divide\ArrowLength by \tw@ + \advance\ArrowLength by -10 + \advance\PositionY by -10 + \put(\PositionX,\PositionY){\vector(0,-1){\ArrowLength}} + \advance\PositionY by 20 + \put(\PositionX,\PositionY){\vector(0,+1){\ArrowLength}} +}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\OutsideHArrow} +% This macro is used to produce two horizontal arrows to delimit a +% length. The first argument is the position for the right arrow, +% the second argument gives the length and the third specifies the +% length of the arrows. +% \begin{macrocode} +\def\OutsideHArrow#1#2#3{{% + \PositionX = #1 + \advance\PositionX by #3 + \put(\PositionX,\PositionY){\vector(-1,0){#3}} + \PositionX = #1 \advance\PositionX-#2 + \advance\PositionX by -#3 + \put(\PositionX,\PositionY){\vector(+1,0){#3}} +}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\OutsideVArrow} +% This macro is used to produce two vertical arrows to delimit a +% length. The first argument is the position for the lower arrow, +% the second argument gives the length and the third and fourth +% specify the lenghts of the lower and upper arrow. +% \begin{macrocode} +\def\OutsideVArrow#1#2#3#4{{% + \PositionY = #1 + \advance\PositionY by -#3 + \put(\PositionX,\PositionY){\vector(0,+1){#3}} + \PositionY = #1 + \advance\PositionY#2 + \advance\PositionY#4 + \put(\PositionX,\PositionY){\vector(0,-1){#4}} +}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Show} +% \changes{v1.1g}{1995/04/03}{Simplified the definition, now show +% complete value} +% \changes{v1.1h}{1995/04/07}{Use \cs{lay@value} to show the value +% because of the option which decides which of two ways of doing it +% should be used} +% +% Macro used in the table that shows the setting of the parameters. +% \begin{macrocode} +\def\Show#1#2{\LayOutbs #2 = \lay@value{#1}{#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Type} +% \changes{v1.1g}{1995/04/03}{Simplified the definition, now show +% complete value} +% \changes{v1.1h}{1995/04/07}{Use \cs{lay@value} to show the value +% because of the option which decides which of two ways of doing it +% should be used} +% \changes{v1.2b}{1998/06/21}{Renamed \cs{type} to \cs{LayOuttype} +% to avoid possible conflicts with other packages} +% +% Macro used to show a setting of a parameter on the terminal. +% \begin{macrocode} +\def\Type#1#2{% + \LayOuttype{#2 = \lay@value{#1}{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\oneinch} +% A constant, giving the length of an inch in points (approximately) +% \begin{macrocode} +\newcount\oneinch +\oneinch=72 +% \end{macrocode} +% \end{macro} +% +% Because the overview of the layout is produced in a figure +% environment we need to allocate a number of counters that are +% used to store the values of various dimensions. +% +% \begin{macro}{\cnt@paperwidth} +% \begin{macro}{\cnt@paperheight} +% The dimensions of the paper +% \begin{macrocode} +\newcount\cnt@paperwidth +\newcount\cnt@paperheight +\ConvertToCount\cnt@paperwidth\paperwidth +\ConvertToCount\cnt@paperheight\paperheight +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cnt@hoffset} +% \begin{macro}{\cnt@voffset} +% the offsets, +% \begin{macrocode} +\newcount\cnt@hoffset +\newcount\cnt@voffset +\ConvertToCount\cnt@hoffset\hoffset +\ConvertToCount\cnt@voffset\voffset +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cnt@textheight} +% \begin{macro}{\cnt@textwidth} +% dimensions of the text area, +% \begin{macrocode} +\newcount\cnt@textheight +\newcount\cnt@textwidth +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cnt@topmargin} +% \begin{macro}{\cnt@oddsidemargin} +% \begin{macro}{\cnt@evensidemargin} +% margins, +% \begin{macrocode} +\newcount\cnt@topmargin +\newcount\cnt@oddsidemargin +\newcount\cnt@evensidemargin +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cnt@headheight} +% \begin{macro}{\cnt@headsep} +% dimensions of the running heads, +% \begin{macrocode} +\newcount\cnt@headheight +\newcount\cnt@headsep +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cnt@marginparsep} +% \begin{macro}{\cnt@marginparwidth} +% \begin{macro}{\cnt@marginparpush} +% marginal paragraphs, +% \begin{macrocode} +\newcount\cnt@marginparsep +\newcount\cnt@marginparwidth +\newcount\cnt@marginparpush +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cnt@footskip} +% the distance between the running footers and the text, +% \begin{macrocode} +\newcount\cnt@footskip +% \end{macrocode} +% \end{macro} +% and the height of the footers, which is needed here to display a +% box, but which isn't used by \LaTeX. +% \begin{macro}{\fheight} +% \begin{macrocode} +\newcount\fheight +\fheight=12 +% \end{macrocode} +% \end{macro} +% +% Apart from integer representations of the page layout parameters +% we also need registers to store reference values in. +% +% \begin{macro}{\ref@top} +% The position of the top of the `printable area' is +% one inch below the top of the paper by default. The value of +% |\ref@top| is relative to the lower left corner of the picture +% environment that will be used. +% +% \begin{macrocode} +\newcount\ref@top +\ref@top=\cnt@paperheight \advance\ref@top by -\oneinch +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ref@hoffset} +% \begin{macro}{\ref@voffset} +% For the offsets, +% \begin{macrocode} +\newcount\ref@hoffset +\newcount\ref@voffset +% \end{macrocode} +% The |\hoffset| and |\voffset| values are added to the default +% offset of one inch. +% \begin{macrocode} +\ref@hoffset=\cnt@hoffset \advance\cnt@hoffset by \oneinch +\ref@voffset=\cnt@voffset +% \end{macrocode} +% +% |\cnt@voffset| is converted to be relative to the origin of the +% picture. +% \begin{macrocode} +\cnt@voffset=\ref@top +\advance\cnt@voffset by -\ref@voffset +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ref@head} +% and the text areas, running heads, +% \begin{macrocode} +\newcount\ref@head +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ref@body} +% body of the text +% \begin{macrocode} +\newcount\ref@body +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ref@foot} +% and running footers. +% \begin{macrocode} +\newcount\ref@foot +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ref@margin} +% \begin{macro}{\ref@marginwidth} +% \begin{macro}{\ref@marginpar} +% These are different for even and odd pages, so they are computed +% by |\layout|. +% \begin{macrocode} +\newcount\ref@margin +\newcount\ref@marginwidth +\newcount\ref@marginpar +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% The following are a number of scratch registers, used in the +% positioning of the various pices of the picture. +% \begin{macrocode} +\newcount\Interval +\newcount\ExtraYPos +\newcount\PositionX +\newcount\PositionY +\newcount\ArrowLength +% \end{macrocode} +% +% \begin{macro}{\lay@getvalues} +% \changes{v1.1j}{1995/10/30}{Added macro to compute values at later +% time} +% All values that might change during the document are computed by +% calling the macro |\lay@getvalues|. By default this macro is +% executed at |\begin{document}|. +% \begin{macrocode} +\def\lay@getvalues{% + \ConvertToCount\cnt@textheight\textheight + \ConvertToCount\cnt@textwidth\textwidth + \ConvertToCount\cnt@topmargin\topmargin + \ConvertToCount\cnt@oddsidemargin\oddsidemargin + \ConvertToCount\cnt@evensidemargin\evensidemargin + \ConvertToCount\cnt@headheight\headheight + \ConvertToCount\cnt@headsep\headsep + \ConvertToCount\cnt@marginparsep\marginparsep + \ConvertToCount\cnt@marginparwidth\marginparwidth + \ConvertToCount\cnt@marginparpush\marginparpush + \ConvertToCount\cnt@footskip\footskip + \ref@head=\ref@top + \advance\ref@head by -\ref@voffset + \advance\ref@head by -\cnt@topmargin + \advance\ref@head by -\cnt@headheight + \ref@body=\ref@head + \advance\ref@body by -\cnt@headsep + \advance\ref@body by -\cnt@textheight + \ref@foot=\ref@body + \advance\ref@foot by -\cnt@footskip + } +\AtBeginDocument{\lay@getvalues} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\computevalues} +% +% \begin{macro}{\layout} +% \begin{macro}{\layout*} +% The command |\layout| makes the picture and table that display +% the current settings of the layout parameters. +% +% \changes{v1.1b}{1994/03/23}{Produce two pages in twoside mode} +% \changes{v1.1j}{1995/10/30}{Added \cs{layout*}} +% \begin{macrocode} +\newcommand\layout{% + \@ifstar{\lay@getvalues\lay@xlayout}{\lay@xlayout}} +\def\lay@xlayout{% + \lay@layout + \if@twoside + \lay@layout + \fi} +% \end{macrocode} +% +% \begin{macro}{\lay@layout} +% The internal macro |\lay@layout| does all the dirty work. +% \begin{macrocode} +\newcommand\lay@layout{% + \thispagestyle{empty} +% \end{macrocode} +% +% The actions of |\layout| depend on the pagestyle. +% \begin{macrocode} + \if@twoside + \ifodd\count\z@ +% \end{macrocode} +% +% Here we deal with an odd page in the twosided case. +% +% \begin{macrocode} + \typeout{Two-sided document style, odd page.} +% \end{macrocode} +% +% So we compute |\ref@marginwidth|, |\ref@marginpar| and +% |\ref@margin|. +% \changes{v1.1}{1994/02/23}{Added check for reversemargin} +% \begin{macrocode} + \ref@marginwidth=\cnt@oddsidemargin + \ref@marginpar=\oneinch + \advance\ref@marginpar by \ref@hoffset + \advance\ref@marginpar by \cnt@oddsidemargin + \ref@margin\ref@marginpar + \if@reversemargin + \advance\ref@marginpar by -\cnt@marginparsep + \advance\ref@marginpar by -\cnt@marginparwidth + \else + \advance\ref@marginpar by \cnt@textwidth + \advance\ref@marginpar by \cnt@marginparsep + \fi +% \end{macrocode} +% +% \begin{macrocode} + \else +% \end{macrocode} +% +% Here we deal with an even page in the twosided case. +% +% \begin{macrocode} + \typeout{Two-sided document style, even page.} +% \end{macrocode} +% +% So we compute |\ref@marginwidth|, |\ref@marginpar| and +% |\ref@margin|. +% \changes{v1.1}{1994/02/23}{Added check for reversemargin} +% \begin{macrocode} + \ref@marginwidth=\cnt@evensidemargin + \ref@marginpar=\oneinch + \advance\ref@marginpar by \ref@hoffset + \advance\ref@marginpar by \cnt@evensidemargin + \ref@margin\ref@marginpar + \if@reversemargin + \advance\ref@marginpar by \cnt@textwidth + \advance\ref@marginpar by \cnt@marginparsep + \else + \advance\ref@marginpar by -\cnt@marginparsep + \advance\ref@marginpar by -\cnt@marginparwidth + \fi +% \end{macrocode} +% +% \begin{macrocode} + \fi + \else +% \end{macrocode} +% +% Finally we the case for single sided printing. +% +% \changes{v1.1}{1994/02/23}{Added check for reversemargin} +% \begin{macrocode} + \typeout{One-sided document style.} + \ref@marginwidth=\cnt@oddsidemargin + \ref@marginpar=\oneinch + \advance\ref@marginpar by \ref@hoffset + \advance\ref@marginpar by \cnt@oddsidemargin + \ref@margin\ref@marginpar + \if@reversemargin + \advance\ref@marginpar by -\cnt@marginparsep + \advance\ref@marginpar by -\cnt@marginparwidth + \else + \advance\ref@marginpar by \cnt@textwidth + \advance\ref@marginpar by \cnt@marginparsep + \fi + \fi +% \end{macrocode} +% +% +% Now we begin the picture environment; dividing all the lengths by +% two is done by setting |\unitlength| to \texttt{0.5pt} +% \begin{macrocode} + \setlength{\unitlength}{.5pt} + \begin{picture}(\cnt@paperwidth,\cnt@paperheight) + \centering + \thicklines +% \end{macrocode} +% +% First we have the pagebox and reference lines, +% +% \begin{macrocode} + \put(0,0){\framebox(\cnt@paperwidth,\cnt@paperheight){\mbox{}}} + \put(0,\cnt@voffset){\dashbox{10}(\cnt@paperwidth,0){\mbox{}}} + \put(\cnt@hoffset,0){\dashbox{10}(0,\cnt@paperheight){\mbox{}}} +% \end{macrocode} +% +% then the header, +% +% \begin{macrocode} + \put(\ref@margin,\ref@head){% + \framebox(\cnt@textwidth,\cnt@headheight)% + {\footnotesize\Headertext}} +% \end{macrocode} +% +% the body of the text area, +% +% \begin{macrocode} + \put(\ref@margin,\ref@body){% + \framebox(\cnt@textwidth,\cnt@textheight){\Bodytext}} +% \end{macrocode} +% +% the footer +% +% \begin{macrocode} + \put(\ref@margin,\ref@foot){% + \framebox(\cnt@textwidth,\fheight){\footnotesize\Footertext}} +% \end{macrocode} +% +% and the space for marginal notes. +% +% \begin{macrocode} + \put(\ref@marginpar,\ref@body){% + \framebox(\cnt@marginparwidth,\cnt@textheight)% + {\footnotesize\shortstack{\MarginNotestext}}} +% \end{macrocode} +% +% Then we start putting in `arrows' to mark the various parameters. +% From here we use |\thinlines|. +% \begin{macrocode} + \thinlines +% \end{macrocode} +% +% |\PositionX| and |\PositionY| will be the coordinates of the center of +% the arrow displaying |\textwidth|. +% \begin{macrocode} + \SetToHalf\PositionX\cnt@textwidth + \advance\PositionX by \ref@margin +% \end{macrocode} +% The arrow should be a bit above the bottom of the `body box'. +% \begin{macrocode} + \PositionY = \ref@body + \advance\PositionY by 50 +% \end{macrocode} +% An identifying number is put here, in a circle. +% \begin{macrocode} + \Identify{8} +% \end{macrocode} +% Then the arrow is drawn. +% \begin{macrocode} + \InsideHArrow\cnt@textwidth +% \end{macrocode} +% +% Now the |\textheight| +% \begin{macrocode} + \SetToHalf\PositionY\cnt@textheight + \advance\PositionY by \ref@body +% \end{macrocode} +% +% The x-position of the arrow is at $4/5$ of the width of the `body +% box'. +% \begin{macrocode} + \PositionX = \cnt@textwidth + \divide\PositionX by 5 + \multiply \PositionX by 4 + \advance\PositionX by \ref@margin +% \end{macrocode} +% +% An identifying number is put here, in a circle. +% \begin{macrocode} + \Identify{7} + \InsideVArrow\cnt@textheight +% \end{macrocode} +% +% +% The |\hoffset|, +% \changes{v1.2}{1998/04/13}{\cs{PositionY} for label 1 is +% fixed at 50} +% \begin{macrocode} + \PositionY = 50 + \SetToHalf\PositionX\cnt@hoffset + \Identify{1} + \InsideHArrow\cnt@hoffset +% \end{macrocode} +% +% +% The width of the margin. +% \changes{v1.2}{1998/04/13}{The direction of the arrows should be +% switched by the sign of \cs{oddsidemargin}} +% \begin{macrocode} + \SetToQuart\PositionY\cnt@textheight + \advance\PositionY by \ref@body + \ifnum\ref@marginwidth > 0 + \OutsideHArrow\ref@margin\ref@marginwidth{20} + \PositionX = \cnt@hoffset + \else + \OutsideHArrow\cnt@hoffset{-\ref@marginwidth}{20} + \PositionX = \ref@margin + \fi + \advance\PositionX by -30 + \Identify{3} +% \end{macrocode} +% +% the |\marginparwidth|, +% \begin{macrocode} + \SetToQuart\PositionY\cnt@textheight + \advance\PositionY by \ref@body +% \end{macrocode} +% This arrow has to be bit below the one for the |\oddsidemargin| +% or\\ |\evensidemargin|. +% \begin{macrocode} + \advance\PositionY by 30 + \SetToHalf\PositionX\cnt@marginparwidth + \advance\PositionX by \ref@marginpar + \Identify{10} + \InsideHArrow\cnt@marginparwidth +% \end{macrocode} +% +% +% The |\marginparsep|, this depends on single or double sided +% printing. +% \begin{macrocode} + \advance\PositionY by 30 + \if@twoside +% \end{macrocode} +% +% Twosided mode, reversemargin; +% \changes{v1.1b}{1994/03/23}{\cs{OutSideHArrow} should be +% \cs{OutsideHArrow}} +% \changes{v1.2}{1998/04/13}{Added check for reversemargin} +% \begin{macrocode} + \if@reversemargin + \ifodd\count\z@ + \OutsideHArrow\ref@margin\cnt@marginparsep{20} + \PositionX = \ref@margin + \else + \OutsideHArrow\ref@marginpar\cnt@marginparsep{20} + \PositionX = \ref@marginpar + \fi + \else +% \end{macrocode} +% Not reversemargin; +% \begin{macrocode} + \ifodd\count\z@ + \OutsideHArrow\ref@marginpar\cnt@marginparsep{20} + \PositionX = \ref@marginpar + \else + \OutsideHArrow\ref@margin\cnt@marginparsep{20} + \PositionX = \ref@margin + \fi + \fi + \else +% \end{macrocode} +% +% Single sided mode. +% \changes{v1.2}{1998/04/13}{Added check for reversemargin} +% \begin{macrocode} + \if@reversemargin + \OutsideHArrow\ref@margin\cnt@marginparsep{20} + \PositionX = \ref@margin + \else + \OutsideHArrow\ref@marginpar\cnt@marginparsep{20} + \PositionX = \ref@marginpar + \fi + \fi +% \end{macrocode} +% \changes{v1.2}{1998/04/13}{The \cs{PositionX} of the label 9 is +% changed to the left side of the arrows} +% \begin{macrocode} + \advance\PositionX by -\cnt@marginparsep + \advance\PositionX by -30 + \Identify{9} +% \end{macrocode} +% +% Identify the |\footskip|. The arrow will be located on $1/8$th of +% the |\textwidth|. +% \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 11 is +% changed to the upper side of the arrows} +% \begin{macrocode} + \PositionX = \cnt@textwidth + \divide\PositionX by 8 + \advance\PositionX by \ref@margin + \OutsideVArrow\ref@foot\cnt@footskip{20}{20} + \PositionY = \ref@foot + \advance\PositionY by \cnt@footskip + \advance\PositionY by 30 + \Identify{11} +% \end{macrocode} +% +% Identify the |\voffset|. The arrow will be located a bit to the +% left of the edge of the paper. +% \begin{macrocode} + \PositionX = \cnt@paperwidth + \advance\PositionX by -50 + \PositionY = \cnt@paperheight + \ExtraYPos = \PositionY + \advance\ExtraYPos by -\cnt@voffset + \advance\PositionY by \cnt@voffset + \divide\PositionY by \tw@ + \Identify{2} + \InsideVArrow\ExtraYPos +% \end{macrocode} +% +% Identify |\topmargin|, |\headheight| and |\headsep|. +% +% The arrows will be located on $1/8$th of the |\textwidth|, with +% intervals of the same size, stored in |\Interval|. +% \begin{macrocode} + \Interval = \cnt@textwidth + \divide\Interval by 8 + \PositionX = \ref@margin + \advance\PositionX by \Interval +% \end{macrocode} +% First the |\topmargin|. If |\topmargin| has a positive value, the +% arrow is upward. Otherwise, it is downward. The number label is +% always placed at the base of the arrow. +% \changes{v1.2}{1998/04/13}{The direction of the arrows should be +% switched by the sign of \cs{topmargin}} +% \begin{macrocode} + \ifnum\cnt@topmargin > \z@ + \ExtraYPos = \ref@head + \advance\ExtraYPos\cnt@headheight + \OutsideVArrow\ExtraYPos\cnt@topmargin{20}{20} + \PositionY = \ExtraYPos + \advance\PositionY by \cnt@topmargin + \else + \ExtraYPos = \cnt@voffset + \OutsideVArrow\ExtraYPos{-\cnt@topmargin}{20}{20} + \PositionY = \ExtraYPos + \advance\PositionY by -\cnt@topmargin + \fi + \advance\PositionY by 30 + \Identify{4} + \advance\PositionX by \Interval +% \end{macrocode} +% Then the |\headheight| +% \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 5 is +% fixed} +% \begin{macrocode} + \OutsideVArrow\ref@head\cnt@headheight{20}{20} + \PositionY = \ref@head + \advance\PositionY by \cnt@headheight + \advance\PositionY by 30 + \Identify{5} + \advance\PositionX by \Interval +% \end{macrocode} +% and finally the |\headsep| +% \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 6 is +% fixed} +% \begin{macrocode} + \ExtraYPos=\ref@body + \advance\ExtraYPos\cnt@textheight + \OutsideVArrow\ExtraYPos\cnt@headsep{20}{20} + \PositionY = \ref@body + \advance\PositionY by \cnt@textheight + \advance\PositionY by -30 + \Identify{6} +% \end{macrocode} +% +% Here we can end the picture environment and insert a little +% space. +% \begin{macrocode} + \end{picture} + + \medskip +% \end{macrocode} +% +% Below the picture we put a table to show the actual values of the +% parameters. Note that fractional points are truncated, i.e., +% \texttt{72.27pt} is displayed as \texttt{72pt} +% +% The table is typeset inside a box with a depth of 0 to always +% keep it on the same page as the picture. +% \changes{v1.1b}{1994/03/23}{Showing oddside and evenside margins was +% defective} +% \changes{v1.1c}{1994/07/14}{in compatibility mode \cs{footnotesize} +% calls \cs{normalfont}; therefore we need to switch to a tt font +% later} +% \changes{v1.1f}{1995/03/14}{introduced \cs{notshown}} +% \begin{macrocode} + \vtop to 0pt{% + \@minipagerestore\footnotesize\ttfamily + \begin{tabular}{@{}rl@{\hspace{20pt}}rl} + 1 & \oneinchtext\ + \LayOutbs\texttt{hoffset} + & 2 & \oneinchtext\ + \LayOutbs\texttt{voffset} \\ + 3 & \if@twoside + \ifodd\count\z@ \Show{cnt}{oddsidemargin} + \else \Show{cnt}{evensidemargin} + \fi + \else + \Show{cnt}{oddsidemargin} + \fi & 4 & \Show{cnt}{topmargin} \\ + 5 & \Show{cnt}{headheight} & 6 & \Show{cnt}{headsep} \\ + 7 & \Show{cnt}{textheight} & 8 & \Show{cnt}{textwidth} \\ + 9 & \Show{cnt}{marginparsep}&10& \Show{cnt}{marginparwidth} \\ + 11& \Show{cnt}{footskip} & & \Show{cnt}{marginparpush} + \rlap{(\notshown)}\\ + & \Show{ref}{hoffset} & & \Show{ref}{voffset} \\ + & \Show{cnt}{paperwidth} & & \Show{cnt}{paperheight} \\ + + \end{tabular}\vss} +% \end{macrocode} +% When the option \Lopt{verbose} was used the following lines will +% show dimensions on the terminal. +% \begin{macrocode} + \Type{ref}{hoffset} + \Type{ref}{voffset} + \Type{cnt}{textheight} + \Type{cnt}{textwidth} +% \end{macrocode} +% Finally we start a new page. +% \begin{macrocode} + \newpage +} +%</package> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \Finale +\endinput |