guess we don't want the build dir
[latex2e.git] / trunk / required / tools / layout.dtx
blob99349491408436310c5a3d0cc3aa04421ab0a68e
1 % \iffalse meta-comment
3 % Copyright 1993-2014
5 % The LaTeX3 Project and any individual authors listed elsewhere
6 % in this file.
8 % This file is part of the Standard LaTeX `Tools Bundle'.
9 % -------------------------------------------------------
11 % It may be distributed and/or modified under the
12 % conditions of the LaTeX Project Public License, either version 1.3c
13 % of this license or (at your option) any later version.
14 % The latest version of this license is in
15 %    http://www.latex-project.org/lppl.txt
16 % and version 1.3c or later is part of all distributions of LaTeX
17 % version 2005/12/01 or later.
19 % The list of all files belonging to the LaTeX `Tools Bundle' is
20 % given in the file `manifest.txt'.
22 % \fi
23 %\iffalse
24 %    This file is built for \LaTeXe, so we make sure an error is
25 %    generated when it is used with another format
26 %<*dtx>
27 \ProvidesFile{layout.dtx}
28 %</dtx>
29 %<+package>\NeedsTeXFormat{LaTeX2e}
30 %<+package>\ProvidesPackage{layout}
31 %<+driver>\ProvidesFile{layout.drv}
32 %\ProvidesFile{layout.dtx}
33                 [2014/10/28 v1.2c Show layout parameters]
35 %    A short driver is provided that can be extracted if necessary by
36 %    the \textsf{DocStrip} program provided with \LaTeXe.
37 %    \begin{macrocode}
38 %<*driver>
39 \documentclass{ltxdoc}
41 \usepackage{layout}
43 \newcommand\Lopt[1]{\textsf{#1}}
44 \pagestyle{myheadings}
45 \DisableCrossrefs
46 \begin{document}
47 \DocInput{layout.dtx}
48 \end{document}
49 %</driver>
50 %    \end{macrocode}
51 %\fi
52 % \changes{v1.1c}{1994/07/13}{Moved Identification code to the front
53 %    and removed the permanent use of \cs{filedate} and friends}
54 % \changes{v1.1d}{1994/09/08}{Stored texts in control sequences to
55 %    allow other languages}
57 % \GetFileInfo{layout.dtx}
58 % \title{Displaying page layout variables}
59 % \author{Kent McPherson a.o.\thanks{Converted for \LaTeXe\ by
60 %        Johannes Braams and modified by Hideo Umeki}}
61 % \date{\filedate}
63 % \markboth{layout package version \fileversion\space as of \filedate}
64 %          {layout package version \fileversion\space as of \filedate}
66 % \MaintainedByLaTeXTeam{tools}
67 % \maketitle
69 % \section{Introduction}
71 %    This \LaTeXe\ package is a reimplementation of
72 %    \texttt{layout.sty} by Kent McPherson. It defines the command
73 %    |\layout| which produces an overview of the layout of the current
74 %    document. The command |\layout*| recomputes the values it uses to
75 %    produce the overview.
77 %    The figure on the next page shows the output of the |\layout|
78 %    command for this document.
80 % \begin{figure}[p]
81 % \layout
82 % \end{figure}
84 % \StopEventually{}
86 % \section{The implementation}
88 % \changes{v1.1b}{1994/03/23}{removed the \cs{wlog} as
89 %    \cs{ProvidesPackage} does that now}
90 % \changes{v1.1d}{1994/09/08}{Added language options dutch and
91 %    english}
93 %    This package prints a figure to illustrate the layout that is
94 %    implemented by the document class. In the figure several words
95 %    appear. They are stored in control sequences to be able to select
96 %    a different language.
97 % \changes{v1.1e}{1994/10/29}{The dutch texts should be one word.}
98 % \changes{v1.1f}{1995/03/14}{Added \cs{notshown}}
99 % \changes{v1.1f}{1995/03/14}{Added option french}
100 % \changes{v1.1j}{1995/10/29}{Added the options spanish, brazilian and
101 %    portuguese}
102 % \changes{v1.1k}{1995/11/23}{Documentation fixes}
103 % \changes{v1.2}{1998/04/13}{Redesign of the output by Hideo Umeki}
104 % \changes{v1.2c}{2000/09/21}{Added option german}
105 % \changes{v1.2c}{2000/09/25}{Added option for italian by Claudio Beccari}
106 %    \begin{macrocode}
107 %<*package>
108 \DeclareOption{dutch}{%
109   \def\Headertext{Kopregel}
110   \def\Bodytext{Broodtekst}
111   \def\Footertext{Voetregel}
112   \def\MarginNotestext{Marge\\Notities}
113   \def\oneinchtext{een inch}
114   \def\notshown{niet getoond}
115   }
116 \DeclareOption{german}{%
117   \def\Headertext{Kopfzeile}
118   \def\Bodytext{Haupttext}
119   \def\Footertext{Fu{\ss}zeile}
120   \def\MarginNotestext{Rand-\\ notizen}
121   \def\oneinchtext{ein Zoll}
122   \def\notshown{ohne Abbildung}
123   }
124 \DeclareOption{ngerman}{\ExecuteOptions{german}}
125 \DeclareOption{english}{%
126   \def\Headertext{Header}
127   \def\Bodytext{Body}
128   \def\Footertext{Footer}
129   \def\MarginNotestext{Margin\\Notes}
130   \def\oneinchtext{one inch}
131   \def\notshown{not shown}
132   }
133 \DeclareOption{french}{%
134   \def\Headertext{Ent\^{e}te}
135   \def\Bodytext{Corps}
136   \def\Footertext{Pied de page}
137   \def\MarginNotestext{Marge\\Notes}
138   \def\oneinchtext{un pouce}
139   \def\notshown{non affich\'{e}}
140   }
141 \DeclareOption{francais}{\ExecuteOptions{french}}
142 \DeclareOption{spanish}{%
143   \def\Headertext{Encabezamiento}
144   \def\Bodytext{Cuerpo}
145   \def\Footertext{Pie de p\'agina}
146   \def\MarginNotestext{Notas\\ Marginales}
147   \def\oneinchtext{una pulgada}
148   \def\notshown{no mostradas}
149   }
150 \DeclareOption{portuguese}{%
151   \def\Headertext{Cabe\c{c}alho}
152   \def\Bodytext{Corpo}
153   \def\Footertext{Rodap\'e}
154   \def\MarginNotestext{Notas\\ Marginais}
155   \def\oneinchtext{uma polegada}
156   \def\notshown{n\~ao mostradas}
157   }
158 \DeclareOption{brazilian}{%
159   \def\Headertext{Cabe\c{c}alho}
160   \def\Bodytext{Corpo}
161   \def\Footertext{Rodap\'e}
162   \def\MarginNotestext{Notas\\ Marginais}
163   \def\oneinchtext{uma polegada}
164   \def\notshown{n\~ao mostradas}
165   }
166 \DeclareOption{italian}{%
167   \def\Headertext{Testatina}
168   \def\Bodytext{Corpo}
169   \def\Footertext{Piedino}
170   \def\MarginNotestext{Note\\ Marginali}
171   \def\oneinchtext{un pollice}
172   \def\notshown{non mostrato}
173   }
174 %    \end{macrocode}
176 %    This package has an option \Lopt{verbose}. Using it will make the
177 %    command |\layout| type some of the parameters on the terminal.
178 %    \begin{macrocode}
179 \DeclareOption{verbose}{\let\LayOuttype\typeout}
180 \DeclareOption{silent}{\let\LayOuttype\@gobble}
181 %    \end{macrocode}
183 % \changes{v1.1h}{1995/04/07}{Added the options \Lopt{integers}
184 %    (default) and \Lopt{reals}}
186 %    The normal behaviour of this package when showing the values of
187 %    the parameters is to truncate them. However, if you want to see
188 %    the real parameter values you can use the option \Lopt{reals} to
189 %    get that effect.
190 % \changes{v1.1i}{1995/06/25}{\LaTeX\ release 1995/06/01 no longer
191 %    needs double hashmarks in the argument of \cs{DeclareOption}}
192 %    \begin{macrocode}
193 \def\lay@value{}
194 \DeclareOption{integers}{%
195   \renewcommand*{\lay@value}[2]{%
196     \expandafter\number\csname #1@#2\endcsname pt}}
197 \DeclareOption{reals}{%
198   \renewcommand*{\lay@value}[2]{\the\csname #2\endcsname}}
199 %    \end{macrocode}
201 %    The default language is English, the default mode is
202 %    \Lopt{silent} and the default way of showing parameter values is
203 %    to use integers.
204 %    \begin{macrocode}
205 \ExecuteOptions{english,silent,integers}
206 \ProcessOptions
207 %    \end{macrocode}
209 % \begin{macro}{\LayOutbs}
210 %    Define |\LayOutbs| to produce a backslash. We use a definition
211 %    which also works with OT1 fonts.
212 % \changes{v1.2b}{1998/06/21}{Renamed \cs{bs} to avoid possible conflicts
213 %   with other packages}
214 %    \begin{macrocode}
215 \newcommand\LayOutbs{}
216 \chardef\LayOutbs`\\
217 %    \end{macrocode}
218 % \end{macro}
220 % \begin{macro}{\ConvertToCount}
221 %    This macro stores the value of a \emph{length} register in a
222 %    \emph{count} register.
223 %    \begin{macrocode}
224 \def\ConvertToCount#1#2{%
225 %    \end{macrocode}
226 %    First copy the value
227 %    \begin{macrocode}
228   #1=#2
229 %    \end{macrocode}
230 %    Then divide it by 65536.
231 %    \begin{macrocode}
232   \divide #1 by 65536}
233 %    \end{macrocode}
234 %    The result of this is that the \emph{count} register holds the
235 %    value of the \emph{length} register in points.
236 % \end{macro}
238 % \begin{macro}{\SetToHalf}
239 % \begin{macro}{\SetToQuart}
240 %    Small macros used in computing positions.
241 %    \begin{macrocode}
242 \def\SetToHalf#1#2{#1=#2\relax\divide#1by\tw@}
243 \def\SetToQuart#1#2{#1=#2\relax\divide#1by4}
244 %    \end{macrocode}
245 % \end{macro}
247 % \begin{macro}{\Identify}
248 %    A small macro used in identifying dimensions.
249 %    \begin{macrocode}
250 \def\Identify#1{%
251   \put(\PositionX,\PositionY){\circle{20}}
252   \put(\PositionX,\PositionY){\makebox(0,0){\tiny #1}}
254 %    \end{macrocode}
255 % \end{macro}
256 % \end{macro}
258 % \begin{macro}{\InsideHArrow}
259 %    This macro is used to produce two horizontal arrows inside a box.
260 %    The argument gives the width of the box.
261 % \changes{v1.1c}{1994/07/14}{Added check for a negative arrow length}
262 %    \begin{macrocode}
263 \def\InsideHArrow#1{{%
264   \ArrowLength = #1
265   \divide\ArrowLength by \tw@
266   \advance\ArrowLength by -10
267   \advance\PositionX by -10
268   \ifnum\ArrowLength<\z@
269     \put(\PositionX,\PositionY){\vector(1,0){-\ArrowLength}}
270     \advance\PositionX by 20
271     \put(\PositionX,\PositionY){\vector(-1,0){-\ArrowLength}}
272   \else
273     \put(\PositionX,\PositionY){\vector(-1,0){\ArrowLength}}
274     \advance\PositionX by 20
275     \put(\PositionX,\PositionY){\vector(+1,0){\ArrowLength}}
276   \fi
278 %    \end{macrocode}
279 % \end{macro}
281 % \begin{macro}{\InsideVArrow}
282 %    This macro is used to produce two vertical arrows inside a box.
283 %    The argument gives the height of the box.
284 %    \begin{macrocode}
285 \def\InsideVArrow#1{{%
286   \ArrowLength = #1
287   \divide\ArrowLength by \tw@
288   \advance\ArrowLength by -10
289   \advance\PositionY by -10
290   \put(\PositionX,\PositionY){\vector(0,-1){\ArrowLength}}
291   \advance\PositionY by 20
292   \put(\PositionX,\PositionY){\vector(0,+1){\ArrowLength}}
294 %    \end{macrocode}
295 % \end{macro}
297 % \begin{macro}{\OutsideHArrow}
298 %    This macro is used to produce two horizontal arrows to delimit a
299 %    length. The first argument is the position for the right arrow,
300 %    the second argument gives the length and the third specifies the
301 %    length of the arrows.
302 %    \begin{macrocode}
303 \def\OutsideHArrow#1#2#3{{%
304   \PositionX = #1
305   \advance\PositionX by #3
306   \put(\PositionX,\PositionY){\vector(-1,0){#3}}
307   \PositionX = #1 \advance\PositionX-#2
308   \advance\PositionX by -#3
309   \put(\PositionX,\PositionY){\vector(+1,0){#3}}
311 %    \end{macrocode}
312 % \end{macro}
314 % \begin{macro}{\OutsideVArrow}
315 %    This macro is used to produce two vertical arrows to delimit a
316 %    length. The first argument is the position for the lower arrow,
317 %    the second argument gives the length and the third and fourth
318 %    specify the lenghts of the lower and upper arrow.
319 %    \begin{macrocode}
320 \def\OutsideVArrow#1#2#3#4{{%
321   \PositionY = #1
322   \advance\PositionY by -#3
323   \put(\PositionX,\PositionY){\vector(0,+1){#3}}
324   \PositionY = #1
325   \advance\PositionY#2
326   \advance\PositionY#4
327   \put(\PositionX,\PositionY){\vector(0,-1){#4}}
329 %    \end{macrocode}
330 % \end{macro}
332 % \begin{macro}{\Show}
333 % \changes{v1.1g}{1995/04/03}{Simplified the definition, now show
334 %    complete value}
335 % \changes{v1.1h}{1995/04/07}{Use \cs{lay@value} to show the value
336 %    because of the option which decides which of two ways of doing it
337 %    should be used}
339 %    Macro used in the table that shows the setting of the parameters.
340 %    \begin{macrocode}
341 \def\Show#1#2{\LayOutbs #2 = \lay@value{#1}{#2}}
342 %    \end{macrocode}
343 % \end{macro}
345 % \begin{macro}{\Type}
346 % \changes{v1.1g}{1995/04/03}{Simplified the definition, now show
347 %    complete value}
348 % \changes{v1.1h}{1995/04/07}{Use \cs{lay@value} to show the value
349 %    because of the option which decides which of two ways of doing it
350 %    should be used}
351 % \changes{v1.2b}{1998/06/21}{Renamed \cs{type} to \cs{LayOuttype}
352 %   to avoid possible conflicts with other packages}
354 %    Macro used to show a setting of a parameter on the terminal.
355 %    \begin{macrocode}
356 \def\Type#1#2{%
357   \LayOuttype{#2 = \lay@value{#1}{#2}}}
358 %    \end{macrocode}
359 % \end{macro}
361 % \begin{macro}{\oneinch}
362 %    A constant, giving the length of an inch in points (approximately)
363 %    \begin{macrocode}
364 \newcount\oneinch
365 \oneinch=72
366 %    \end{macrocode}
367 % \end{macro}
369 %    Because the overview of the layout is produced in a figure
370 %    environment we need to allocate a number of counters that are
371 %    used to store the values of various dimensions.
373 % \begin{macro}{\cnt@paperwidth}
374 % \begin{macro}{\cnt@paperheight}
375 %    The dimensions of the paper
376 %    \begin{macrocode}
377 \newcount\cnt@paperwidth
378 \newcount\cnt@paperheight
379 \ConvertToCount\cnt@paperwidth\paperwidth
380 \ConvertToCount\cnt@paperheight\paperheight
381 %    \end{macrocode}
382 % \end{macro}
383 % \end{macro}
385 % \begin{macro}{\cnt@hoffset}
386 % \begin{macro}{\cnt@voffset}
387 %    the offsets,
388 %    \begin{macrocode}
389 \newcount\cnt@hoffset
390 \newcount\cnt@voffset
391 \ConvertToCount\cnt@hoffset\hoffset
392 \ConvertToCount\cnt@voffset\voffset
393 %    \end{macrocode}
394 % \end{macro}
395 % \end{macro}
397 % \begin{macro}{\cnt@textheight}
398 % \begin{macro}{\cnt@textwidth}
399 %    dimensions of the text area,
400 %    \begin{macrocode}
401 \newcount\cnt@textheight
402 \newcount\cnt@textwidth
403 %    \end{macrocode}
404 % \end{macro}
405 % \end{macro}
407 % \begin{macro}{\cnt@topmargin}
408 % \begin{macro}{\cnt@oddsidemargin}
409 % \begin{macro}{\cnt@evensidemargin}
410 %    margins,
411 %    \begin{macrocode}
412 \newcount\cnt@topmargin
413 \newcount\cnt@oddsidemargin
414 \newcount\cnt@evensidemargin
415 %    \end{macrocode}
416 % \end{macro}
417 % \end{macro}
418 % \end{macro}
420 % \begin{macro}{\cnt@headheight}
421 % \begin{macro}{\cnt@headsep}
422 %    dimensions of the running heads,
423 %    \begin{macrocode}
424 \newcount\cnt@headheight
425 \newcount\cnt@headsep
426 %    \end{macrocode}
427 % \end{macro}
428 % \end{macro}
430 % \begin{macro}{\cnt@marginparsep}
431 % \begin{macro}{\cnt@marginparwidth}
432 % \begin{macro}{\cnt@marginparpush}
433 %    marginal paragraphs,
434 %    \begin{macrocode}
435 \newcount\cnt@marginparsep
436 \newcount\cnt@marginparwidth
437 \newcount\cnt@marginparpush
438 %    \end{macrocode}
439 % \end{macro}
440 % \end{macro}
441 % \end{macro}
443 % \begin{macro}{\cnt@footskip}
444 %    the distance between the running footers and the text,
445 %    \begin{macrocode}
446 \newcount\cnt@footskip
447 %    \end{macrocode}
448 % \end{macro}
449 %    and the height of the footers, which is needed here to display a
450 %    box, but which isn't used by \LaTeX.
451 % \begin{macro}{\fheight}
452 %    \begin{macrocode}
453 \newcount\fheight
454 \fheight=12
455 %    \end{macrocode}
456 % \end{macro}
458 %    Apart from integer representations of the page layout parameters
459 %    we also need registers to store reference values in.
461 % \begin{macro}{\ref@top}
462 %    The position of the top of the `printable area' is
463 %    one inch below the top of the paper by default. The value of
464 %    |\ref@top| is relative to the lower left corner of the picture
465 %    environment that will be used.
467 %    \begin{macrocode}
468 \newcount\ref@top
469 \ref@top=\cnt@paperheight \advance\ref@top by -\oneinch
470 %    \end{macrocode}
471 % \end{macro}
473 % \begin{macro}{\ref@hoffset}
474 % \begin{macro}{\ref@voffset}
475 %    For the offsets,
476 %    \begin{macrocode}
477 \newcount\ref@hoffset
478 \newcount\ref@voffset
479 %    \end{macrocode}
480 %    The |\hoffset| and |\voffset| values are added to the default
481 %    offset of one inch.
482 %    \begin{macrocode}
483 \ref@hoffset=\cnt@hoffset  \advance\cnt@hoffset by \oneinch
484 \ref@voffset=\cnt@voffset
485 %    \end{macrocode}
487 %    |\cnt@voffset| is converted to be relative to the origin of the
488 %    picture.
489 %    \begin{macrocode}
490 \cnt@voffset=\ref@top
491 \advance\cnt@voffset by -\ref@voffset
492 %    \end{macrocode}
493 % \end{macro}
494 % \end{macro}
496 % \begin{macro}{\ref@head}
497 %    and the text areas, running heads,
498 %    \begin{macrocode}
499 \newcount\ref@head
500 %    \end{macrocode}
501 % \end{macro}
503 % \begin{macro}{\ref@body}
504 %    body of the text
505 %    \begin{macrocode}
506 \newcount\ref@body
507 %    \end{macrocode}
508 % \end{macro}
510 % \begin{macro}{\ref@foot}
511 %    and running footers.
512 %    \begin{macrocode}
513 \newcount\ref@foot
514 %    \end{macrocode}
515 % \end{macro}
517 % \begin{macro}{\ref@margin}
518 % \begin{macro}{\ref@marginwidth}
519 % \begin{macro}{\ref@marginpar}
520 %    These are different for even and odd pages, so they are computed
521 %    by |\layout|.
522 %    \begin{macrocode}
523 \newcount\ref@margin
524 \newcount\ref@marginwidth
525 \newcount\ref@marginpar
526 %    \end{macrocode}
527 % \end{macro}
528 % \end{macro}
529 % \end{macro}
531 %    The following are a number of scratch registers, used in the
532 %    positioning of the various pices of the picture.
533 %    \begin{macrocode}
534 \newcount\Interval
535 \newcount\ExtraYPos
536 \newcount\PositionX
537 \newcount\PositionY
538 \newcount\ArrowLength
539 %    \end{macrocode}
541 %  \begin{macro}{\lay@getvalues}
542 % \changes{v1.1j}{1995/10/30}{Added macro to compute values at later
543 %    time}
544 %    All values that might change during the document are computed by
545 %    calling the macro |\lay@getvalues|. By default this macro is
546 %    executed at |\begin{document}|.
547 %    \begin{macrocode}
548 \def\lay@getvalues{%
549   \ConvertToCount\cnt@textheight\textheight
550   \ConvertToCount\cnt@textwidth\textwidth
551   \ConvertToCount\cnt@topmargin\topmargin
552   \ConvertToCount\cnt@oddsidemargin\oddsidemargin
553   \ConvertToCount\cnt@evensidemargin\evensidemargin
554   \ConvertToCount\cnt@headheight\headheight
555   \ConvertToCount\cnt@headsep\headsep
556   \ConvertToCount\cnt@marginparsep\marginparsep
557   \ConvertToCount\cnt@marginparwidth\marginparwidth
558   \ConvertToCount\cnt@marginparpush\marginparpush
559   \ConvertToCount\cnt@footskip\footskip
560   \ref@head=\ref@top
561     \advance\ref@head by -\ref@voffset
562     \advance\ref@head by -\cnt@topmargin
563     \advance\ref@head by -\cnt@headheight
564   \ref@body=\ref@head
565     \advance\ref@body by -\cnt@headsep
566     \advance\ref@body by -\cnt@textheight
567   \ref@foot=\ref@body
568     \advance\ref@foot by -\cnt@footskip
569   }
570 \AtBeginDocument{\lay@getvalues}
571 %    \end{macrocode}
572 %  \end{macro}
573 %  \begin{macro}{\computevalues}
575 % \begin{macro}{\layout}
576 % \begin{macro}{\layout*}
577 %    The command |\layout| makes the picture and table that display
578 %    the current settings of the layout parameters.
580 % \changes{v1.1b}{1994/03/23}{Produce two pages in twoside mode}
581 % \changes{v1.1j}{1995/10/30}{Added \cs{layout*}}
582 %    \begin{macrocode}
583 \newcommand\layout{%
584   \@ifstar{\lay@getvalues\lay@xlayout}{\lay@xlayout}}
585 \def\lay@xlayout{%
586   \lay@layout
587   \if@twoside
588     \lay@layout
589   \fi}
590 %    \end{macrocode}
592 % \begin{macro}{\lay@layout}
593 %    The internal macro |\lay@layout| does all the dirty work.
594 %    \begin{macrocode}
595 \newcommand\lay@layout{%
596   \thispagestyle{empty}
597 %    \end{macrocode}
599 %    The actions of |\layout| depend on the pagestyle.
600 %    \begin{macrocode}
601   \if@twoside
602     \ifodd\count\z@
603 %    \end{macrocode}
605 %    Here we deal with an odd page in the twosided case.
607 %    \begin{macrocode}
608       \typeout{Two-sided document style, odd page.}
609 %    \end{macrocode}
611 %    So we compute |\ref@marginwidth|, |\ref@marginpar| and
612 %    |\ref@margin|.
613 % \changes{v1.1}{1994/02/23}{Added check for reversemargin}
614 %    \begin{macrocode}
615       \ref@marginwidth=\cnt@oddsidemargin
616       \ref@marginpar=\oneinch
617       \advance\ref@marginpar by \ref@hoffset
618       \advance\ref@marginpar by \cnt@oddsidemargin
619       \ref@margin\ref@marginpar
620       \if@reversemargin
621         \advance\ref@marginpar by -\cnt@marginparsep
622         \advance\ref@marginpar by -\cnt@marginparwidth
623       \else
624         \advance\ref@marginpar by \cnt@textwidth
625         \advance\ref@marginpar by \cnt@marginparsep
626       \fi
627 %    \end{macrocode}
629 %    \begin{macrocode}
630     \else
631 %    \end{macrocode}
633 %    Here we deal with an even page in the twosided case.
635 %    \begin{macrocode}
636   \typeout{Two-sided document style, even page.}
637 %    \end{macrocode}
639 %    So we compute |\ref@marginwidth|, |\ref@marginpar| and
640 %    |\ref@margin|.
641 % \changes{v1.1}{1994/02/23}{Added check for reversemargin}
642 %    \begin{macrocode}
643       \ref@marginwidth=\cnt@evensidemargin
644       \ref@marginpar=\oneinch
645       \advance\ref@marginpar by \ref@hoffset
646       \advance\ref@marginpar by \cnt@evensidemargin
647       \ref@margin\ref@marginpar
648       \if@reversemargin
649         \advance\ref@marginpar by \cnt@textwidth
650         \advance\ref@marginpar by \cnt@marginparsep
651       \else
652         \advance\ref@marginpar by -\cnt@marginparsep
653         \advance\ref@marginpar by -\cnt@marginparwidth
654       \fi
655 %    \end{macrocode}
657 %    \begin{macrocode}
658     \fi
659   \else
660 %    \end{macrocode}
662 %    Finally we the case for single sided printing.
664 % \changes{v1.1}{1994/02/23}{Added check for reversemargin}
665 %    \begin{macrocode}
666     \typeout{One-sided document style.}
667     \ref@marginwidth=\cnt@oddsidemargin
668     \ref@marginpar=\oneinch
669     \advance\ref@marginpar by \ref@hoffset
670     \advance\ref@marginpar by \cnt@oddsidemargin
671     \ref@margin\ref@marginpar
672     \if@reversemargin
673       \advance\ref@marginpar by -\cnt@marginparsep
674       \advance\ref@marginpar by -\cnt@marginparwidth
675     \else
676       \advance\ref@marginpar by \cnt@textwidth
677       \advance\ref@marginpar by \cnt@marginparsep
678     \fi
679   \fi
680 %    \end{macrocode}
683 %  Now we begin the picture environment; dividing all the lengths by
684 %  two is done by setting |\unitlength| to \texttt{0.5pt}
685 %    \begin{macrocode}
686   \setlength{\unitlength}{.5pt}
687   \begin{picture}(\cnt@paperwidth,\cnt@paperheight)
688     \centering
689     \thicklines
690 %    \end{macrocode}
692 %    First we have the pagebox and reference lines,
694 %    \begin{macrocode}
695     \put(0,0){\framebox(\cnt@paperwidth,\cnt@paperheight){\mbox{}}}
696     \put(0,\cnt@voffset){\dashbox{10}(\cnt@paperwidth,0){\mbox{}}}
697     \put(\cnt@hoffset,0){\dashbox{10}(0,\cnt@paperheight){\mbox{}}}
698 %    \end{macrocode}
700 %    then the header,
702 %    \begin{macrocode}
703     \put(\ref@margin,\ref@head){%
704       \framebox(\cnt@textwidth,\cnt@headheight)%
705         {\footnotesize\Headertext}}
706 %    \end{macrocode}
708 %    the body of the text area,
710 %    \begin{macrocode}
711     \put(\ref@margin,\ref@body){%
712       \framebox(\cnt@textwidth,\cnt@textheight){\Bodytext}}
713 %    \end{macrocode}
715 %     the footer
717 %    \begin{macrocode}
718     \put(\ref@margin,\ref@foot){%
719       \framebox(\cnt@textwidth,\fheight){\footnotesize\Footertext}}
720 %    \end{macrocode}
722 %    and the space for marginal notes.
724 %    \begin{macrocode}
725     \put(\ref@marginpar,\ref@body){%
726       \framebox(\cnt@marginparwidth,\cnt@textheight)%
727                {\footnotesize\shortstack{\MarginNotestext}}}
728 %    \end{macrocode}
730 %    Then we start putting in `arrows' to mark the various parameters.
731 %    From here we use |\thinlines|.
732 %    \begin{macrocode}
733     \thinlines
734 %    \end{macrocode}
736 %    |\PositionX| and |\PositionY| will be the coordinates of the center of
737 %    the arrow displaying |\textwidth|.
738 %    \begin{macrocode}
739     \SetToHalf\PositionX\cnt@textwidth
740     \advance\PositionX by \ref@margin
741 %    \end{macrocode}
742 %    The arrow should be a bit above the bottom of the `body box'.
743 %    \begin{macrocode}
744     \PositionY = \ref@body
745     \advance\PositionY by 50
746 %    \end{macrocode}
747 %    An identifying number is put here, in a circle.
748 %    \begin{macrocode}
749     \Identify{8}
750 %    \end{macrocode}
751 %    Then the arrow is drawn.
752 %    \begin{macrocode}
753     \InsideHArrow\cnt@textwidth
754 %    \end{macrocode}
756 %    Now the |\textheight|
757 %    \begin{macrocode}
758     \SetToHalf\PositionY\cnt@textheight
759     \advance\PositionY by \ref@body
760 %    \end{macrocode}
762 %    The x-position of the arrow is at $4/5$ of the width of the `body
763 %    box'.
764 %    \begin{macrocode}
765     \PositionX = \cnt@textwidth
766     \divide\PositionX by 5
767     \multiply \PositionX by 4
768     \advance\PositionX by \ref@margin
769 %    \end{macrocode}
771 %    An identifying number is put here, in a circle.
772 %    \begin{macrocode}
773     \Identify{7}
774     \InsideVArrow\cnt@textheight
775 %    \end{macrocode}
778 %    The |\hoffset|,
779 % \changes{v1.2}{1998/04/13}{\cs{PositionY} for label 1 is
780 %    fixed at 50}
781 %    \begin{macrocode}
782     \PositionY = 50
783     \SetToHalf\PositionX\cnt@hoffset
784     \Identify{1}
785     \InsideHArrow\cnt@hoffset
786 %    \end{macrocode}
789 %    The width of the margin.
790 % \changes{v1.2}{1998/04/13}{The direction of the arrows should be
791 %    switched by the sign of \cs{oddsidemargin}}
792 %    \begin{macrocode}
793     \SetToQuart\PositionY\cnt@textheight
794     \advance\PositionY by \ref@body
795     \ifnum\ref@marginwidth > 0
796       \OutsideHArrow\ref@margin\ref@marginwidth{20}
797       \PositionX = \cnt@hoffset
798     \else
799       \OutsideHArrow\cnt@hoffset{-\ref@marginwidth}{20}
800       \PositionX = \ref@margin
801     \fi
802     \advance\PositionX by -30
803     \Identify{3}
804 %    \end{macrocode}
806 %    the |\marginparwidth|,
807 %    \begin{macrocode}
808     \SetToQuart\PositionY\cnt@textheight
809     \advance\PositionY by \ref@body
810 %    \end{macrocode}
811 %    This arrow has to be bit below the one for the |\oddsidemargin|
812 %    or\\ |\evensidemargin|.
813 %    \begin{macrocode}
814     \advance\PositionY by 30
815     \SetToHalf\PositionX\cnt@marginparwidth
816     \advance\PositionX by \ref@marginpar
817     \Identify{10}
818     \InsideHArrow\cnt@marginparwidth
819 %    \end{macrocode}
822 %    The |\marginparsep|, this depends on single or double sided
823 %    printing.
824 %    \begin{macrocode}
825     \advance\PositionY by 30
826     \if@twoside
827 %    \end{macrocode}
829 %    Twosided mode, reversemargin;
830 % \changes{v1.1b}{1994/03/23}{\cs{OutSideHArrow} should be
831 %    \cs{OutsideHArrow}}
832 % \changes{v1.2}{1998/04/13}{Added check for reversemargin}
833 %    \begin{macrocode}
834       \if@reversemargin
835         \ifodd\count\z@
836           \OutsideHArrow\ref@margin\cnt@marginparsep{20}
837           \PositionX = \ref@margin
838         \else
839           \OutsideHArrow\ref@marginpar\cnt@marginparsep{20}
840           \PositionX = \ref@marginpar
841         \fi
842       \else
843 %    \end{macrocode}
844 %    Not reversemargin;
845 %    \begin{macrocode}
846         \ifodd\count\z@
847           \OutsideHArrow\ref@marginpar\cnt@marginparsep{20}
848           \PositionX = \ref@marginpar
849         \else
850           \OutsideHArrow\ref@margin\cnt@marginparsep{20}
851           \PositionX = \ref@margin
852         \fi
853       \fi
854     \else
855 %    \end{macrocode}
857 %    Single sided mode.
858 % \changes{v1.2}{1998/04/13}{Added check for reversemargin}
859 %    \begin{macrocode}
860       \if@reversemargin
861         \OutsideHArrow\ref@margin\cnt@marginparsep{20}
862         \PositionX = \ref@margin
863       \else
864         \OutsideHArrow\ref@marginpar\cnt@marginparsep{20}
865         \PositionX = \ref@marginpar
866       \fi
867     \fi
868 %    \end{macrocode}
869 % \changes{v1.2}{1998/04/13}{The \cs{PositionX} of the label 9 is
870 %    changed to the left side of the arrows}
871 %    \begin{macrocode}
872     \advance\PositionX by -\cnt@marginparsep
873     \advance\PositionX by -30
874     \Identify{9}
875 %    \end{macrocode}
877 %    Identify the |\footskip|. The arrow will be located on $1/8$th of
878 %    the |\textwidth|.
879 % \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 11 is
880 %    changed to the upper side of the arrows}
881 %    \begin{macrocode}
882     \PositionX = \cnt@textwidth
883     \divide\PositionX by 8
884     \advance\PositionX by \ref@margin
885     \OutsideVArrow\ref@foot\cnt@footskip{20}{20}
886     \PositionY = \ref@foot
887     \advance\PositionY by \cnt@footskip
888     \advance\PositionY by 30
889     \Identify{11}
890 %    \end{macrocode}
892 %    Identify the |\voffset|. The arrow will be located a bit to the
893 %    left of the edge of the paper.
894 %    \begin{macrocode}
895     \PositionX = \cnt@paperwidth
896     \advance\PositionX by -50
897     \PositionY = \cnt@paperheight
898     \ExtraYPos = \PositionY
899     \advance\ExtraYPos by -\cnt@voffset
900     \advance\PositionY by \cnt@voffset
901     \divide\PositionY by \tw@
902     \Identify{2}
903     \InsideVArrow\ExtraYPos
904 %    \end{macrocode}
906 %    Identify |\topmargin|, |\headheight| and |\headsep|.
908 %    The arrows will be located on $1/8$th of the |\textwidth|, with
909 %    intervals of the same size, stored in |\Interval|.
910 %    \begin{macrocode}
911     \Interval = \cnt@textwidth
912     \divide\Interval by 8
913     \PositionX = \ref@margin
914     \advance\PositionX by \Interval
915 %    \end{macrocode}
916 %    First the |\topmargin|. If |\topmargin| has a positive value, the
917 %    arrow is upward. Otherwise, it is downward. The number label is
918 %    always placed at the base of the arrow.
919 % \changes{v1.2}{1998/04/13}{The direction of the arrows should be
920 %    switched by the sign of \cs{topmargin}}
921 %    \begin{macrocode}
922     \ifnum\cnt@topmargin > \z@
923       \ExtraYPos = \ref@head
924       \advance\ExtraYPos\cnt@headheight
925       \OutsideVArrow\ExtraYPos\cnt@topmargin{20}{20}
926       \PositionY = \ExtraYPos
927       \advance\PositionY by \cnt@topmargin
928     \else
929       \ExtraYPos = \cnt@voffset
930       \OutsideVArrow\ExtraYPos{-\cnt@topmargin}{20}{20}
931       \PositionY = \ExtraYPos
932       \advance\PositionY by -\cnt@topmargin
933     \fi
934     \advance\PositionY by 30
935     \Identify{4}
936     \advance\PositionX by \Interval
937 %    \end{macrocode}
938 %    Then the |\headheight|
939 % \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 5 is
940 %    fixed}
941 %    \begin{macrocode}
942     \OutsideVArrow\ref@head\cnt@headheight{20}{20}
943     \PositionY = \ref@head
944     \advance\PositionY by \cnt@headheight
945     \advance\PositionY by 30
946     \Identify{5}
947     \advance\PositionX by \Interval
948 %    \end{macrocode}
949 %    and finally the |\headsep|
950 % \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 6 is
951 %    fixed}
952 %    \begin{macrocode}
953     \ExtraYPos=\ref@body
954     \advance\ExtraYPos\cnt@textheight
955     \OutsideVArrow\ExtraYPos\cnt@headsep{20}{20}
956     \PositionY = \ref@body
957     \advance\PositionY by \cnt@textheight
958     \advance\PositionY by -30
959     \Identify{6}
960 %    \end{macrocode}
962 %    Here we can end the picture environment and insert a little
963 %    space.
964 %    \begin{macrocode}
965   \end{picture}
967   \medskip
968 %    \end{macrocode}
970 %    Below the picture we put a table to show the actual values of the
971 %    parameters.  Note that fractional points are truncated, i.e.,
972 %    \texttt{72.27pt} is displayed as \texttt{72pt}
974 %    The table is typeset inside a box with a depth of 0 to always
975 %    keep it on the same page as the picture.
976 % \changes{v1.1b}{1994/03/23}{Showing oddside and evenside margins was
977 %    defective}
978 % \changes{v1.1c}{1994/07/14}{in compatibility mode \cs{footnotesize}
979 %    calls \cs{normalfont}; therefore we need to switch to a tt font
980 %    later}
981 % \changes{v1.1f}{1995/03/14}{introduced \cs{notshown}}
982 %    \begin{macrocode}
983   \vtop to 0pt{%
984     \@minipagerestore\footnotesize\ttfamily
985     \begin{tabular}{@{}rl@{\hspace{20pt}}rl}
986       1 & \oneinchtext\ + \LayOutbs\texttt{hoffset}
987         & 2 & \oneinchtext\ + \LayOutbs\texttt{voffset} \\
988       3 & \if@twoside
989             \ifodd\count\z@ \Show{cnt}{oddsidemargin}
990             \else \Show{cnt}{evensidemargin}
991             \fi
992           \else
993             \Show{cnt}{oddsidemargin}
994           \fi                    & 4 & \Show{cnt}{topmargin} \\
995       5 & \Show{cnt}{headheight} & 6 & \Show{cnt}{headsep} \\
996       7 & \Show{cnt}{textheight} & 8 & \Show{cnt}{textwidth} \\
997       9 & \Show{cnt}{marginparsep}&10& \Show{cnt}{marginparwidth} \\
998       11& \Show{cnt}{footskip}   &   & \Show{cnt}{marginparpush}
999        \rlap{(\notshown)}\\
1000         & \Show{ref}{hoffset}    &   & \Show{ref}{voffset} \\
1001         & \Show{cnt}{paperwidth} &   & \Show{cnt}{paperheight} \\
1003   \end{tabular}\vss}
1004 %    \end{macrocode}
1005 %    When the option \Lopt{verbose} was used the following lines will
1006 %    show dimensions on the terminal.
1007 %    \begin{macrocode}
1008   \Type{ref}{hoffset}
1009   \Type{ref}{voffset}
1010   \Type{cnt}{textheight}
1011   \Type{cnt}{textwidth}
1012 %    \end{macrocode}
1013 %    Finally we start a new page.
1014 %    \begin{macrocode}
1015   \newpage
1017 %</package>
1018 %    \end{macrocode}
1019 % \end{macro}
1020 % \end{macro}
1021 % \end{macro}
1022 % \end{macro}
1024 % \Finale
1025 \endinput