summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/flabels/flabels.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/flabels/flabels.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/flabels/flabels.dtx')
-rw-r--r--macros/latex/contrib/flabels/flabels.dtx944
1 files changed, 944 insertions, 0 deletions
diff --git a/macros/latex/contrib/flabels/flabels.dtx b/macros/latex/contrib/flabels/flabels.dtx
new file mode 100644
index 0000000000..f152efa518
--- /dev/null
+++ b/macros/latex/contrib/flabels/flabels.dtx
@@ -0,0 +1,944 @@
+% \iffalse
+%% File: flabels.dtx
+%% Copyright (C) 1997,1999 Volker B"orchers
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{flabels}
+%<package>[1999/05/19 v1.0 Macros for file/binder labels]
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[nice]{flabels}
+\GetFileInfo{flabels.sty}
+\begin{document}
+\title{The \textsf{flabels} package\thanks{This file has version number
+ \fileversion, dated \filedate.}}
+\author{Volker B\"orchers\thanks{email: boercher@physik.uni-bremen.de}\\
+ Universit\"at Bremen}
+\date{\filedate}
+ \maketitle
+ \DocInput{flabels.dtx}
+\end{document}
+%</driver>
+% \fi
+%\iffalse
+%
+%% Package `flabels' to use with LaTeX2e
+%
+% Version: Date: Changes:
+%
+% 1.0 1997/07/16 First working version for "Leitz-Ordner"
+% optionally including color
+% 1999/05/19 Only change: added licence informations
+%\fi
+%
+%
+% \DoNotIndex{\advance,\box,\CurrentOption,\DeclareOption,\def}
+% \DoNotIndex{\else,\fi,\hrule,\hspace,\newdimen,\newif}
+% \DoNotIndex{\ifnum,\loop,\MessageBreak,\newcount,\divide}
+% \DoNotIndex{\PackageWarning,\ProcessOptions,\relax,\repeat}
+% \DoNotIndex{\color,\textcolor,\colorbox,\begin,\end,\endinput}
+% \DoNotIndex{\framebox,Rest,\huge,\line,\linethickness,\makebox}
+% \DoNotIndex{\multiput,\newsavebox,\parbox,\protect,\put,\RequirePackage}
+% \DoNotIndex{\savebox,\thinlines,\thicklines,\usebox,\setlength}
+% \DoNotIndex{\l@itztrue,\l@itztrue,\f@llheighttrue,\n@rrowtrue}
+% \DoNotIndex{\f@llheighttrue,\n@rrowtrue}
+% \DoNotIndex{\colorl@beltrue,\be@nicetrue,\no@holetrue}
+% \DoNotIndex{\l@itzfalse,\l@itzfalse,\f@llheightfalse,\n@rrowfalse}
+% \DoNotIndex{\f@llheightfalse,\n@rrowfalse}
+% \DoNotIndex{\colorl@belfalse,\be@nicefalse,\no@holefalse}
+%
+% \CheckSum{368}
+%
+% \begin{abstract}
+% This package provides macros for typesetting pretty labels
+% (optionally colored) for the back of files or binders. So far
+% they are only applicable for the special format of the (for
+% a4 paper) widely used ``Leitz-Ordner'' (ring binder). We use 2
+% macros, the first one for a number of empty labels (for
+% handwriting) while the second contains a text field.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+% Thanks to photo-copiers a lot of paper is produced that has to be kept
+% somewhere and (perhaps) even in some order. If you want to keep an
+% overview over it you will punch it and put it into a file/binder
+% (otherwise one or more stacks will do). This package have been
+% invented to make life with this binders a little bit nicer, prettier
+% and more colored.
+%
+% The |flabels| (`filelabels') package provides two macros for
+% producing labels for the back of a binder in the wide-spread format
+% (for a4 paper!) 28.3 $\times$ 31.8 cm (11.1 $\times$ 12.5 inch) with
+% the back height 31.8 cm (12.5 inch) and different available widths.
+%
+% \newlength{\mytextwidth}\setlength{\mytextwidth}{\textwidth}
+% \addtolength{\mytextwidth}{-2\fboxsep}
+% \smallskip\noindent
+% \fbox{\parbox{\mytextwidth}{I hope that further
+% versions of the |flabels| package will support more than one
+% binder format. (But this will depend on \emph{You}, the
+% friendly reader who want to contribute to |flabels| by adding
+% support for \emph{Your} favourite binder \texttt{:-)}.}}
+%
+%
+% \section{Using the flabels package}
+% Invoke the |flabels| package by requesting it in the
+% preamble (Note that this package requires \LaTeXe!):
+%
+% |\usepackage[...]{flabels}|
+%
+%
+% \subsection{Quick start}\label{sec:quick}
+% \begin{itemize}
+% \item Use option |a4paper| if you need it.
+% \item Check the format of the binder you have: If the label should be
+% 37mm wide choose option |narrow|; the \emph{default} width is 60mm.
+% \item Decide if you want large labels (full height of the binder back).
+% If you do include option |fullheight| in the |usepackage| command.
+% \item Use option |color| if you have a color printer or if your
+% printer at least can translate colors into greyscale-`colors'.
+% \item Neither call any package that sets page layout parameters (like
+% |\textheight|) \emph{after} |flabels| nor set them by yourself.
+% \item If you are using colors: Create a file |color.cfg| including
+% the line |\ExecuteOptions{<driver>}|, where |<driver>| stands for
+% your color graphics driver, e.g.\ |dvips| or |xdvi| (see description
+% of the |color| package).
+% \item If you are using colors: Set the fore- and background colors for
+% the ``company label'' and the whole label using |\setbgcompany|,
+% |\setfgcompany|, |\setbglabel|, |\setfglabel|, each one of this
+% accepts a color name as argument.
+% \item Choose the text for the ``company label'' (the command for
+% getting the default would be |\company{\huge LEITZ}|).
+% \item In the document:
+% \begin{itemize}
+% \item If you want to create 4 ``empty'' labels for handwriting use
+% command |\emptylabel{4}|
+% \item If you want to print a label with text use the macro
+% |\labeltext{text}|.
+% \item Avoid empty lines (paragraphs) between the label because this
+% may lead to a wrong vertical and horizontal placement of the
+% labels.
+% \end{itemize}
+% \item Check for overfull |\hboxes| and (if necessary for the printer)
+% shift the labels on the page up- or downwards using the macro
+% |\extratopmargin<dim>|.
+% \end{itemize}
+%
+%
+% \subsection{Options}\label{sec:opt}
+%
+% The package recognizes the following options\DescribeMacro{Options}:
+% |leitz|, |fullheight|, |narrow|, |color|, |a4paper|, |nice| and |nohole|.
+%
+% \begin{description}
+% \item[\texttt{leitz}] This option is more-or-less a ``dummy option''
+% since |leitz| is the default and, even more, the user has no other
+% choice. Nevertheless it is an option because this should change in
+% the future. To cut a long story short: You can ignore this option
+% for now!
+% \item[\texttt{fullheight}] See the pictures for the difference between
+% |fullheight| and labels of normal height in
+% sec.~\ref{sec:exam}. You may switch from large labels to the smaller
+% ones (and vice versa) whenever you want from inside the document
+% using the macros |\fullheight| and |\normalheight|.
+% \item[\texttt{narrow}] Change the default width of the labels from
+% 60mm to 37mm. You may also change the width from inside the document
+% with the commands |\narrowlabels| and |\widelabels|.
+% \item[\texttt{color}] Use this option if you have a color
+% printer\footnote{You may also use colors if your printer can
+% translate real colors into greyscale-`colors'!} to
+% include the standard \LaTeXe\ package |color|. This package (see
+% |color|-documentation |grfguide.tex|) needs to know the driver for
+% which the color informations should be generated. So you have to create
+% a file |color.cfg| including the line |\ExecuteOptions{<driver>}|,
+% where |<driver>| stands for your color graphics driver, e.g.\
+% |dvips| or |xdvi|. The colors to be used may be set in the preamble
+% or in the document (see sec.\ \ref{sec:usercmd}).
+% \item[\texttt{a4paper}] So far only ``Leitz-Ordner'' are supported by
+% this package which are used for a4 paper. So normally you will
+% include this option (or use the equivalent option for the
+% document classes.
+% \item[\texttt{nice}] This option should be used \emph{only} if you
+% want to include labels in a normal document! Normally this package
+% uses the whole page, changing nearly every layout parameter. Since
+% this makes |flabels| very un-co-operative and forbids the use of
+% this package inside a normal text document (unlikely that there is
+% any need for this this but the documentation you read now uses the
+% option |nice|). The option |nice| makes |flabels| nicer to other
+% packages. Warning: If you use this option you have to take care
+% for correct placement on the page for yourself!
+% \item[\texttt{nohole}] Do not include a marker for the hole in the
+% back of a ``Leitz-Ordner'' (to be used for an exact alignment of the
+% label).
+% \end{description}
+%
+% \subsection{User commands}\label{sec:usercmd}
+% It follows a complete list of all user accessible macros, lengths and
+% counters.
+% \subsubsection{Label properties}
+% Some of these macros have been described before in the options
+% section.
+% \begin{itemize}
+% \item To switch to narrow labels use the macro
+% |\narrowlabels|\DescribeMacro{\narrowlabels}.
+% \item To switch to wide labels use the macro
+% |\widelabels|\DescribeMacro{\widelabels}.
+% \item To switch to large labels use the macro
+% |\fullheight|\DescribeMacro{\fullheight}.
+% \item To switch to small labels use the macro
+% |\normalheight|\DescribeMacro{\normalheight}
+% \item To change the text of the ``company label'' use the macro
+% |\company{<name>}|\DescribeMacro{\company}
+% \item\DescribeMacro{numberauxlines} Change the number of auxiliary
+% lines in |\emptylabel| this way:\\
+% |\setcounter{numberauxlines}{<number>}|
+% (default is |4|). Usually you will also change the distance between
+% the lines \dots
+% \item \dots\ using the macro
+% \DescribeMacro{\auxlinedistance}|\auxlinedistance<dim>| where
+% |<dim>| can be any valid \TeX-dimension.
+% \item You may also change the appearance of the ``company label'' via
+% the redefinition of this three \emph{macros}:
+% \DescribeMacro{\companylabelheight}|\companylabelheight|,
+% \DescribeMacro{\ylowercompany}|\ylowercompany| and
+% \DescribeMacro{\yuppercompany}|\yuppercompany|. Each of them are
+% set to a \emph{number}, that is a lenght measured in the unit
+% |mm|. You can get the default height of the company label e.g.\ by
+% |\renewcommand{\companylabelheight}{17}|, since --by default-- this
+% height is |17mmm|. The other two macros determine the \emph{y-coordinate
+% of the bottom} of the upper and the lower label. Their default (for
+% |leitz|) are |160| resp.\ |-68|.
+% \end{itemize}
+% \subsubsection{Changing colors}
+% Set the fore- and background colors for the ``company label'' and the
+% whole label using |\setbgcompany|\DescribeMacro{\setbgcompany},
+% |\setfgcompany|\DescribeMacro{\setfgcompany},
+% |\setbglabel|\DescribeMacro{\setbglabel} and
+% \DescribeMacro{\setfglabel}|\setfglabel| (|fg| stands for `foreground'
+% and |bg| for `background'), e.g.\ |\setbglabel{white}|.
+%
+% You have to use (predefined) color-\emph{names}, like
+% |black| or |red|. Which names are already defined depends on you
+% graphics driver. You may define \emph{new} colors following the
+% |color|-package documentation |grfguide.tex|.
+%
+% \subsubsection{Layout parameters}
+% As mentioned in the options section (see discussion of option |nice|,
+% this package leaves only few layout parameters untouched to make the
+% labels fit onto a page. Vertically there is no room for a user to
+% adjust anything except the distance between the border of the paper
+% and the labels. This is accessible via the macro
+% |\extratopmargin<dim>|\DescribeMacro{\extratopmargin}. The
+% default for this length is |0mm| -- then the large labels will be
+% vertically centered on the page. With a positive |\extratopmargin| the
+% labels will be shifted down (negative values are allowed).
+%
+% The horizontal layout is not that restricted, for example you can
+% change the text width (as usual using the macro |\textwidth|) and all
+% margins. The distance between two labels is generally handled by
+% \TeX\ like any space between two words. (There must be space between
+% the labels in order to give \TeX\ the chance to break ``lines'' of
+% labels!) You may want to specify a \emph{minimum} distance (default
+% is |0mm|) using
+% |\setlength{\hspaceinterlabel}{<dim>}|\DescribeMacro{\hspaceinterlabel}.
+%
+% The distance between the text box of |\labeltext| and the label
+% border is controlled by the length
+% |\labeltextmargin|\DescribeMacro{\labeltextmargin}. It is preset to
+% |3mm|. This value is at the same time top-, left- and right margin of
+% the text (the lower boundary is free). It can be changed directly this
+% way: |\setlength{\labeltextmargin}{<dim>}|.
+%
+% \subsubsection{Creating labels}
+% To create labels you have the choice between 2 macros:
+% \DescribeMacro{\emptylabel}|\emptylabel{<number>}| and
+% \DescribeMacro{\labeltext}|\labeltext{<text>}|. Instead of a longish
+% discussion look at the examples in sec.~\ref{sec:exam}. Note that the
+% argument of |\labeltext| is typeset as plain text -- there is no predefined
+% font change etc. The only special is the switch to the text color
+% |\c@lorl@bel@fg| (if option |color| is chosen). If you want all your
+% labels to be typeset in a special font perhaps with a title in a
+% larger font size, you should define a macro, e.g.\ like this:
+% \begin{verbatim}
+% \newcommand{\mylabel}[2]{\labeltext{\vspace{1ex}\sffamily%
+% \begin{flushleft}%
+% \textbf{{\huge #1}}\\
+% \textsl{\Large\flushleft{\large #2}}%
+% \end{flushleft}}}
+% \end{verbatim}
+% To get a good positioning of the labels may take a while. The
+% best advice I can give is: Avoid `paragraphs' between the labels,
+% perhaps you have to remove also any `space' by ending the lines
+% with a |%|. Then insert pagebreaks, |vspace| and |hspace| as
+% needed. Having both large and small labels (|\fullheight| and
+% |\normalheight|) on one page results in a wrong vertical placement
+% of the smaller labels (the \emph{bottoms} of the labels instead of
+% their reference points are vertically aligned)\footnote{The
+% reason for that I currently do not unterstand, perhaps \emph{You} do?!}
+%
+% \subsection{Examples}\label{sec:exam}
+% The following labels are drawn with a |\unitlength| of |0.5mm| instead
+% of |1mm| (that is why they fit onto this page!). The \emph{vertical}
+% label position on the paper (paper contour is drawn too) is the
+% original one, while the \emph{horizontal} positioning shown here is
+% very unusual (therefore you had to vary |\textwidth|, |\odd|- and
+% |\evensidemargin|).
+%
+% \makeatletter
+% \setlength{\unitlength}{0.5mm}
+% \cnt@paperheight=297
+% \cnt@pictvoffset=5
+% \company{\large LEITZ}
+% \begin{center}
+% \begin{picture}(210,297)
+% \iffalse ------ the paper contour ------ \fi
+% \multiput(0,0)(210,0){2}{\line(0,1){297}}
+% \multiput(0,0)(0,297){2}{\line(1,0){210}}
+% \iffalse -- Update necessary due to new unitlength -- \fi
+% \savebox{\theh@le}{%
+% \begin{picture}(\hole@diameter,\hole@diameter)(17,17)
+% \linethickness{0.01pt}
+% \put(0,\hole@radius){\line(1,0){\hole@diameter}}
+% \put(\hole@radius,0){\line(0,1){\hole@diameter}}
+% \end{picture}%
+% }
+% \put(3,3){\framebox(100,61){\parbox{47mm}{
+% \footnotesize \textbf{The vertical positioning} of the labels can be
+% understood this way: The large labels are centered vertically on the
+% page. The position of the small labels is fixed by the constraint
+% that all labels should share the same reference point
+% \texttt{(0,0)}. (That is why the ``company labels'' are all
+% aligned.)
+% }}}
+% \iffalse ------------ 1. label -------------------- \fi
+% \put(3,101){\emptylabel{1}}
+% \put(3,66){\framebox(\l@belwidth,28){\parbox{27mm}{
+% \footnotesize One empty label (\texttt{\bslash emptylabel\{1\}}),
+% wide and small (this is the default)}}}
+% \iffalse ------------ 2. label -------------------- \fi
+% \company{\large\textsf{narrow}}
+% \narrowlabels
+% \put(66,101){\emptylabel{1}}
+% \put(66,66){\framebox(\l@belwidth,28){\parbox{15.5mm}{
+% \footnotesize One empty label, narrow and small}}}
+% \iffalse ------------ 3. label -------------------- \fi
+% \iffalse one text label (narrow, fullheight) \fi
+% \company{\large\textsf{fullheight}}
+% \fullheight
+% \put(102,12){%
+% \labeltext{\hspace{0.25\l@beltextwidth}\parbox{0.5\l@beltextwidth}{
+% \sf\footnotesize
+% \begin{flushleft}
+% This narrow and large label has been generated with
+% \texttt{\bslash labeltext} after commands \texttt{\bslash
+% narrow\-labels} and \texttt{\bslash fullheight}
+% \end{flushleft}
+% }}}
+% \iffalse ------------ 4. label -------------------- \fi
+% \iffalse one text label (wide, fullheight) \fi
+% \company{\large\textsf{wide}}
+% \widelabels
+% \put(142,12){%
+% \labeltext{\hspace{0.25\l@beltextwidth}\parbox{0.5\l@beltextwidth}{
+% \sf\footnotesize
+% \begin{flushleft}
+% This wide and large label has been generated with
+% \texttt{\bslash labeltext} after commands \texttt{\bslash
+% widelabels} and \texttt{\bslash fullheight}. The ``company
+% name'' has been changed with \texttt{\bslash
+% company\{\bslash huge \bslash textsf\{wide\}\}}.
+% \end{flushleft}
+% }}}
+% \end{picture}
+% \end{center}
+% \makeatother
+%
+% \pagebreak[2]
+% The next picture is not an example, but gives a listing of nearly all
+% dimensions used by this package and a description of `empty' and
+% text labels. Note that all variables containing an |@| are not
+% directly accessible in the document (but some are via macros).
+%
+% \iffalse
+% In the following pictures I had to change some lenghts and
+% positions compared to the original values to get correct
+% miniatures of the labels.
+% \fi
+% \makeatletter
+% \setlength{\unitlength}{0.6mm}
+% \cnt@paperheight=297
+% \fullheight
+% \widelabels
+% \label{all_dimens}
+% \begin{picture}(\l@belwidth,300)(-55,-105)
+% \small
+% \iffalse --------- First the label... --------\fi
+% \savebox{\c@mpanyl@bel}{\thicklines
+% \dashbox{2}(\l@belwidth,\companylabelheight){\c@mpany}}%
+% \savebox{\theh@le}{%
+% \begin{picture}(\hole@diameter,\hole@diameter)(17,14.5)
+% \linethickness{0.01pt}
+% \put(0,\hole@radius){\line(1,0){\hole@diameter}}
+% \put(\hole@radius,0){\line(0,1){\hole@diameter}}
+% \put(0,0){\dashbox{2}(\hole@diameter,\hole@diameter){}}
+% \end{picture}%
+% }
+% \l@beloutline
+% \multiput(-2,\cnt@auxlinedistance)(0,\cnt@auxlinedistance){%
+% \value{numberauxlines}}{\line(1,0){\l@belwidth}}
+% \iffalse --------- ... Now the description of it: -------\fi
+% \multiput(-33,0)(10,0){13}{\line(1,0){5}}\put(95,2){%
+% \makebox(0,0)[l]{\parbox{2.5cm}{\flushleft{lower part only for
+% \texttt{fullheight}!}}}}
+% \put(-10,-6.67){\vector(3,2){10}}
+% \put(-10,-10){\makebox(0,0)[r]{(0,0)}}
+% \put(70,-96.67){\vector(-3,2){10}}
+% \put(70,-100){\makebox(0,0)[l]{
+% (\texttt{\bslash l@belwidth},\texttt{\bslash l@belbase})}}
+% \put(-10,-96.67){\vector(3,2){10}}
+% \put(-10,-100){\makebox(0,0)[r]{
+% (0,\texttt{\bslash l@belbase})}}
+% \iffalse --------- company label: -------------------------\fi
+% \put(-10,-74.67){\vector(3,2){10}}
+% \put(-10,-78){%
+% \makebox(0,0)[r]{(0,\texttt{\bslash ylowercompany})}}
+% \put(-10,-59.5){\vector(1,0){16}}
+% \put(-10,-59.5){%
+% \makebox(0,0)[r]{Height \texttt{\bslash companylabelheight}}}
+% \put(70,\ylowercompany){\vector(-3,2){15}}
+% \put(72,-70){%
+% \makebox(0,0)[l]{Box \texttt{\bslash c@mpanyl@bel}}}
+% \put(70,180){\vector(-3,-1){27}}
+% \put(70,181){%
+% \makebox(0,0)[l]{\texttt{\bslash c@mpany}}}
+% \put(70,156){\vector(-3,2){15}}
+% \put(70,156){%
+% \makebox(0,0)[l]{Box \texttt{\bslash c@mpanyl@bel}}}
+% \put(-8,157){\vector(4,1){30}}
+% \put(-11,157){%
+% \makebox(0,0)[r]{Text color \texttt{\bslash c@lorc@mpany@fg}}}
+% \put(-8,177){\vector(3,-1){17}}
+% \put(-11,177){%
+% \makebox(0,0)[r]{Bg. color \texttt{\bslash c@lorc@mpany@bg}}}
+% \iffalse --------- the hole ---------------\fi
+% \put(-8,-27){\vector(4,1){30}}
+% \put(-12,-27){%
+% \makebox(0,0)[r]{\parbox{2.5cm}{\flushleft{%
+% Box \texttt{\bslash theh@le}:\\height = width =\\
+% \hspace{1ex}\texttt{\bslash hole@diameter}}}}}
+% \put(70,-39.7){\vector(-3,1){40}}
+% \put(72,-42){%
+% \makebox(0,0)[l]{(\texttt{\bslash halfl@belwidth},%
+% \texttt{\bslash y@center@hole})}}
+% \iffalse --------- aux. lines --------------\fi
+% \put(30,10){\vector(0,-1){10}} \put(30,20){\vector(0,1){10}}
+% \put(30,15){%
+% \makebox(0,0){\texttt{\bslash cnt@auxlinedistance}}}
+% \put(-5,30){\circle{5}}\put(-5,30){\makebox(0,0){\footnotesize 1}}
+% \put(-5,60){\circle{5}}\put(-5,60){\makebox(0,0){\footnotesize 2}}
+% \put(-5,90){\circle{5}}\put(-5,90){\makebox(0,0){\footnotesize 3}}
+% \put(-5,120){\circle{5}}\put(-5,120){\makebox(0,0){\footnotesize 4}}
+% \put(75,75){
+% \makebox(0,0)[l]{\parbox{2.5cm}{\flushleft{The number of auxiliary
+% lines is \texttt{numberauxlines}}}}}
+% \iffalse --------- text box ----------------\fi
+% \put(3,0){\dashbox{3}(54,157){}}
+% \put(-22,62){\vector(3,1){25}}
+% \put(-8,60){%
+% \makebox(0,0)[r]{\parbox{3.5cm}{\flushleft{%
+% The text box.\\-- distance to\\label outline is\\\texttt{
+% \bslash labeltextmargin}}}}}
+% \end{picture}
+% \makeatother
+%
+% \subsection{To do}
+% \begin{itemize}
+% \item The package should support further binder formats!
+% \item Perhaps the package should provide further special labels
+% e.g.\ for a table of contents on the first page etc.
+% \item Perhaps there should be an option for a landscape mode (using the
+% |Lscape| package)?
+% \item Perhaps the package should care for horizontal spacing and
+% should help to avoid |Overfull \hbox| warnings.
+% \item Perhaps even more lengths should be user-accessible (most of the
+% macro names contain an |@| so you can not use them in a normal
+% document).
+% \item To be solved: Placing full- and normal-height labels on one
+% page currently causes problems --- I have no idea why.
+% \end{itemize}
+% \textbf{If You} have any problems, suggestions, critical remarks -- or
+% whatever according this package write to Volker B\"orchers
+% (email-address see title).
+%
+% \StopEventually{}
+%
+% \section{The Macros}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{Options}
+% At the start of the package all Options are declared but
+% for most options the implied actions are executed later (controlled
+% by a corresponding |\newif|).
+% \begin{macro}{leitz}
+% As mentioned in section \ref{sec:opt} the option |leitz| is so far a
+% ``dummy option'' since there is no alternative. If you want to add
+% support for another label format you should make it choose-able as an
+% option. The declarations below are only a part of the format-dependent
+% settings (especially all widths are not set here). Some (not all!)
+% other of these settings are in a |\ifl@itz| \dots\ |\fi|
+% construction (see macros |\f@llheight| and |\n@rrow|).
+% \begin{macrocode}
+\newif\ifl@itz \l@itztrue
+\DeclareOption{leitz}{\l@itztrue
+ \newcount\cnt@auxlinedistance \cnt@auxlinedistance=30
+ \newcounter{numberauxlines}\setcounter{numberauxlines}{4}
+ \def\hole@diameter{29}
+ \def\hole@radius{14.5}
+ \def\y@center@hole{-26.5}
+ \def\ylowercompany{-68}
+ \def\yuppercompany{160}
+ \def\companylabelheight{17}
+ \def\f@lll@belheight{285}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{fullheight}
+% If this option is chosen, the macro |\fullheight| (respectively
+% |\f@llheight1|) is invoked later. The label will then extend
+% (nearly) over the full height of the binder back (this is not the
+% default).
+% \begin{macrocode}
+\newif\iff@llheight \f@llheightfalse
+\DeclareOption{fullheight}{\f@llheighttrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{narrow}
+% Invoke the macro |\narrowlabels| (resp. |\n@rrow1|) later to create
+% narrower labels (default is wide labels).
+% \begin{macrocode}
+\newif\ifn@rrow \n@rrowfalse
+\DeclareOption{narrow}{\n@rrowtrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{color}
+% Load the package |color| later. This is not the default because
+% not everyone has a color printer.
+% \begin{macrocode}
+\newif\ifcolorl@bel \colorl@belfalse
+\DeclareOption{color}{\colorl@beltrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{a4paper}
+% The same thing that the |\documentclass| option |a4paper|
+% does. Perhaps this option should imply further actions?.
+% \begin{macrocode}
+\DeclareOption{a4paper}{\paperheight 297mm\paperwidth 210mm}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{nice}
+% This option turns off the special, extreme, page layout of package
+% |flabels|.
+% \begin{macrocode}
+\newif\ifbe@nice \be@nicefalse
+\DeclareOption{nice}{\be@nicetrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{nohole}
+% Do not include a marker for the hole in the back of a ``Leitz-Ordner''
+% (to be used for an exact alignment of the label). A new option for a
+% binder that do not have such a hole should include the command
+% |\ExecuteOptions{nohole}|.
+% \begin{macrocode}
+\newif\ifno@hole \no@holefalse
+\DeclareOption{nohole}{\no@holetrue}
+% \end{macrocode}
+% \end{macro}
+% The end of the option section of the code: Produce an error message when
+% unknown options (type mistakes\dots) are given; make |leitz| the default
+% and force evaluation of the given option list.
+% \begin{macrocode}
+\DeclareOption*{\PackageWarning{flabels}{%
+ Unknown option `\CurrentOption' (Known option:\MessageBreak
+ `fullheight', `narrow', `color', `nohole', `a4paper', `nice')}}
+\ExecuteOptions{leitz}
+\ProcessOptions\relax
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\unitlength}
+% \begin{macro}{\C@nvertToCount}
+% \begin{macro}{\cnt@paperheight}
+% The unitlength of the pictures used to
+% create the labels is 1 millimeter. Since \TeX-dimensions are
+% internally represented by integer variables (unit |sp|: scaled
+% point) they are also `counters'. This macro converts |sp| into |mm|
+% (code taken from |layout| package). |\cnt@paperheight| keeps the
+% paper height in |mm| as a counter.
+% \begin{macrocode}
+\setlength{\unitlength}{1mm}
+\def\C@nvertToCount#1#2{#1=#2 \divide #1 by 186468}
+\newcount\cnt@paperheight
+\C@nvertToCount\cnt@paperheight\paperheight
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cnt@pictvoffset}
+% \begin{macro}{\tmp@count}
+% \begin{macro}{\tmp@count}
+% The counter |\cnt@pictvoffset| (to be computed later) is used to place
+% the label vertically centered on the page. |\tmp@count| and
+% |\tmp@dim| are used as temporary variables.
+% \begin{macrocode}
+\newcount\cnt@pictvoffset
+\newcount\tmp@count
+\newdimen\tmp@dim
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{pagelayout}
+% Since the labels can be very large (compared to the paper height) we use
+% the full page height if option |nice| is \emph{not} chosen. (This is
+% not the same as the |fullpage| package does. Here we use really the
+% whole page!) Horizontally this package leaves only a margin of |1in|
+% on the left side but leaves |\textwidth| untouched.
+%
+% On the other hand this makes |flabels| very sensible to the sequence of
+% |\usepackage| commands. If one loads a package after |flabels| that
+% overwrites this settings again (like |a4|) the layout will be wrong.
+% \begin{macrocode}
+\ifbe@nice\relax
+\else
+ \textheight\paperheight
+ \topmargin -1in
+ \oddsidemargin 0mm
+ \evensidemargin 0mm
+ \marginparwidth 0mm
+ \marginparsep 0mm
+ \headheight0mm
+ \headsep0mm
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\extr@topmargin}
+% \begin{macro}{\extratopmargin}
+% Definition of a dimension for extra vertical space at the top of a
+% page and the macro |\extratopmargin| as an user interface to
+% it. Note: A |\topmargin| of |-1in| means that the text/labels can
+% start right at the top of the page. The way the macro is defined
+% hides this offset of |-1in| from the user.
+% \begin{macrocode}
+\newdimen\extr@topmargin \extr@topmargin=0mm
+\def\extratopmargin#1{\extr@topmargin=#1
+ \advance\extr@topmargin by -1in
+ \topmargin\extr@topmargin}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cnt@auxlinedistance}
+% \begin{macro}{\auxlinedistance}
+% The counter |\cnt@auxlinedistance| contains the distance between two
+% auxiliary lines (for |\emptylabels|) in the unit |1mm|. It is preset
+% by the option |leitz| to the value 30. To allow the user to use
+% other dimensions than |mm| the macro |\auxlinedistance| is used.
+% \begin{macrocode}
+\def\auxlinedistance#1{\tmp@dim=#1
+ \C@nvertToCount\cnt@auxlinedistance\tmp@dim}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\labeltextmargin}
+% \begin{macro}{\l@beltextwidth}
+% \begin{macro}{\hspaceinterlabel}
+% |\l@beltextwidth| is the width of the text in the label text field
+% -- it is a computed value (see macro |\labeltext|) since the
+% label width is variable. The user can set |\labeltextmargin|, the
+% margin between text and label outline (left and right side, top)
+% instead to adjust the text width. |\hspaceinterlabel| (also
+% user-accessible) is the \emph{minimal} horizontal space between two
+% labels (it is more usually).
+% \begin{macrocode}
+\newdimen\labeltextmargin \labeltextmargin=3mm
+\newdimen\l@beltextwidth
+\newdimen\hspaceinterlabel \hspaceinterlabel=0mm
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\label@textheight}
+% The text box extends from |y=0| to the ``company label''. We compute
+% the text height in macro |\labeltext| as |\label@textheight| =
+% |\yuppercompany| - |\labeltextmargin|.\\
+% Note: making the box smaller moves the text down.
+% \begin{macrocode}
+ \newcount\label@textheight
+% \end{macrocode}
+% \end{macro}
+% Now the options |fullheight|, |narrow| and |color| have to be
+% processed. (Till now only a corresponding |\newif| has been set.)
+% \begin{macro}{->fullheight}
+% \begin{macro}{\full@height}
+% The first of this three options is |fullheight|. Of course we
+% have to set here a big part of the label dimensions. Firstly we
+% define a macro for internal use (the user interface for it is
+% provided by the macros |\fullheight| and |\normalheight|). (For the
+% explanation of |\l@belheight| and --|width| see
+% figure on page \pageref{all_dimens}.)
+% \begin{macrocode}
+\def\full@height#1{%
+ \ifl@itz
+ \ifnum #1=0
+ \f@llheightfalse
+ \def\l@belheight{190}
+ \def\l@belbase{0}
+ \else
+ \f@llheighttrue
+ \def\l@belheight{\f@lll@belheight}
+ \def\l@belbase{-90}
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macro}{\cnt@pictvoffset}
+% The small labels (|normalheight|) should have the same
+% y-coordinate |y=0| as the big labels \emph{on the page}. We could
+% achieve this by setting the y-offset (argument of the label picture
+% environment!) to |\l@belbase|. Then the top of the big labels would
+% start right the beginning of the paper.
+%
+% If we additionally want the big labels (|fullheight|) be
+% vertically centered on the whole page we have to divide the
+% remaining vertical space between top and bottom (this ends the macro
+% |\full@height|):
+% \begin{macrocode}
+ \cnt@pictvoffset=\cnt@paperheight
+ \advance\cnt@pictvoffset by -\f@lll@belheight
+ \divide\cnt@pictvoffset by 2
+ \advance\cnt@pictvoffset by \l@belbase
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% After having defined |fullheight| and |normalheight| now we can
+% call |\full@height| with the appropriate argument:
+% \begin{macrocode}
+\iff@llheight
+ \full@height1
+\else
+ \full@height0
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{->narrow}
+% \begin{macro}{\n@rrow}
+% Now option |narrow|! Here \emph{all horizontal} dimensions have to
+% be set. As for |fullheight| we define a macro for internal use and
+% call it then according to the chosen option.
+% \begin{macrocode}
+\def\n@rrow#1{%
+ \ifl@itz
+ \ifnum #1=0
+ \n@rrowfalse
+ \def\l@belwidth{60}
+ \def\halfl@belwidth{30}
+ \else
+ \n@rrowtrue
+ \def\l@belwidth{37}
+ \def\halfl@belwidth{18.5}
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% Process option |narrow| now:
+% \begin{macrocode}
+\ifn@rrow
+ \n@rrow1
+\else
+ \n@rrow0
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{->color}
+% The option |color| first loads the package |color|. ---
+% \emph{Note:} The package |color| needs to know for which driver
+% color informations have to be generated (|dvips|, |xdvi|,
+% \dots). While we can not select the driver here (as an option:
+% |\RequirePackage[<driver>]{color}|), we require the |color| macros
+% \emph{now}. So the user must specify the driver in the file
+% |color.cfg| with an |\ExecuteOptions{<driver>}| command.
+%
+% The colors of the labels will depend on 4 colors:
+% \DescribeMacro{\c@lorc@mpany@bg} |\c@lorc@mpany@bg| (background of
+% the ``company label''), \DescribeMacro{\c@lorc@mpany@fg}
+% |\c@lorc@mpany@fg| (foreground of the ``company label''),
+% \DescribeMacro{\c@lorl@bel@fg} |\c@lorl@bel@fg| (color of the
+% labeltext), \DescribeMacro{\c@lorl@bel@bg} |\c@lorl@bel@bg| (back
+% ground of the whole label). We define 4 macros as an user
+% interface to these colors and use them to set the default colors.
+% \begin{macrocode}
+\ifcolorl@bel
+ \RequirePackage{color}
+ \def\setbgcompany#1{\def\c@lorc@mpany@bg{#1}}
+ \def\setfgcompany#1{\def\c@lorc@mpany@fg{#1}}
+ \def\setbglabel#1{\def\c@lorl@bel@bg{#1}}
+ \def\setfglabel#1{\def\c@lorl@bel@fg{#1}}
+ \ifl@itz
+ \setbgcompany{black}
+ \setfgcompany{green}
+ \setbglabel{yellow}
+ \setfglabel{black}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\c@mpanyl@bel}
+% Small labels have a ``company label'' at the top of the label and
+% large labels in addition another near the bottom. It is a small box
+% that may contain the logo of the company or institute or perhaps the
+% user's name. We save it in the box |\c@mpanyl@bel|. The macro
+% \DescribeMacro{\rem@kecompanyl@bel}|\rem@kecompanyl@bel| is used for
+% each label by |\emptylabel| and |\labeltext|.
+%
+% The text in this box is kept in the macro |\c@mpany| and is
+% user-accessible with the macro |\company| (defined below).
+% \begin{macrocode}
+\ifl@itz
+ \def\c@mpany{\huge LEITZ}
+\fi
+\newsavebox{\c@mpanyl@bel}
+\def\rem@kecompanyl@bel{%
+ \ifcolorl@bel
+ \protect\savebox{\c@mpanyl@bel}{%
+ \fboxsep0pt\protect\colorbox{\c@lorc@mpany@bg}{%
+ \protect\makebox(\l@belwidth,\companylabelheight){%
+ \color{\c@lorc@mpany@fg}\c@mpany}}}%
+ \else
+ \thicklines\protect\savebox{\c@mpanyl@bel}{%
+ \protect\framebox(\l@belwidth,\companylabelheight){\c@mpany}}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\theh@le}
+% This is specific to the label format. A ``Leitz-Ordner'' has a hole
+% in the back of the binder to make the large binder handier (diameter
+% 29mm). Since \TeX\ is not capable to typeset circles larger then
+% 15mm, we mark this hole with a cross. The reference point of this
+% box is its center.
+% \begin{macrocode}
+\newsavebox{\theh@le}
+\savebox{\theh@le}{%
+ \ifl@itz
+ \begin{picture}(\hole@diameter,\hole@diameter)(\hole@radius,\hole@radius)
+ \linethickness{0.01pt}
+ \put(0,\hole@radius){\line(1,0){\hole@diameter}}
+ \put(\hole@radius,0){\line(0,1){\hole@diameter}}
+ \end{picture}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\l@beloutline}
+% This macro draws the common label outline for text and empty
+% labels. It has to be called from inside a picture environment.
+% The background color of the label is realised by putting a box that
+% is slightly larger than the label (2$\times$ 0.5mm more) on the
+% appropriate place.
+% \begin{macrocode}
+\def\l@beloutline{
+ \fboxsep0.5mm
+ \ifcolorl@bel
+ \put(-1,\l@belbase){%
+ \colorbox{\c@lorl@bel@bg}{\makebox(\l@belwidth,\l@belheight){\relax}}}
+ \fi
+ \linethickness{0.01pt}
+ \multiput(0,\l@belbase)(\l@belwidth,0){2}{\line(0,1){\l@belheight}}
+ \multiput(0,\l@belbase)(0,\l@belheight){2}{\line(1,0){\l@belwidth}}
+ \thinlines
+ \put(0,\yuppercompany){\usebox{\c@mpanyl@bel}}
+ \iff@llheight
+ \ifno@hole\relax\else
+ \put(\halfl@belwidth,\y@center@hole){\usebox{\theh@le}}
+ \fi
+ \put(0,\ylowercompany){\usebox{\c@mpanyl@bel}}
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{User commands}
+% To switch between |fullheight|/|normalheight| and |narrow|/|wide|
+% from inside the document we have these macros:
+% \DescribeMacro{\narrowlabels} \DescribeMacro{\widelabels}
+% \DescribeMacro{\fullheight} \DescribeMacro{\normalheight}
+% \begin{macrocode}
+\def\narrowlabels{\n@rrow1}
+\def\widelabels{\n@rrow0}
+\def\fullheight{\full@height1}
+\def\normalheight{\full@height0}
+% \end{macrocode}
+% To redefine the company name:
+% \begin{macrocode}
+\def\company#1{\def\c@mpany{#1}}
+% \end{macrocode}
+% \end{macro}
+% \hrule
+% \begin{macro}{\emptylabel}
+% The first macro that actually creates label is |\emptylabel|. It has
+% as argument the number of identical labels to draw. Every `empty'
+% label consists of the common label outline and a number
+% (|numberauxlines|, user accessible) of auxiliary lines.
+% \begin{macrocode}
+\def\emptylabel#1{%
+ \rem@kecompanyl@bel
+ \tmp@count=#1\loop
+ \begin{picture}(\l@belwidth,\l@belheight)(0,\cnt@pictvoffset)
+ \l@beloutline
+ \multiput(0,\cnt@auxlinedistance)(0,\cnt@auxlinedistance){%
+ \value{numberauxlines}}{\line(1,0){\l@belwidth}}
+ \end{picture}
+ \hspace{\hspaceinterlabel}
+ \advance\tmp@count by -1
+ \ifnum\tmp@count>0\repeat
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\labeltext}
+% Here the second macro for creating labels: |\labeltext|. Perhaps it
+% would have been nicer to declare this as an environment but this
+% should do. The text-width and -height is computed here.
+%
+% Note that the text is plain text -- there is no predefined font
+% change etc. The only special is the switch to the text color
+% |\c@lorl@bel@fg| (if option |color| is chosen).
+% \begin{macrocode}
+\def\labeltext#1{%
+ \rem@kecompanyl@bel
+ \l@beltextwidth=\l@belwidth mm
+ \advance\l@beltextwidth by -2\labeltextmargin
+ \C@nvertToCount{\label@textheight}{-\labeltextmargin}
+ \advance\label@textheight by \yuppercompany
+ \begin{picture}(\l@belwidth,\l@belheight)(0,\cnt@pictvoffset)
+ \l@beloutline
+ \put(0,0){\protect\makebox(\l@belwidth,\label@textheight)[t]{%
+ \parbox{\l@beltextwidth}{%
+ \ifcolorl@bel\textcolor{\c@lorl@bel@fg}{#1}\else #1\fi}}}
+ \end{picture}
+ \hspace{\hspaceinterlabel}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+\endinput