summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/5_4/hhstyles.tex
blob: b966bc2e974ff1c87097d1b0e919a48969b39549 (plain)
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
%\usepackage{hhmuf,hhflxbox}         % for presentation
%\usepackage{hhcount}                % for presentation
%\usepackage{amssymb,epic,curves}    % for illustrations
%\usepackage{verbatim}               % for verbatim displaying of examples
%\usepackage{xspace}                 % for ease of typing

\makeatletter

% The following has been copied from my personal tools style file hhutils.sty
% (NB: This is _not_ the same file as the public style file hhutils0.sty!)

\def\={\verb=}
\def\<#1>{\macroname{#1}}
\def\:{\linebreak[1]}

% The following input definitions used for examples:

% \input hhst11a.tex and hhst11b.tex are input where needed
% \input hhst12a.tex up to hhst12e.tex are input where needed
\input hhst22a.tex
% hhst22b.tex, hhst22c.tex and hhst22d.tex are input where they are needed
\input hhst22e.tex
% hhst23a.tex is input where needed
\input hhst24a.tex
% hhst24b.tex is input where needed
\input hhst32a.tex
\input hhst32b.tex
\input hhst32c.tex

\def\dashbox(#1,#2)(#3,#4){
  \dashline{40}(#1,#2)(#1,#4)\dashline{40}(#1,#4)(#3,#4)
  \dashline{40}(#1,#2)(#3,#2)\dashline{40}(#3,#2)(#3,#4)}
\def\hmeasure(#1,#2)(#3,#4){
  \put(#1,#2){\makebox(0,0)[l]{$\blacktriangleleft$}}
  \put(#3,#4){\makebox(0,0)[r]{$\blacktriangleright$}}
  \drawline(#1,#2)(#3,#4)}
\def\vmeasure(#1,#2)(#3,#4){
  \put(#1,#2){\makebox(0,0)[b]{$\blacktriangledown$}}
  \put(#3,#4){\makebox(0,0)[t]{$\blacktriangle$}}
  \drawline(#1,#2)(#3,#4)}

\def\fancycolumn#1#2#3#4#5#6#7#8{%
  \sbox#1{%
    \sfrcalclength{#2}{#3}{#4}%
    \def\\##1;##2;{\vrule height\@tempdimq width ##1pt\kern ##2pt}%
    \\0.05;0.15;\\0.60;0.44;\\1.11;0.65;\\1.45;0.77;\\1.57;0.77;%
    \\1.45;0.65;\\1.11;0.44;\\0.60;0.15;\\0.05;0;}%
  \sfrsetoffsets{15pt}{#3}{#4}#5#6#7#8}%
\def\fancytympan#1#2#3#4#5#6#7#8{%
  \sbox#1{%
    \sfrcalclength{#2}{#3}{#4}%
    \unitlength\@tempdimq
    \vbox{\hsize\@tempdimq\offinterlineskip
      \hbox{\begin{picture}(1,0.1)
        \thicklines
        \put(0,0){\line(1,0){1}}
        \put(0,0){\line(5,1){0.5}}
        \put(0.5,0.1){\line(5,-1){0.5}}
        \thinlines
        \put(0.5,0.05){\circle*{0.072}}
      \end{picture}}
      \hbox{\vrule width\@tempdimq height 2pt}}}%
  \sfrsetoffsets{\ht#1}{#3}{#4}#5#6#7#8}%

% THE FOLLOWING DEFINITION IS ALSO INCLUDED VERBATIM AS AN EXAMPLE!
\newenvironment{templeboxed}{%
  \begin{sframed}%
    [1]\fancycolumn[2]\fancytympan[1]\fancycolumn[-]\-
    \begin{separboxed}{3pt}
      \begin{broadboxed}{30pt}
}{%
      \end{broadboxed}%
    \end{separboxed}%
  \end{sframed}%
}

\makeatother



\title[\hhmuf, \hhflxbox\ and \hhcount packages]{HH Gets Carried Away: the \hhmuf, \hhflxbox\ and \hhcount packages}
\author[Herman Haverkort]{Herman Haverkort\\\emph{Email}: \texttt{herman@fgbbs.iaf.nl}}
\begin{Article}

\begin{abstract}
\end{abstract}

In this article I present some of the features of three packages,
\hhmuf, \hhflbox\ and \hhcount, that I have written recently. However,
this presentation is far from complete.  A more detailed manual and
the packages themselves can be obtained from the author at {\sc fgbbs}
(tel. +31 85 21 70 41) or CTAN
(\path|macros/latex/contrib/supported/hh|. \hhmuf\ offers `multinotes'
---special cheery footnotes to be used in special situations,
including so-called `forbidden environments'.  \hhflxbox's provides
self-scaling frames: encircling macros are provided but you can define
whatever features you like by means of the macros provided. Finally
\hhcount is presented: macros to handle simple and composite counters
in a fancy way.  \scheiding

\section{Some Features of the \hhmuf Package}

\subsection{Reusable Footnotes and Recycled Markers}

Suppose you have to typeset some tables containing many entries which are
amplified by footnotes outside the table. Several entries, possibly but not
necessarily in the same table, refer to the same footnote.
If references to the same footnote appear in different tables on different
pages, the footnote text should be set on all pages involved,
while the footnote marker should be the same each time the footnote is
set. The first to avoid unnecessary turning over, the second to avoid
confusion.

Typesetting such tables is not very easy in basic \LaTeX. A relatively easy
way to do the job is probably as follows:\begin{enumerate}
\item first get markers for all the footnotes and define macros to set
      the footnote markers;
\item then define a macro \<tablenotes> which typesets the footnotes;
\item then typeset the tables, using the macros defined in the steps
      mentioned above;
\end{enumerate}
Here is some example input:

\verbatiminput{hhst11a.tex}
And the resulting output:

\input hhst11a.tex

This article is too short to demonstrate it, but when typesetting multiple
tables this way problems are likely to arise. If you typeset
another table on the same page, calling \<tablenotes> again will cause the
footnote texts to be typeset twice on the same page. If you typeset
another table on another page, {\em all} table footnote texts will be
typeset on that page, even if the table which is on that page does
not refer to all of them.

The \hhmuf package solves these problems, although the solution of
the twice-on-the-same-page problem may be buggy in rare contexts.
If you use the \hhmuf package you can replace the previous listing by
the following:

\verbatiminput{hhst11b.tex}
And get this result:

\input hhst11b.tex

You will note that \=\mufhire= {\it label\/}\=:{={\it footnote text\/}\=}=
is used to define footnotes. Its opponent is, of course,
\=\muffire= {\it label\/}\=:=, which undefines footnotes, while
\=\muf= {\it label\/}\=:{}= is used to set previously defined
footnotes. As shown in the example, \=\muf=\:\=:{={\it footnote text\/}\=}=
can be used to set incidental footnotes. \=\muf=\:\=:{={\it footnote text\/}\=}=
actually acts as an abbreviation for hiring, typesetting and firing
an incidental note. Thus it is well-suited for setting normal in-text
footnotes.

\hhmuf does not use common footnote markers. Most common sets of
symbols have a well-defined order which makes them ill-suited for
\hhmuf since the \hhmuf macros do not respect that order.
While defining footnotes, markers are assigned in turn. Thus there is
no need to restart footnote numbering every chapter or every page,
because you never run out of markers, unless you hire a lot of them
without ever firing any. Restarting footnote numbering does
not make sense anyway because there is no such
thing as a {\em first} marker.

The set of markers used by \hhmuf can be fully specified by the user,
either by selecting one of the predefined sets or by compiling a new one.
The predefined sets are the following:
\begin{center}
\begin{tabular}{|l|l|}\hline
  set name & markers included\\
\hline\hline
  black    & $\bullet$\,$\blacklozenge$\,$\blacktriangledown$\,$\clubsuit
              $\,$\blacksquare$\,$\blacktriangle$\,$\blacktriangleleft$\,$\spadesuit$\\
\hline
  circlox  & $\oslash$\,$\odot$\,$\boxtimes$\,$\oplus$\,$\square$\,$\circledast$\,$\boxminus
              $\,$\otimes$\,$\circledcirc$\,$\boxdot$\,$\circleddash$\,$\boxplus$\\
\hline
  fuss     & $\ast$\,$\diamondsuit$\,$\circledast$\,$\divideontimes$\,$\sharp
              $\,$\star$\,$\clubsuit$\,$\aleph$\,$\infty$\,$\circlearrowleft$\\
\hline
  geometry & $\blacklozenge$\,$\square$\,$\blacktriangledown$\,$\vartriangle$\,$\blacksquare
              $\,$\triangleleft$\,$\blacktriangle$\,$\lozenge$\,$\blacktriangleleft$\,$\triangledown$\\
\hline
  misc     & $\spadesuit$\,$\triangle$\,$\ominus$\,$\clubsuit$\,$\times
              $\,$\diamondsuit$\,$\otimes$\,$\wr$\,$\odot$\,$\vee
              $\,$\oplus$\,$\infty$\,$\star$\,$\oslash$\,$+$\,$\triangleleft$\,$\top$\,$\bullet$\,$\nabla$\\
\hline
  music    & $\sharp$\,$\flat$\,$\natural$\\
\hline
  strokes  & $\top$\,$\times$\,$\curlyvee$\,$+$\,$\veebar$\,$\nshortparallel$\,$\barwedge$\,$\wr$\\
\hline
\end{tabular}
\end{center}
For details see the documentation in the package file.

\subsection{The Forbidden Environment Problem}

Suppose I typed several pieces of text that have to be typeset all
in the same special way. For that purpose I (re)defined an environment
\envirname{specialtext}:

\verbatiminput{hhst12a.tex}
\newenvironment{specialtext}{}{}\input hhst12a.tex
\input hhst12b.tex
Then I defined a package option in the package I used to typeset
my document. If I specified that option when loading the package,
then \envirname{specialtext} would be defined as follows:

\verbatiminput{hhst12c.tex}
\input hhst12c.tex
Now problems arise. I typeset the same text again:
\input hhst12b.tex
The paragraph is shown framed all right, but something went wrong with
the footnote. With the new definition of \envirname{specialtext},
the footnote suddenly appears in a `forbidden' environment and therefore it
actually disappears. Although the in-text marker is typeset, there is
no note at the foot of the page.

While writing this article I discovered Kresten Krab Thorup's style
file {\tt ftn.sty}\rlap{,}\footnote{Available at {\sc ctan} as
{\tt macros/latex209/contrib/misc/ftn.sty}}
which attempts to solve this problem but does so
quite buggily. Footnotes disappear when forbidden environments are nested.
When multiple footnotes are type-set in forbidden environments, footnotes
are repeated and their numbering is wrong. A modified version of
{\tt ftn.sty} exists (by Zdenek Wagner), which solves the repetition problem
correctly, and suppresses incorrect numbers by omitting them: at least that
is what I got. I tried to contact Krab Thorup about making
{\tt ftn.sty} more robust, but have not so far succeeded.
Nevertheless Krab Thorup's style file contained some very useful ideas,
which I combined with my own ideas to construct a set of macros which
seem to be quite robust. I will now show you the result: how easy it is
to use \hhmuf's footnotes in forbidden environments.

The kind of unpleasant surprises presented above is easy to prevent when
typesetting footnotes with \<muf> instead of \<footnote>,
as in:

\verbatiminput{hhst12d.tex}
When using the first definition of \envirname{specialtext}, this
yields:
\input hhst12a.tex
\input hhst12d.tex
In the following example the second definition of \envirname{specialtext}
is used, but I added one line of code to `protect' the environment:

\verbatiminput{hhst12e.tex}

And here is the result:
\input hhst12e.tex
\input hhst12d.tex

Without changing the text in my document, I could redefine
\envirname{specialtext} to use forbidden environments in such a way
that my footnotes did not disappear. \<mufoff> did the job.

\subsection{Shortcomings: \envirname{minipage} Fans Beware!}
\hhmuf does not support \envirname{minipage}s yet. If \<muf> is used
in a \envirname{minipage} environment, the footnote will be placed
at the foot of the `master page' instead of under the \envirname{minipage}!

\scheiding

\section{The \hhflxbox Package}
\hhflxbox contains a number of boxing macros. The kernel consists of
\<iframe>, which boxes things and sets self-scaling frames around, and
\<sframe>, which sets more complex self-scaling and -stretching frames.
Besides \hhflxbox provides the encircling macros \<ringbox>, \<bellybox>
and \<outringbox> (which use \<iframe>), the macros \<sepbox> and
\<separbox>, which set empty space around boxes, and \<broadbox>, which
boxes its argument in a \<vbox> of which the width is the line width
minus some specified value.

\subsection{\<sepbox> and \<separbox>}
For the introduction of \<sepbox> and \<separbox> it is convenient to
look at \<bellybox> first. \<bellybox> is one of the
\hhflxbox macros which can be used to encircle things, for example
\bellybox:{3}, which is set with: \=\bellybox=\:\=:{3}=.

You probably notice that the circle around the digit is somewhat
tight. This problem can be solved by putting a \<separbox> around the
digit, as in \=\bellybox=\:\=:{\separbox=\:\={1pt}{3}}=, which
yields: \bellybox:{\separbox{1pt}{3}}.
Actually \=\separbox=\:\={={\it dimension\/}\=}{={\it stuff\/}\=}= puts
{\it dimension\/} wide empty space around {\it stuff\/} on all sides.

A more general form is:\\
\=\sepbox=\:\=(={\it leftspace\/}\=,={\it topspace\/}%
\=,={\it rightspace\/}\=,={\it bottomspace\/}\=){={\it stuff\/}\=}=
which adds empty spaces of the specified widths to the sides of the box
containing {\it stuff\/}.

\subsection{\<iframe>: Isomorphous Frames}
\<iframe> is only a frame drawing {\em tool}: it does not draw frames
itself but it can take care of the proper positioning and scaling of frames
drawn by other macros. To explain the functioning of \<iframe> it is
probably best to give an example of the development of a framing macro
using \<iframe>.

Suppose we want to set self-scaling frames which have the following shape:
\begin{center}\unitlength.01pt\sillyshape\end{center}
then we could imagine a box-shaped area in the frame which will contain
the frame's contents (the inner dashed box in the figure below). Also
we could imagine a box surrounding the frame (the outer dashed box in
the figure).
\begin{center}\unitlength.05pt\noindent
  \hbox{%
    \rlap{\sillyshape}%
    \begin{picture}(2000,2000)
      \thinlines
      \dashbox(0,0)(2000,2000)\dashbox(134,500)(1866,1500)
      \hmeasure(134,500)(0,500)\put(67,450){\makebox(0,0)[t]{$x$}}
      \vmeasure(134,500)(134,0)\put(184,150){\makebox(0,0)[l]{$y$}}
      \hmeasure(134,1250)(1866,1250)\put(1000,1300){\makebox(0,0)[b]{$w$}}
      \vmeasure(584,500)(584,1500)\put(634,800){\makebox(0,0)[l]{$h=1000$}}
    \end{picture}}%
\end{center}

Since \<iframe> expects the inner box height to be $1000$ times the
\<unitlength>, all dimensions have to be chosen so that the inner box
height equals $1000$ indeed. Then \<iframe> can scale the frame by
setting the \<unitlength>. Furthermore \<iframe> expects the lower left
corner of the outer box to have coordinates $(0,0)$. Taking these
expectations in account we can design a macro which draws the frame:

\verbatiminput{hhst22a.tex}

\noindent (\<arc> is defined in the \packagename{curves} package by
I.~L.~Maclaine-Cross.)  Now we can define a silly shape framing macro
by defining \<sillyframe>
as: \=\iframe=\:\=\sillyshape=\:\=(=$x$\=,=$y$\=){=$w$\=}{0pt}\ifrch=\:%
\=\ifrcv=\:\=:{#1}=. Actually we will set \=#1= in a
\=\sepbox=\:\=(0pt,2pt,0pt,2pt){#1}= to prevent the frame from touching
its contents. In the above example we have $x=134$, $y=500$ and $w=1732$,
so we write:

\verbatiminput{hhst22b.tex}

\input{hhst22b.tex}

Note that I do not claim this kind of silly frame to be good-looking:
it is just an example.

The dimension \=0pt= in the example above determines the minimal height
of the silly frame's inner box. Sometimes it is necessary to define it
because \LaTeX's picture environment suppresses small line segments.

The macro \<ifrch> determines what should be done if the frame's
contents width/height ratio is too small. By specifying \<ifrch>
we instruct \<iframe> to center the contents. Instead of
\<ifrch> we could have specified \<ifrl> or \<ifrr> to
have the contents flush left or right.

The macro \<ifrcv> determines what should be done if the frame's
contents height/width ratio is too small. \<ifrcv> yields
vertical centering, while \<ifrt> and \<ifrb> yield top and bottom
flushing.

If we put frames around for example page numbers, then
the self-scaling properties of isomorphous frames may have an unpleasant
result: numbers of the same type, like
page number \sillyframe{\oldstylenums{21}} and
page number \sillyframe{\oldstylenums{25}}, might get differently sized
frames because of their different natural sizes. This can be solved by
redefining \<sillyframe> to specify a {\em unit name}, since all things
typeset with the same unit name get equally sized frames. The unit name,
for example \=pagenr=, should be placed between the vertical alignment
specification and the colon, like in:

\verbatiminput{hhst22c.tex}
which yields (after compiling our document twice):

\input hhst22c.tex

However, this is not fully satisfactory yet: now the frames are equally
sized but the first frame is positioned higher than the second.
This is no bug, it is a feature. No really, it is! It is, however, a
sometimes unwanted feature. The solution is using \<lcenter> to center
the frames on their line, like in:

\verbatiminput{hhst22d.tex}

\noindent resulting in:

\input hhst22d.tex

\leavevmode\jarframe{As} a final example of isomorphous frames, consider
the following framing macro.
Note that the inner box height is $1000$ again, as expected
by \<iframe>.
\begin{center}\unitlength.05pt\noindent
  \hbox{%
    \rlap{\jarshape}%
    \begin{picture}(1800,1500)
      \thinlines
      \dashbox(0,0)(1800,1500)\dashbox(300,180)(1500,1180)
      \hmeasure(300,180)(0,180)\put(150,280){\makebox(0,0)[br]{$x=300$}}
      \vmeasure(300,180)(300,0)\put(400,60){\makebox(0,0)[l]{$y=180$}}
      \hmeasure(300,930)(1500,930)\put(1050,980){\makebox(0,0)[b]{$w=1200$}}
      \vmeasure(550,180)(550,1180)\put(600,500){\makebox(0,0)[l]{$h=1000$}}
    \end{picture}}%
\end{center}

\verbatiminput{hhst22e.tex}

\subsection{\<ringbox>, \<bellybox> and \<outringbox>: Encircling}

\=\ringbox{={\it optional unit name\/}\=}:{={\it stuff\/}\=}= sets
a circle around {\it stuff\/}. The specification of a unit name is optional;
its use is explained above.

\<outringbox> is very much like \<ringbox>,
but the following example demonstrates their difference:

\verbatiminput{hhst23a.tex}
yields:

\input hhst23a.tex

If \<ringbox> is used, the circle contributes to the width, height and
depth of the result. If \<outringbox> is used, the circle does not
contribute any width, height or depth, so that the text is typeset as
if the circle were not present and the circle were added after typesetting
the text.

The result of \<bellybox> is a circle which contributes a bit to the
dimensions of the encircled result but also sticks out a bit
(by 10 percent of its radius to be sort of exact). So \<bellybox> is
an intermediate form of \<ringbox> and \<outringbox>.

\subsection{\<sframe>: Stretchable Frames}

Putting \<sframe> to good use is a rather complex task. \<sframe>
assembles user-defined frame components which actually are macros which
set the values of a box and several dimension registers. Therefore I
decided to give only an example of what can be achieved in this article;
for explanation see the manual and demo files available at {\sc fgbbs}.

If one has defined suitable macros \<fancycolumn> and \<fancytympan>, one
can define:

\verbatiminput{hhst24a.tex}

\noindent  which should be read as: after 3pt wide empty space is set
around \=#1=, first add columns to the left and the right, second put
a tympan on top of the result, and never put anything at the foot.
Then typing this:

\verbatiminput{hhst24b.tex}
will yield:

\leavevmode\input hhst24b.tex

\subsection{\<broadbox> for Setting Line Wide Frames}

\noindent
\begin{templeboxed}
\<broadbox> can be useful to set frames that fill the line. Its use is best
explained through an example. Suppose we want to set a paragraph of text
in a line wide temple box. Then the lines will be filled by (from left to
right): a column, empty space added by \<separbox>, text, empty space and
a column. In other words: the whole line is available for setting text,
except for the space needed by the columns and the empty space set by
\<separbox>. The columns are 12pt each while \<separbox> adds 3pt wide empty
space to the left and the right: that makes a total of 30pt. So we write:
\=\templebox=\:\={\broadbox=\:\={30pt}{\broadbox= \=can= \=be= \ldots
\=\textit=\:\={dimension}.}}=, which yields a paragraph typeset like this.
So \=\broadbox=\:\={={\it dimension\/}\=}{={\it stuff\/}\=}= sets {\it stuff\/}
in a \<vbox> which has width line width minus \textit{dimension}.
\end{templeboxed}

\subsection{Environment Versions}

Some of the macros defined in \hhflxbox are available as \LaTeX\
environments. For example: instead of \=\broadbox=\:\={30pt}{={\it
text to be boxed\/}\=}= one could also use \=\begin=\:\={broadboxed}{30pt}=
{\it text to be boxed\/}\=\end=\:\={broadboxed}=. Similarly one
could use the environments \envirname{sepboxed}, \envirname{separboxed}
and \envirname{sframed} instead of the macros \<sepbox>, \<separbox>
and \<sframe>.

Actually I have to confess something: I lied to you about the
typesetting of the section about \<broadbox>. I did it with:

\begin{verbatim}
\newenvironment{templeboxed}{%
  \begin{sframed}%
    [1]\fancycolumn [2]\fancytympan
    [1]\fancycolumn [-]\-
    \begin{separboxed}{3pt}
      \begin{broadboxed}{30pt}
}{%
      \end{broadboxed}%
    \end{separboxed}%
  \end{sframed}%
}

\begin{templeboxed}%
  \broadbox can be useful to set frames that
       :        :        :        :        :
  width line width minus dimension.
\end{templeboxed}
\end{verbatim}

I hope you will forgive me my cheating. I mean, without using
these environments, typesetting verbatim stuff is so troublesome\ldots

\scheiding

\section{Some Features of the \hhcount Package}

\subsection{Simple Number Formatting}

Let us start by summarizing the simple
number formatting macros which are provided by \hhcount:
\begin{center}
\begin{tabular}{|l|c||c|}\hline
  example input         & \vbox{\hbox{corresp.\strut}%
                            \hbox{output\strut}} &
                                               \vbox{\hbox{other example\strut}%
                                                     \hbox{output\strut}} \\
\hline\hline
  \=\fctabdigit{2}=      & \fctabdigit{2}        & \fctabdigit{29}       \\
\hline
  \=\fcolddigit{2}=      & \fcolddigit{2}        & \fcolddigit{29}       \\
\hline
  \=\fcloweralpha{2}=    & \fcloweralpha{2}      & \fcloweralpha{29}     \\
\hline
  \=\fcbigalpha{2}=      & \fcbigalpha{2}        & \fcbigalpha{29}       \\
\hline
  \=\fcsmallalpha{2}=    & \fcsmallalpha{2}      & \fcsmallalpha{29}     \\
\hline
  \=\fclowerroman{2}=    & \fclowerroman{2}      & \fclowerroman{29}     \\
\hline
  \=\fcbigroman{2}=      & \fcbigroman{2}        & \fcbigroman{29}       \\
\hline
  \=\fcsmallroman{2}=    & \fcsmallroman{2}      & \fcsmallroman{29}     \\
\hline
  \=\fcbigromanlined{2}= & \fcbigromanlined{2}   & \fcbigromanlined{29}  \\
\hline
  \=\fcsmallromanlined{2}= & \fcsmallromanlined{2} & \fcsmallromanlined{29} \\
\hline
  \=\fcbigdice{2}=       & \fcbigdice{2}         & \fcbigdice{29}        \\
\hline
  \=\fcsmalldice{2}=     & \fcsmalldice{2}       & \fcsmalldice{29}      \\
\hline
  \=\fcbigscore{2}=      & \fcbigscore{2}        & \fcbigscore{29}       \\
\hline
  \=\fcsmallscore{2}=    & \fcsmallscore{2}      & \fcsmallscore{29}     \\
\hline
  \=\fcfnsymbol{2}=      & \fcfnsymbol{2}        &                       \\
\hline
\end{tabular}
\end{center}

The next step in complexity are number formatting macros which give
context-dependent output. This is implemented by using the {\it context
switches} \=\if@fcoldstyle= and \=\if@fcsmall=, which are set by
context switching macros like \<fcinheading> and \<fcintext>. We say that
a context switching macro is active if it was the last one to affect
the context switches.
\begin{center}
\begin{tabular}{|l|c|c|}\hline
  example input         & \vbox{\hbox{output when\strut}%
                            \hbox{\<fcinheading>\strut}%
                            \hbox{is active\strut}}
                                              & \vbox{\hbox{output when\strut}%
                                                    \hbox{\<fcintext>\strut}%
                                                    \hbox{is active\strut}}  \\
\hline\hline
  \=\fcdigit{14}=      & {\fcinheading\fcdigit{14}} & {\fcintext\fcdigit{14}} \\
\hline
  \=\fcalpha{14}=      & {\fcinheading\fcalpha{14}} & {\fcintext\fcalpha{14}} \\
\hline
  \=\fcroman{14}=      & {\fcinheading\fcroman{14}} & {\fcintext\fcroman{14}} \\
\hline
  \=\fcromanlined{14}= & {\fcinheading\fcromanlined{14}}
                                              & {\fcintext\fcromanlined{14}} \\
\hline
  \=\fcdice{14}=       & {\fcinheading\fcdice{14}}  & {\fcintext\fcdice{14}}  \\
\hline
  \=\fcscore{14}=      & {\fcinheading\fcscore{14}} & {\fcintext\fcscore{14}} \\
\hline
\end{tabular}
\end{center}

By default \<fcinheading> is active; \<fcintext> is active when using
\<ref> or \<pageref> (those two macros are redefined by \hhcount).

\subsection{How to Define Composite Counters}

I will now try to give an impression of the way in which composite
counters can be defined using \hhcount. However, this is \emph{not} a manual.
After reading the following paragraphs you may be able to hack a
composite counter together yourself, by imitating what is done below
and experimenting with some small modifications of your own. If you
want to be taught how to use \hhcount efficiently and effectively, then
you should read the manual.

Suppose we want to set up a three-level section numbering system for
some sub-document in another document, for example the rules of a club
embedded in some booklet about that club.
The section numbers should be composed from the values of three
\hbox{(sub-)}counters: {\tt ruleschapter},
{\tt rulessection} and {\tt rulesparagraph}. Chapter numbers
should be represented by capital alphabetic characters;
elementary section and paragraph numbers by arabic digits.
What should be done?

First we select a {\it series identifier} for our composite counter.
Series identifiers are natural numbers which are assigned to
composite counters. Each composite counter should be assigned a unique
identifier. Because identifiers {\tt 1} to {\tt 8} and {\tt 12}
are reserved for common purposes we select {\tt 9} for our rules section
numbers.

Then we define a macro which expands to the series identifier:

\verbatiminput{hhst32a.tex}

Next we specify how the three sub-counters are to be combined:

\verbatiminput{hhst32b.tex}

And finally we define how the counter is to be formatted:

\verbatiminput{hhst32c.tex}

If you want to understand the definition above, read the manual.

\subsection{The Result}

Now the composite counter can be accessed by the macros
\<theruleschapter>, \<therulessection> and \<therulesparagraph>,
which give results like: ``\fancycounter9-1-0-0-!'',
``\fancycounter9-1-2-0-!'' and ``\fancycounter9-1-2-3-!''.
The macros \=\stepcounter=\:\={ruleschapter}=,
\=\stepcounter=\:\={rulessection}= and
\=\stepcounter=\:\={rulesparagraph}= can be used to step the counter.

When \<fcinheading> is active, rules paragraph numbers will be set like
``{\fcinheading\fancycounter9-1-2-3-!}'', but when \<fcintext> is active,
the same number will be set like ``{\fcintext\fancycounter9-1-2-3-!}''.

More complex distinctions in representation of counters are possible.
\hhcount provides a set of macros which can be used in the last argument
of \<setcounterformat>. Those macros enable definition of counters
which are set like ``A2.3'' in headings and like ``section {\sc a}\02.,
par. \03.'' in text etc. For details see the manual.

\subsection{\hhcount and \texttt{makeindex}}

Composite section numbers like ``A2.3'' cannot be handled by the
{\tt makeindex} program. Besides, {\tt makeindex} has problems
with sorting alphabetic numbers since it cannot determine whether
or not they are roman numbers. \hhcount provides a way to get around
these problems.

All composite numbers defined by \hhcount constructs
are internally represented by a sequence of natural numbers, separated
by hyphens and embedded in a macro call. A typical example is
\=\fancycounter= \=9-1-2-3-!=. The first number represents the
series identifier (\=9= in the example), while the following
numbers represent the values of the relevant sub-counters.

\hhcount provides macros \<initfancycounters>, \<indextolabels> and
\<indextopages>. The first redefines the section and page numbering
systems to use \hhcount's composite counters. \<indextolabels> sort of
redefines \<index> to use the redefined section numbers and strip the
\<fancycounter> and the \=-!= off the composite counter representation.
\<indextopages> does the similar thing for page numbers.
In both cases the result is a sequence of natural numbers,
separated by hyphens, which can be handled perfectly well by
{\tt makeindex}.
By embodying the appropriate definitions in your index style
(\hbox{\tt .ist}) file {\tt makeindex} will undo the stripping after
sorting the page or section numbers, so that your index entries will
still be typeset as defined by means of \hhcount macros. Thus section
numbers like ``A2.3'' can be used for references in the index.
Inserting equation, table and figure numbers in the index is just as
easy. It is
even possible to have different kind of composite numbers in the
same index, for example page as well as section numbers, because
the series identifiers are not stripped off so that it remains possible
to determine the proper series and formatting of each composite number.
For details see the manual.

\subsection{Bugs and Deficiencies}

Class files tend to make the \TeX\ compiler show on your terminal
which chapter of your book or report is being processed. Error messages
often contain the page number. When using \hhcount
there is a chance that the chapter and page numbers shown on your
terminal look weird: you will be shown the internal representation
of your counter (\=\fancycounter= \=9-1-0-0-!= for example). This is
caused by an incorrect timing of macro expansion: in this case
\<fancycounter> is expanded too late (that is to say, not at all).

Late expansion with \hhcount is typically a problem with
error and other messages: I would be highly surprised if someone
discovers something like \=\fancycounter= \=9-1-0-0-!= outside
verbatim environments in a typeset document. However, when compiling your
document you might run into early expansion, which causes severe errors.
With the latest version of \hhcount this problem does not seem to
emerge in `usual' contexts; however I am not sure.

Front matter, appendix and back matter peculiarities (with respect
to page and section numbering) are not automatically supported
by \hhcount. Class
files are too different in that respect. If \hhcount is to be used
to handle the section and page numbering in documents containing
front matter and appendices, it would probably be best to incorporate
\hhcount in the class file, instead of loading it as an additional
package.

\subsection{Gamesters Page Numbers}

The following redefines the {\tt page} counter so that page numbers
will be set as dice (I designed this for a gamesters society):

\begin{verbatim}
\def\fcpageseries{12}
\combinecounters\fcpageseries{\\{page}}
\setcounterformat\fcpageseries{#1}{%
  \fcorfinally
  \fcformat{#1}\fcdice
  \fcordespair}
\end{verbatim}

I could not resist giving you this as an final example.

\end{Article}