1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
% UNIT MACROS for LaTeX2e, version 1.02,
% written by Herman Haverkort, 16 february 1995
% See end of file for information on warranty, distribution etc.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hhunits}[1995/02/16 Units system]
\RequirePackage{hhqueue}[1995/02/14]
% =============================================================================
% \unit UNITNAME:DIMENSION returns the largest of the specified DIMENSION
% and the current value of the specified unit. Furthermore the value of the
% specified unit is set to the returned value.
% Thus the value of the unit will eventually reach the maximum value which
% is passed to it during the processing of the document. That value is
% saved after processing the document, and reloaded before processing it
% a second time. During the second run the same value will be used throughout
% the entire document, and that value will be large enough to fit all
% dimensions which are specified for the unit.
% =============================================================================
\def\unit#1:#2{%
\@ifundefined{unit@#1}%
{#2\h@newunit #1:{#2}{#2}}%
{\ifdim\@nameuse{unit@#1}<#2%
#2\h@setunit #1:{#2}%
\else
\@nameuse{unit@#1}%
\fi
\ifdim\@nameuse{newunit@#1}<#2%
\global\csname newunit@#1\endcsname #2%
\fi}}
% The unit macro keeps track of the current unit value and a new
% unit value. The current unit value is initialized by reading the
% file jobname.aux. The initial value is based on a previous run.
% If no extra action were undertaken, the unit value would not drop
% down to a reasonable value anymore if a previous run on the document
% drove it far up. Therefore a new unit value is maintained; it is
% initialized to zero in the beginning of every compiling session.
% The current unit value is used for type-setting, but when the end
% of the document is reached the new unit value is saved.
\def\h@presetunit#1:#2{\h@newunit #1:{#2}{#2}}
% \h@presetunit is meant to be used in style files to initalize unit values.
% It sets both the current and the new unit value. This prevents
% the unit value from dropping below its preset value if it is not used.
% Such dropping could cause problems, because the dropped value would be
% reloaded the next time the document is processed. The reloading of the
% unit values takes place after the reading of the style files which
% contain the presettings, so if the new unit value was not initialized,
% the presetting would lose its effect after compiling the document once.
\def\h@resetunit#1:#2{%
\@ifundefined{unit@#1}%
{\h@newunit #1:{#2}{\z@}}
{\global\csname unit@#1\endcsname #2}}
% Designed to be used in jobname.aux. Do not use this macro directly.
\def\h@newunit#1:#2#3{%
\expandafter\newdimen\csname unit@#1\endcsname
\global\csname unit@#1\endcsname #2%
\expandafter\newdimen\csname newunit@#1\endcsname
\global\csname newunit@#1\endcsname #3%
\edef\@@@unt{#1}\h@enqueue{@@@unt}{@units}}
\def\h@setunit#1:#2{%
\global\csname unit@#1\endcsname #2%
\global\@unitschangedtrue}
\AtEndDocument{%
\clearpage
\if@filesw\h@writeunits\immediate\closeout\@unitsfile\fi}
\def\h@writeunits{%
{\def\\{\h@writeunit}\h@processq{@units}}%
\if@unitschanged
\PackageWarningNoLine{hhunits}{Unit values may have changed.\MessageBreak
Rerun to get them right}\fi}
\def\h@writeunit#1{%
\ifdim\@nameuse{newunit@#1}<\@nameuse{unit@#1}%
\global\csname unit@#1\endcsname \@nameuse{newunit@#1}%
\global\@unitschangedtrue
\fi
\immediate\write\@unitsfile{%
\string\h@resetunit \space #1:{\the\@nameuse{unit@#1}}}}
% **********************
% * INITIALIZATION *
% **********************
\h@initqueue{@units}{}
\newif\if@unitschanged
\newwrite\@unitsfile
\@input{\jobname.uni}
\if@filesw
\immediate\openout\@unitsfile=\jobname.uni
\immediate\write\@unitsfile{\relax}\fi
\endinput% **********************
% * WARRANTY, DISTRIBUTION ETC. *
% *******************************
%
% This is a TeX style file by Herman Haverkort. This file is distributed
% in the hope that it will be useful, but without any warranty; without
% even the implied warranty of merchantability or fitness for a particular
% purpose. The author does not accept any responsability for any damage,
% loss, injury, psychosis, annoyance, marital problems, murders etc. which
% are caused by this file.
%
% This style file has not been tested systematically, so there are
% probably undiscoverd errors in it. If you find one, if you have
% trouble using this file, if you have a suggestion for an extension or
% another modification, or if you are just a happy user, please report
% it to:
% Herman Haverkort
% Heyenoordseweg 40
% NL-6813 GA Arnhem
% herman@fgbbs.iaf.nl
%
% You are allowed to change this file, but you are not allowed to distribute
% the changed version unless you obey the following:
% - give the changed file another name than the original one;
% - record clearly in the changed file:
% - the original name of the file;
% - its original author;
% - that it is a changed version;
% - do not remove the restrictions on distributing the file.
%
% You are not allowed to take money for the distribution or use of either
% this file or a changed version, except for a nominal charge for copying
% etc.
%
% Have fun!
|