% \iffalse meta-comment % % Copyright (C) 1993-2023 % % The LaTeX 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} % %<+package>\NeedsTeXFormat{LaTeX2e} %<+package>\ProvidesPackage{layout} %<+driver>\ProvidesFile{layout.drv} %\ProvidesFile{layout.dtx} [2023-08-20 v1.2e 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} % % \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} % % \makeatletter % \def\allowtofu{^^A %\def\UTFviii@undefined@err##1{^^A % \PackageWarning{inputenc}{Unicode character \expandafter % \UTFviii@splitcsname\string##1\relax % \MessageBreak % not set up for use with LaTeX}^^A % \raisebox{.8pt}{\fboxsep1pt\kern.1pt\fbox{$\cdot$}\kern.1pt}^^A % }} % \makeatother % % \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} % % \MaybeStop{} % % \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} % % \changes{v1.2e}{2021-03-10}{Added option for Romanian (gh529)} % \begin{macrocode} \DeclareOption{romanian}{% \def\Headertext{Antet} \def\Bodytext{Corp} \def\Footertext{Subsol} \def\MarginNotestext{Note\\ Marginale} \def\oneinchtext{un inch} \def\notshown{neafi\textcommabelow sat} } % \end{macrocode} % % \changes{v1.2d}{2020-07-25}{Added option for Japanese (gh353)} % \begin{allowtofu} % \begin{macrocode} \DeclareOption{japanese}{% \def\Headertext{天} \def\Bodytext{基本版面} \def\Footertext{地} \def\MarginNotestext{傍\\注} \def\oneinchtext{1インチ} \def\notshown{非表示} } % \end{macrocode} % \end{allowtofu} % % 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 pieces 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 two-sided 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 two-sided 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 deal with 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 a 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} % % Two-sided 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$ 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$ 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 } % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \Finale \endinput