summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/labels/labels.dtx1135
-rw-r--r--Master/texmf-dist/source/latex/labels/labels.ins50
2 files changed, 1185 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/labels/labels.dtx b/Master/texmf-dist/source/latex/labels/labels.dtx
new file mode 100644
index 00000000000..8f817511214
--- /dev/null
+++ b/Master/texmf-dist/source/latex/labels/labels.dtx
@@ -0,0 +1,1135 @@
+% \iffalse
+%
+%% File: labels.dtx
+%% Originally copyright (C) 1993-1994-1995-1998 by Sebastian Rahtz
+%% and Grant Gustafson
+%% Copyright (C) 2002-2003 by Julian Gilbey <jdg@debian.org>
+%
+% This program may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% This program consists of the files labels.dtx and labels.ins
+% together with the generated files labels.sty and olabels.sty.
+%
+\NeedsTeXFormat{LaTeX2e}
+%<*dtx>
+\ProvidesFile{labels.dtx}[2003/05/22 v.13]
+%</dtx>
+% The version number also appears in the package code below.
+%<*driver>
+\documentclass{ltxdoc}
+\ProvidesFile{labels.drv}[2003/05/22 v.13]
+\GetFileInfo{labels.drv}
+\begin{document}
+ \title{A package for making sticky labels in \LaTeX\thanks{This file
+ has version number \fileversion, last revised \filedate.}}
+ \author{Sebastian Rahtz, Leonor Barroca \and Grant Gustafson \and
+ Julian Gilbey}
+ \date{2003/05/22}
+ \maketitle
+ \tableofcontents
+ \DocInput{labels.dtx}
+\end{document}
+%</driver>
+% \fi
+% \CheckSum{732}
+% \begin{abstract}
+% A \LaTeX\ style to print
+% a regular grid of ragged-right labels on a page, suitable for sheets
+% of labels
+% which can be fed through a laser printer. Macros are provided to
+% allow easy input of names and addresses in a form free of \TeX\ markup.
+% Equally useful is a feature for making multiple copies of a single
+% label, e.g., return address stickers to go with the labels.
+% \end{abstract}
+%
+% \section{Generating Style Files and Documentation}
+% Automatic generation of the style files uses the command line
+% \begin{center} |latex labels.ins| \end{center}
+% to create the files |labels.sty| (for \LaTeX{}2e)
+% and |olabels.sty| (for \LaTeX{}209). Usage in the preamble section of
+% a \LaTeX{} source file is
+% |\input{olabels.sty}| for \LaTeX{}209 and
+% |\usepackage{labels}| for \LaTeX{}2e. Backward compatibility with
+% \LaTeX{}209 may be removed suddenly in some future release. Please
+% observe that documentation is created by the command line
+% |latex labels.dtx|,
+% and no provision is made to produce documentation via \LaTeX{}209.
+%
+% \section{Usage}
+% This style file was written to produce a sheet of labels which can be
+% xeroxed onto \textsf{Avery brand} 5360 sticky-label material. This label
+% material is made for a xerox machine and it has 7 rows and 3
+% columns of labels on |letterpaper|. It works for other label
+% layouts as well. In particular, the defaults for the most popular
+% paper sizes |letterpaper| and |a4paper| are $7$
+% rows by $3$ columns and $8$ rows by $3$ columns, respectively.
+%
+% Other uses include production of disk labels, book labels, shipping
+% labels, name tags, door cards, photo galleries and compact membership
+% lists.
+%
+% The task of this package is to produce a rectangular grid of
+% items on a sheet of paper, with each item centered in its grid area.
+% It really doesn't matter what goes in the grid area: text, graphics or
+% any \LaTeX{} construct. For example, you might use the |fancybox|
+% package to produce oval-box or shadow-box name tags for a conference.
+%
+% \subsection{Paper Sizes}
+% The paper size is supplied by the document options for the class.
+% The European default is |a4paper| and the American default is
+% |letterpaper|, $8.5\times 11$-inch, inherited from the
+% class file, e.g., |article.cls|.
+% \begin{description}
+%\item[\textbf{a4paper}] 297mm by 210mm.
+%\item[\textbf{a5paper}] 210mm by 148mm.
+%\item[\textbf{b5paper}] 250mm by 176mm.
+%\item[\textbf{letterpaper}] 11in by 8.5in.
+%\item[\textbf{legalpaper}] 14in by 8.5in.
+%\item[\textbf{executivepaper}] 10.5in by 7.25in.
+%\end{description}
+%
+% \subsection{Label Stock Sizes}
+% A number of different label stocks are available for xerox machines
+% and laser printers. The typical stock has $m$ rows and $n$ columns
+% with various gutters on the page. Below is a table of \textsf{Avery}
+% products that are in common use in America.
+%
+% \medskip
+%
+%\DeleteShortVerb{\|}
+%{\small\rm
+%\begin{tabular}{|c|c|c|c|c|l|}
+%\hline
+%Label Size & Labels & Rows & Cols & Gutters &Avery \\
+%in inches & per page & & & & Stock No \\ \hline
+%$1\frac{7}{16}\times2\frac{13}{16}$ & 21/page & 7 & 3 & Yes & 5360 \\ \hline
+%$2\times4\frac14$ & 10/page & 5 & 2 & Yes & 5352 \\ \hline
+%$2\times4$ & 10/page & 5 & 2 & Yes & 5327 \\ \hline
+%$1\times4$ & 20/page & 10 & 2 & Yes & 5161, 5261 \\ \hline
+%$1\frac{3}{8}\times2\frac{11}{16}$ & 21/page & 7 & 3 & Yes & 5329 \\ \hline
+%$1\times2\frac{5}{8}$ & 30/page & 10 & 3 & Yes & 5331, 5160, 5260 \\ \hline
+%$1\frac{1}{3}\times4$ & 14/page & 7 & 2 & Yes & 5162, 5262 \\ \hline
+%$\frac{1}{2}\times1\frac{3}{4}$ & 80/page & 20 & 4 & Yes & 5267 \\ \hline
+%$1\times2\frac34$ & 33/page & 11 & 3 & No & 5332, 5351, 5354, 5314 \\ \hline
+%\end{tabular}
+%}
+%\MakeShortVerb{\|}
+%
+% \medskip
+%
+% Another common label stock is \textsf{Dennison} 37-141, having 3 columns
+% and 8 rows of $1\frac38\times2\frac78$ gutterless labels on
+% letterpaper. The information by the manufacturer is not precisely
+% correct, because the first column \emph{is} exactly $2\frac78$ inches
+% wide, but the other two are $2\frac{13}{16}$ inches wide.
+%
+% A common problem with implementing this package on a new label stock
+% is precision of the laser printer, which prints the master, and the
+% xerox machine which prints the master onto the label stock. Some of
+% the above are for direct use on a laser printer, which removes one
+% source of error, but replaces it by the possibility that the label
+% stock will jam in the laser printer!
+%
+% \subsection{Customizing for Other Labels: the traditional method}
+% It is very likely that the label stock will be different than Avery 5360.
+% Generally, it is necessary to tailor the source file to a particular type
+% of label.
+% The lines below may be placed in the preamble and edited to suit
+% the application and the actual printer used for output.
+% \begin{verbatim}
+% \documentclass[12pt]{article}
+% \usepackage{labels}
+% \LabelCols=3% Number of columns of labels per page
+% \LabelRows=7% Number of rows of labels per page
+% \LeftBorder=8mm% Space added to left border of each label
+% \RightBorder=8mm% Space added to right border of each label
+% \TopBorder=9mm% Space to leave at top of sheet
+% \BottomBorder=2mm% Space to leave at bottom of sheet
+% \begin{document}% End of preamble
+% \end{verbatim}
+% These controls can also be issued after the beginning of the document,
+% but the results are undefined unless the following example is
+% followed, which uses the |\LabelSetup| control sequence:
+% \begin{verbatim}
+% \begin{document}% End of preamble
+% \LabelCols=3% Number of columns of labels per page
+% \LabelRows=7% Number of rows of labels per page
+% \LeftBorder=8mm% Space added to left border of each label
+% \RightBorder=8mm% Space added to right border of each label
+% \TopBorder=9mm% Space to leave at top of sheet
+% \BottomBorder=2mm% Space to leave at bottom of sheet
+% \LabelSetup% Invoke new settings
+% \end{verbatim}
+% For example, \emph{your}
+% grid maybe has only two columns of ten labels each, requiring the
+% first two variables to be reset. The gutter areas on the label
+% material dictate how to set the other parameters.
+% Personal adjustments can be made for the amount of white space around
+% each label.
+%
+% The printer driver is expected to print the page
+% \emph{exactly} as it should in vanilla \TeX, i.e., with the origin of
+% the page down one inch and right one inch from the top left hand
+% corner of the paper. If it doesn't, adjust the printer driver
+% parameters.
+%
+% A common problem with printers is that label output is
+% extra wide, requiring printing onto the very edges of the
+% paper. Some printers may not be able to maintain print quality
+% all the way to the edges of the paper.
+% Adjust the parameters |\LeftBorder|, |\RightBorder|, |\TopBorder|,
+% |\BottomBorder| as outlined below to solve this problem.
+%
+% First of all, |\TopBorder| is not the white space at the top of the
+% page, but the amount of space to leave at the top so that the first
+% label is centered on its grid. This number is determined by trial and
+% error using the actual printer, xerox machine and label stock to be
+% used in the production run.
+%
+% The second value |\BottomBorder| is determine empirically also, so
+% that the labels are all centered on their grids. A mathematical
+% formula to be satisfied is
+%\def\AA{\mbox{\texttt{paperheight}} - \mbox{\texttt{TopBorder}} -
+% \mbox{\texttt{BottomBorder}}}
+%\def\BB{\mbox{\texttt{LabelRows}}}
+%$$ \mbox{\texttt{Label Height}} = \frac{\AA}{\BB} $$
+% The values |\LeftBorder| and |\RightBorder| are amounts of white space
+% to be added to the left and right of the actual label area so that the
+% label itself does not smash into the edge of the grid. The actual
+% label width is considerably smaller than the grid width (physical
+% width of the label stock). It is determined by the formula
+%\def\AA{\mbox{\texttt{paperwidth}}}
+%\def\BB{\mbox{\texttt{LabelCols}}}
+%\def\CC{\mbox{\texttt{LeftBorder}}}
+%\def\DD{\mbox{\texttt{RightBorder}}}
+%$$ \CC + \mbox{\texttt{Label Width}} + \DD = \frac{\AA}{\BB}$$
+% Normally, the left and right white space dimensions are the same, but
+% there can be exceptions. It is best to determine the dimensions
+% empirically on the actual equipment to be used in the production run.
+% Visual guides from a |dvi| viewer can help, but be aware that the
+% laser printer may fail to print near the edge and the xerox machine
+% may either enlarge or shrink the image onto the label stock.
+%
+% An optional \textit{grid overlay} can be produced with the label output for
+% testing purposes by the preamble control sequence |\LabelInfotrue|.
+% Most |dvi| viewers are capable of showing the entire test grid. Once
+% printed, the overlay can be compared with the actual label stock to
+% see if the borders are in the proper place. By adjusting parameters,
+% the master copy off the laser printer should be able to pass through the
+% xerox machine automatically.
+%
+% \subsection{Customizing for Other Labels: the new method}
+%
+% One of the deficiencies of the method described above it that it is
+% unable to cope well with labels having spaces between them, and the
+% dimensions specified are not the natural ones which one would want
+% to measure. If the package option |newdimens| is given (and this
+% only works for users of \LaTeXe), then we can
+% give page parameters in a far more flexible manner as follows, where
+% these dimensions are suitable for Avery L7160 labels:
+% \begin{verbatim}
+% \documentclass[a4paper,12pt]{article}
+% \usepackage[newdimens]{labels}
+% \LabelCols=3% Number of columns of labels per page
+% \LabelRows=7% Number of rows of labels per page
+% \LeftPageMargin=7mm% These four parameters give the
+% \RightPageMargin=7mm% page gutter sizes. The outer edges of
+% \TopPageMargin=15mm% the outer labels are the specified
+% \BottomPageMargin=15mm% distances from the edge of the paper.
+% \InterLabelColumn=2mm% Gap between columns of labels
+% \InterLabelRow=0mm% Gap between rows of labels
+% \LeftLabelBorder=5mm% These four parameters give the extra
+% \RightLabelBorder=5mm% space used around the text on each
+% \TopLabelBorder=5mm% actual label.
+% \BottomLabelBorder=5mm%
+% \begin{document}% End of preamble
+% \end{verbatim}
+% (The |\LabelSetup| form can also be used, as above.) Thus the four
+% |\...PageMargin| parameters and the |\InterLabel...| paramenters
+% define the location of the physical labels on the page, and the
+% four |\...LabelBorder| parameters define how the space on each label
+% is to be used.
+%
+% As before, the printer driver is expected to print the page
+% \emph{exactly} as it should in vanilla \TeX, i.e., with the origin of
+% the page down one inch and right one inch from the top left hand
+% corner of the paper. If it doesn't, adjust the printer driver
+% parameters.
+%
+% We now describe how the locations of the labels are determined, as
+% we did before. The label height and label width are given by the
+% formul\ae:
+% $$\begin{array}{l}
+% \mbox{\texttt{LabelRows}}\times\mbox{\texttt{Label height}} +
+% (\mbox{\texttt{LabelRows}}-1)\times\mbox{\texttt{InterLabelRow}} =\\
+% \qquad\mbox{\texttt{paperheight}} - \mbox{\texttt{TopPageMargin}} -
+% \mbox{\texttt{BottomPageMargin}}
+% \end{array}$$
+% and
+% $$\begin{array}{l}
+% \mbox{\texttt{LabelColumns}}\times\mbox{\texttt{Label width}} +
+% (\mbox{\texttt{LabelColumns}}-1)\times\mbox{\texttt{InterLabelColumn}} =\\
+% \mbox{\texttt{paperwidth}} - \mbox{\texttt{LeftPageMargin}} -
+% \mbox{\texttt{RightPageMargin}}
+% \end{array}$$
+% Then, within each label, the label text is vertically centered in a
+% box which is indented |\TopLabelBorder| from the top of the label,
+% |\BottomLabelBorder| from the bottom, |\LeftLabelBorder| from the
+% left and |\RightLabelBorder| from the right.
+%
+% It is an error if $\mbox{\texttt{TopLabelBorder}} +
+% \mbox{\texttt{BottomLabelBorder}} \geq \mbox{\texttt{Label
+% height}}$, and similarly for the width; the results in such cases
+% may be unpredictable.
+%
+% Note that the |\LabelInfoTrue| function only draws the outlines of
+% the physical labels; see below for information on |\LabelGridtrue|.
+%
+% \subsection{Using an External Label source File}
+% The simplest form of input is very
+% short, as in the following example:
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \begin{document}
+% \labelfile{names.dat}
+% \end{document}
+% \end{verbatim}
+% where |names.dat| contains names and address in
+% \textit{plain format}. Source files in plain format may contain
+% extra blank lines (only one blank line between labels is required).
+% Sort fields should begin with |%| in column $1$, so they don't print
+% as part of the label. Leading and trailing blanks on lines are
+% ignored. The formfeed character Ctrl-L seems to be acceptable in the
+% source. A formfeed is not
+% ignored, even if it appears at the end of the file. For example, if
+% |^L| appears on a line by itself, then it either produces an empty
+% label or else a blank line, if it happens to be in a group of label
+% lines. The label data commonly appears on lines, flush left, with no
+% intervening blank lines, because a blank line signals a new label. To
+% purposely create blank labels, as for filling out a page of labels,
+% see the control sequence |\skiplabels{#1}|, \textit{infra}. The actual
+% text in the external file may contain \LaTeX{} markup controls. This
+% includes comment marks |%|, which will be ignored during typesetting.
+%
+%\section*{Source File Creation and Sorting}
+% Most mailing lists that already exist can be edited to create an
+% acceptable list in the proper format. If long lines are to wrap,
+% then force all the material to be wrapped onto one line in the source.
+% Otherwise, break the material into lines of the length desired.
+% Any special items in a mailing label can be coded in \LaTeX{}, e.g.,
+% foreign names with accented characters, trademarks and font size
+% changes.
+%
+% Generally, raw sources have to be searched for special \LaTeX{}
+% controls and brought up to standard. The characters below may be
+% used in a source file for writing \LaTeX{} code. Generally, a raw
+% source has to be manually stripped of these characters.
+%\begin{verbatim}
+%Double quote \" Hash (number) \# Underscore \_
+%Dollar \$ Percent \% Ampersand \&
+%Less than \< Greater than \> Vertical bar \|
+%Commercial at \@ Backslash \\ Circumflex \^
+%Left brace \{ Right brace \} Tilde \~
+%\end{verbatim}
+%
+% A typical comment line might start with |%| and then |^L| (ctrl-L)
+% followed by a sort key (e.g., the zip code or last name). The |emacs|
+% editor supports a method of sorting such records, thereby rearranging
+% the source file into a new label order. The method:
+% \begin{itemize}
+% \item
+% Mark the whole file as a region: |^[<| goes to the top of file, then
+% |^@| sets mark; follow by |^[>| to mark the whole file.
+%\item
+% Invoke |emacs|'s |sort-pages| external routine as follows. Press |^[x|
+% then enter |sort-pages| and press return. The region marked will be
+% sorted on the first line of each page, with a page delimited by |^L|.
+% For some |emacs| versions, the first line of the marked block has to
+% be empty, in order to produce a successful sort.
+% \end{itemize}
+%
+% \section*{General purpose \LaTeX{} Source}
+%
+% To set up a general-purpose \LaTeX{} source file, use
+% the following source, which prompts for the labels file name.
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \begin{document}
+% \promptlabels
+% \end{document}
+% \end{verbatim}
+%
+% \subsection{Labels in the Main File}
+% The names and addresses can appear directly in the main
+% file, rather than using \verb|\labelfile| to include them.
+% The file format is to be exactly as described above. Especially,
+% follow the advice about blank lines, which delimit labels.
+% This example makes use of the |labels| environment.
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \begin{document}
+% \begin{labels}
+% Me
+% My address
+% My City, State, Zipcode
+%
+% My Brother
+% His address
+% His City, State, Zipcode
+% \end{labels}
+% \end{document}
+% \end{verbatim}
+%
+% \subsection{Control Sequences to Make Labels}
+% There are other ways of accessing the same system.
+% \begin{enumerate}
+% \item The control sequence called |\addresslabel[#1]{#2}| accepts for
+% optional argument |#1| \LaTeX{} controls, e.g., font size and style,
+% and for argument |#2| the rows of a |tabular| array of one column.
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \begin{document}
+% \addresslabel[\small\sffamily]
+% {Me \\my street \\ mytown \\ England}
+% \end{document}
+% \end{verbatim}
+%
+% \item Boxed labels use the special macro called
+% |\boxedaddresslabel[#1]{#2}|,
+% as follows. This produces a frame-box around the label itself, leaving
+% lots of white space around the frame. An optional argument |[#1]|
+% is provided for local setting of \LaTeX{} controls, for example,
+% |[\fboxsep=3pt]| will change the white space near the frame. The
+% boolean variable
+% |\LabelInfotrue| appears in the preamble in order to print out
+% additional information, especially the label dimensions and the
+% settings of certain variables.
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \LabelInfotrue
+% \begin{document}
+% \boxedaddresslabel[\fboxsep=3pt]
+% {\textbf{Me} \\my street \\ mytown \\ England}
+% \end{document}
+% \end{verbatim}
+%
+% \item To \emph{duplicate} a label, there is a counter called
+% \verb|\numberoflabels| which you can set.
+% For example, to print a return address 21 times, use this
+% source:
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \numberoflabels=21
+% \begin{document}
+% \addresslabel{Me \\my street \\ mytown \\ England}
+% \end{document}
+% \end{verbatim}
+%
+% \item For more sophisticated users, there is a macro
+% \verb|\genericlabel| which you can call,
+% with an argument of whatever you want to appear on the label (e.g.,
+% for disk labels). Thus you could have
+%
+% \begin{tabular}{lp{1.0in}l}
+% \begin{minipage}{1.65in}
+% \begin{verbatim}
+% \genericlabel{%
+% \begin{tabular}{|c|}
+% \hline
+% My Amazing Program\\
+% \hline
+% Disk 1 of 1\\
+% \hline
+% \emph{We aim to serve}\\
+% \hline
+% \end{tabular}
+% }
+% \end{verbatim}
+% \end{minipage}
+% &
+% \raggedright\sffamily
+% to produce a label like this:
+% &
+% \begin{minipage}{1.4in}
+% \begin{verbatim}
+% |------------------|
+% |My Amazing Program|
+% |------------------|
+% |Disk 1 of 1 |
+% |------------------|
+% |We aim to serve |
+% |------------------|
+% \end{verbatim}
+% \end{minipage}
+% \end{tabular}
+% \end{enumerate}
+% This feature has been used to print business cards with graphical
+% logo.
+%
+% \subsection{Wrapping Long Lines and Debugging}
+% Debugging of label files can be assisted by the internal error
+% messages which are emitted when a label box is too high or too wide
+% for the set parameters. This kind of error is unlikely to occur with
+% the standard controls and the \texttt{labels} environment, because by
+% default they use ragged right and wrap long lines.
+%
+% In all modes, you can opt for a grid around each label field by
+% setting a Boolean variable called |\LabelGridtrue|, e.g.,
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \LabelGridtrue
+% \numberoflabels=21
+% \begin{document}
+% \addresslabel{Me \\my street \\ mytown \\ England}
+% \end{document}
+% \end{verbatim}
+% By default you get no grids. The grids are useful for judging the
+% `spillover' of addresses onto adjacent labels, caused by long lines.
+% See also |\boxedaddresslabel|, which draws a tighter box with more
+% white space around the label text. Both can be used at the same time.
+%
+% \StopEventually{}
+% \section{The macros}
+% First of all, identify the package start, and specify that we
+% recognise the |newdimens| option. The |\iflabel@traddimens| macro
+% will record whether we are using the tradition |labels| dimension
+% system or not.
+%
+% \begin{macrocode}
+%<*package>
+%<!latex209>\NeedsTeXFormat{LaTeX2e}
+%<!latex209>\ProvidesPackage{labels}[2003/05/22 v.13]
+%<*latex209>
+\newdimen\paperwidth
+\paperwidth=8.5in% 297mm for a4paper
+\newdimen\paperheight
+\paperheight=11in% 210mm for a4paper
+\def\settoheight#1#2{\setbox\@tempboxa%
+ \hbox{#2}#1\ht\@tempboxa\setbox\@tempboxa\box\voidb@x}
+\def\PackageWarning#1#2{\typeout{#1: #2}}
+%</latex209>
+\newif\iflabel@traddimens
+\label@traddimenstrue
+%<!latex209>\DeclareOption{newdimens}{\label@traddimensfalse}
+%<!latex209>\ProcessOptions
+% \end{macrocode}
+% We will be recording the size of a label, and the dimensions of the
+% grid, so we set up variables accordingly.
+% \begin{macrocode}
+\newcount\LabelCols
+\newcount\LabelRows
+\iflabel@traddimens
+ \newdimen\LeftBorder
+ \newdimen\RightBorder
+ \newdimen\TopBorder
+ \newdimen\BottomBorder
+\else
+ \newdimen\LeftPageMargin
+ \newdimen\RightPageMargin
+ \newdimen\TopPageMargin
+ \newdimen\BottomPageMargin
+ \newdimen\InterLabelColumn
+ \newdimen\InterLabelRow
+ \newdimen\LeftLabelBorder
+ \newdimen\RightLabelBorder
+ \newdimen\TopLabelBorder
+ \newdimen\BottomLabelBorder
+\fi
+\newcount\numberoflabels
+\newdimen\label@width
+\newdimen\label@height
+\newdimen\area@width
+\newdimen\area@height
+\newdimen\half@label
+\newdimen\half@area
+\newdimen\addr@width
+\newdimen\LabTmp
+\newsavebox\this@label
+\newcount\label@number
+\newcount\skip@labels
+\newcount\l@so@far
+\newcount\LabelTotal
+\newif\ifLabelGrid
+\newif\iffirst@label
+\newif\ifLabelInfo
+\first@labeltrue
+\LabelGridfalse
+\LabelInfofalse
+% \end{macrocode}
+% Set defaults for the labels based upon paper size and common use.
+% These values can be reset dynamically at runtime in the preamble.
+% \begin{macrocode}
+\ifdim\paperwidth=210mm\relax%
+ \LabelCols=3\relax\LabelRows=8\relax% a4paper
+\else
+ \LabelCols=3\relax\LabelRows=7\relax% letterpaper
+\fi%
+% \end{macrocode}
+% These variables are provided to allow you to force a border on the left
+% and right edges of each label. The values will affect every label,
+% of course, so you may need to experiment to get pleasing results.
+% The other variables adjust the gutter width at the top and bottom of a
+% page. They apply just to these two edges, and do not apply to a
+% particular label. Different defaults are necessary if we are using
+% |newdimens|.
+% A LaserJetIII seems to ignore about 8mm on the edges. Xerox machines
+% ignore even more, on all sides.
+% \begin{macrocode}
+\iflabel@traddimens
+ \LeftBorder=8mm
+ \RightBorder=8mm
+ \TopBorder=9mm
+ \BottomBorder=2mm
+\else
+ \LeftPageMargin=4mm
+ \RightPageMargin=4mm
+ \TopPageMargin=5mm
+ \BottomPageMargin=5mm
+ \InterLabelColumn=0mm
+ \InterLabelRow=0mm
+ \LeftLabelBorder=5mm
+ \RightLabelBorder=5mm
+ \TopLabelBorder=4mm
+ \BottomLabelBorder=4mm
+\fi
+% \end{macrocode}
+% We need to reset all the dimensions appropriately for a page of labels,
+% and the printer will need to know about the paper size as well.
+% \begin{macrocode}
+\textwidth=\paperwidth
+\textheight=\paperheight
+\topmargin=-1in
+\headheight=0em
+\headsep=0em
+\topskip=0em
+\footskip=0em
+\oddsidemargin=-1in
+\evensidemargin=-1in
+\pagestyle{empty}
+\parindent=0em
+\parskip=0pt
+% \end{macrocode}
+% Now calculate the size of labels simply as a proportion of the page
+% size (if you haven't got that right, this won't work, will it?).
+% This macro is to be executed before the first label is made. In
+% environment |labels| and macro |\genericlabel| (see below) this
+% happens automatically. If you write your own label environment or
+% macro, then model it after one of the aforementioned.
+%
+% We have two versions of this macro, depending on whether the
+% |newdimens| option has been set.
+% \begin{macrocode}
+\iflabel@traddimens
+\def\@LabelSetup{%
+ \global\label@width\textwidth
+ \global\divide\label@width by\LabelCols
+ \global\label@height\textheight
+ \global\advance\label@height by-\TopBorder
+ \global\advance\label@height by-\BottomBorder
+ \global\divide\label@height by\LabelRows
+% \end{macrocode}
+% The top margin of the paper is generally unused for
+% labels. \textsf{Avery} 5360
+% label sheets have a $1/4$-inch gutter on the top and bottom. However,
+% there are no left or right margin gutters. We adjust the top margin to
+% keep the labels from printing on the gutter.
+% \begin{macrocode}
+ \global\topmargin=-1in\global\advance\topmargin by\TopBorder
+% \end{macrocode}
+% It is not usually advisable to make the label printing go right to
+% the edge of the available area, so |\area@width| gives
+% the area that will actually be used for printing; the width is
+% cut down by |\LeftBorder| plus |\RightBorder|. These dimensions can be
+% set to zero if you have a design that uses the whole label.
+% \begin{macrocode}
+ \global\area@width=\label@width
+ \global\advance\area@width by -\LeftBorder
+ \global\advance\area@width by -\RightBorder
+% \end{macrocode}
+% If the labels are to be produced on a grid, for debugging, then the
+% usual setting of |\fbox| separator width and |\fbox| rule width must
+% be subtracted so that the label box doesn't crash into the grid.
+% \begin{macrocode}
+ \ifLabelGrid%
+ \global\advance\area@width by-2\fboxsep
+ \global\advance\area@width by-2\fboxrule
+ \fi
+% \end{macrocode}
+% The height of the label box will be |2\half@label|. However, this box
+% will definitely crash into the grid lines. Reduce the label
+% height to account for the rule and separator widths that will be added
+% automatically by the boxing routine later on.
+% \begin{macrocode}
+ \ifLabelGrid
+ \global\advance\label@height by-2\fboxsep
+ \global\advance\label@height by-2\fboxrule
+ \fi
+ \global\half@label=\label@height\divide\half@label by2\relax
+ \global\label@number=1\relax
+}
+% \end{macrocode}
+% Now we handle the |newdimens| variant. The same general scheme
+% applies, but the calculations are different.
+% \begin{macrocode}
+\else
+\def\@LabelSetup{%
+ \global\label@width\textwidth
+ \global\advance\label@width by-\LeftPageMargin
+ \global\advance\label@width by-\RightPageMargin
+ \global\advance\label@width by-\LabelCols\InterLabelColumn
+ \global\advance\label@width by\InterLabelColumn
+ \global\divide\label@width by\LabelCols
+ \ifdim\label@width<0pt
+ \PackageWarning{labels}{Some dimensions are silly: label width
+ \the\label@width~is negative!}
+ \label@width=0pt
+ \fi
+ \global\label@height\textheight
+ \global\advance\label@height by-\TopPageMargin
+ \global\advance\label@height by-\BottomPageMargin
+ \global\advance\label@height by-\LabelRows\InterLabelRow
+ \global\advance\label@height by\InterLabelRow
+ \global\divide\label@height by\LabelRows
+ \ifdim\label@height<0pt
+ \PackageWarning{labels}{Some dimensions are silly: label height
+ \the\label@height~is negative!}
+ \label@height=0pt
+ \fi
+% \end{macrocode}
+% We now adjust the |\...margin| parameters to take account of
+% |\TopPageMargin| and |\LeftPageMargin|.
+% \begin{macrocode}
+ \global\topmargin=-1in\global\advance\topmargin by\TopPageMargin
+ \global\oddsidemargin=-1in\global\advance\oddsidemargin by\LeftPageMargin
+ \global\evensidemargin=\oddsidemargin
+% \end{macrocode}
+% Again, |\area@width| gives the area that will actually be used for
+% printing; the width is cut down by |\LeftLabelBorder| plus
+% |\RightLabelBorder|. These dimensions can be set to zero if you
+% have a design that uses the whole label. Similarly, |\area@height|
+% gives the height of the printing area, |\half@label| gives half of
+% the label height and |\half@area| gives half of the printable area
+% height.
+% \begin{macrocode}
+ \global\area@width=\label@width
+ \global\advance\area@width by -\LeftLabelBorder
+ \global\advance\area@width by -\RightLabelBorder
+ \global\area@height=\label@height
+ \global\advance\area@height by -\TopLabelBorder
+ \global\advance\area@height by -\BottomLabelBorder
+ \global\half@label=\label@height\divide\half@label by 2\relax
+ \global\half@area=\area@height\divide\half@area by 2\relax
+ \global\label@number=1\relax
+}
+\fi
+% \end{macrocode}
+% The boolean variable |\LabelInfotrue| is used to toggle the amount
+% of information printed at runtime. The boolean is placed in the
+% preamble to invoke a more informative printout. The default is no
+% information, but still echo a message, saying how to print more
+% information.
+% \begin{macrocode}
+\def\LabelSetup{\@LabelSetup
+\ifLabelInfo
+ \typeout{Control sequences adjustable in the preamble:}
+ \typeout{\LabelRows=\the\LabelRows}
+ \typeout{\LabelCols=\the\LabelCols}
+ \iflabel@traddimens
+ \typeout{The newdimens option was not selected; the used parameters are:}
+ \TypeoutBlurb{\TopBorder}{\TopBorder}
+ \TypeoutBlurb{\BottomBorder}{\BottomBorder}
+ \TypeoutBlurb{\LeftBorder}{\LeftBorder}
+ \TypeoutBlurb{\RightBorder}{\RightBorder}
+ \else
+ \typeout{The newdimens option was selected; the used parameters are:}
+ \TypeoutBlurb{\TopPageMargin}{\TopPageMargin}
+ \TypeoutBlurb{\BottomPageMargin}{\BottomPageMargin}
+ \TypeoutBlurb{\LeftPageMargin}{\LeftPageMargin}
+ \TypeoutBlurb{\RightPageMargin}{\RightPageMargin}
+ \TypeoutBlurb{\InterLabelColumn}{\InterLabelColumn}
+ \TypeoutBlurb{\InterLabelRow}{\InterLabelRow}
+ \TypeoutBlurb{\TopLabelBorder}{\TopLabelBorder}
+ \TypeoutBlurb{\BottomLabelBorder}{\BottomLabelBorder}
+ \TypeoutBlurb{\LeftLabelBorder}{\LeftLabelBorder}
+ \TypeoutBlurb{\RightLabelBorder}{\RightLabelBorder}
+ \fi
+ \typeout{Computed values:}
+ \TypeoutBlurb{Label Width}{\label@width}
+ \TypeoutBlurb{Label Height}{\label@height}
+\else
+ \typeout{To print info, put `\protect\LabelInfotrue' in the preamble}
+\fi
+}
+% \end{macrocode}
+%
+% We might want to print the same label several times,
+% so \verb|\sticky@label| will repeat \verb|\make@label| a
+% specified number of times (\verb|\numberoflabels|)
+% \begin{macrocode}
+\numberoflabels=1%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\sticky@label{\l@so@far=0%
+ \loop\ifnum\l@so@far<\numberoflabels\advance\l@so@far by 1\make@label%
+ \repeat}
+% \end{macrocode}
+%
+% The real label-making macro appears below.
+% It assumes the actual text is in a box called \verb|\this@label|.
+% It is vital to make sure spaces are not included at the end of lines in
+% these macros, or all hell breaks loose. Internal checks are made for
+% box width and height, to report violations. The environments and
+% macros provided below always produce a ragged right box of fixed
+% width. Use |\genericlabel| to defeat the ragged right box and fixed
+% box width.
+%
+% \begin{macrocode}
+\def\make@label{%
+ \ifnum\LabelTotal=0\vfill\eject\LabelTotal=\LabelRows\relax
+ \multiply\LabelTotal by \LabelCols\fi
+ \advance\LabelTotal by -1\relax
+ \ifLabelGrid
+ \let\boxing@type\framebox
+ \else
+ \let\boxing@type\makebox
+ \fi
+% \end{macrocode}
+% The boxes made by the method below can overflow horizontally or
+% vertically. The code below emits an error message which pinpoints the
+% trouble and the degree of difficulty encountered. Most of the time
+% the text wrapping and ragged right controls fix the problem, but some
+% extra long lines can be troublesome. An essential part of this code is
+% to test the box for zero width, which will emit an empty label. If we
+% are doing it on purpose, then emit the label, otherwise discard it.
+% \begin{macrocode}
+ \settowidth{\LabTmp}{\usebox{\this@label}}%
+ \ifdim\LabTmp=0cm\let\action=\relax\else\let\action=\BuildB@x\fi
+ %\TypeoutBlurb{Box Width}{\LabTmp}%
+ \advance\LabTmp by -\area@width
+ \ifdim\LabTmp>0cm\relax
+ \PkgBlurb{Label too wide}{\LabTmp}\fi
+ \settoheight{\LabTmp}%
+ {\begin{tabular}{l}\usebox{\this@label}\end{tabular}}%
+ %\TypeoutBlurb{Box height}{\LabTmp}%
+ \iflabel@traddimens\advance\LabTmp by -\half@label
+ \else\advance\LabTmp by -\half@area\fi
+ \ifdim\LabTmp>0cm\relax
+ \LabTmp=2\LabTmp\PkgBlurb{Label too tall}{\LabTmp}\fi
+% \end{macrocode}
+% Check for an empty box. Build the box provided it has some
+% dimension or else we are skipping labels on purpose. Otherwise, it's
+% empty and we discard it.
+% \begin{macrocode}
+ \ifnum\skip@labels<\sk@pped\let\action=\BuildB@x\fi
+ \action
+}
+% \end{macrocode}
+% Now build the box for the actual label. The box has minimum
+% height, which is set by using a vertical rule of zero width. At the
+% same time, set a minimum box width.
+% Set a position to half-way up a strut of the height of the label,
+% thus forcing text to be the correct height and vertically centered.
+% Apply box methods to adjust the white space left and right, using
+% horizontal rules of zero height.
+% \begin{macrocode}
+\def\BuildB@x{%
+ \iflabel@traddimens
+ \boxing@type[\label@width][c]{%
+ \rule{0pt}{\label@height}%
+ \raisebox{\half@label}[0pt][0pt]{%
+ \rule{\LeftBorder}{0pt}%
+ \usebox{\this@label}%
+ \rule{\RightBorder}{0pt}%
+ }}%
+% \end{macrocode}
+% We have a slightly different system when we are using the new
+% dimension system. We vertically center the label in the printing
+% area and indent in by the value of |\LeftLabelBorder|. We also mess
+% with the value of |\fboxsep| to make a framed box which doesn't
+% interfere with the placing of the label text.
+% \begin{macrocode}
+ \else
+ \begingroup
+ \fboxsep=-\fboxrule
+ \boxing@type{%
+ \vbox to \label@height{%
+ \vskip\TopLabelBorder
+ \vss
+ \hbox to \label@width{%
+ \hskip\LeftLabelBorder
+ \usebox{\this@label}%
+ \hss
+ }%
+ \vss
+ \vskip\BottomLabelBorder
+ }%
+ }%
+ \endgroup
+ \fi
+% \end{macrocode}
+%
+% Print |+| for this label to target errors by label number.
+% Empty labels made on purpose are printed as |x|.
+% Start a new line and print \verb"|" if we have printed a row
+% of |\LabelCols| labels.
+% \begin{macrocode}
+ \ifnum\skip@labels<\sk@pped\message{x}\else\message{+}\fi
+ \ifnum\label@number=\LabelCols
+ \message{|}%
+ \endgraf\nointerlineskip
+ \iflabel@traddimens\else\vskip\InterLabelRow\fi
+ \global\label@number=1
+ \else\global\advance\label@number by 1
+ \iflabel@traddimens\else\hskip\InterLabelColumn\fi
+ \fi
+}
+% \end{macrocode}
+% To print out dimensions in more usual millimeters,
+% the following macros are used, which convert from \TeX's scaled points
+% into millimeters. The common \TeX{} points are also printed.
+% \begin{macrocode}
+\newcount\@Milli
+\def\ToMilli#1{\@Milli=#1\advance\@Milli by93225\relax
+\divide\@Milli by 186450\relax}
+\def\PkgBlurb#1#2{\ToMilli{#2}%
+ \PackageWarning{labels}{#1 by \the\@Milli mm (\the #2)}%
+}
+\def\TypeoutBlurb#1#2{\ToMilli{#2}%
+ \typeout{#1=\the\@Milli mm (\the #2)}%
+}
+% \end{macrocode}
+%
+% \section{User macros}
+% The basic case is a generic macro |\genericlabel{#1}| which takes its
+% argument |#1| and puts it out on a label. No ragged right. No fixed
+% width. Very basic.
+% \begin{macrocode}
+\newcommand{\genericlabel}[1]{%
+ \iffirst@label\LabelSetup\first@labelfalse\fi%
+ \savebox{\this@label}{#1}\sticky@label\@gobblecr}
+% \end{macrocode}
+% The more useful macro |\addresslabel[#1]{#2}| is based upon a tabular
+% environment, therefore it accepts lines ending in \verb"\\". It is
+% supposed to reproduce what is made by the |labels| environment. Extra
+% space left and right is removed from the tabular environment and the
+% width is fixed at value |\area@width| (see above for a discussion of
+% this computed dimension) with ragged right edge. The optional argument
+% |[#1]| is provided in order to set local values of certain variables,
+% for example, |[\fboxrule=2pt]| could appear as the optional argument
+% in order to locally change box rule size, without affecting the grid
+% line size used for debugging.
+% The plan is to use the common denominator of 2.09 and 2e, so
+% first we define some double argument double-talk.
+% \begin{macrocode}
+\long\def\L@dblarg#1{\@ifnextchar[{#1}{\L@xdblarg{#1}}}
+\long\def\L@xdblarg#1#2{#1[]{#2}}
+% \end{macrocode}
+% Using \LaTeX{2e} extensions, the command |\addresslabel[#1]{#2}| could
+% be coded as |\newcommand{\addresslabel}[2][]{...}|.
+% In coding common to both 2.09 and 2e, the following works:
+% \begin{macrocode}
+\long\def\addresslabel{\L@dblarg{\@addresslabel}}
+\long\def\@addresslabel[#1]#2{\genericlabel{#1%
+ \begin{tabular}{@{}p{\area@width}@{}}\raggedright #2\end{tabular}}}
+% \end{macrocode}
+% The macro |\boxedaddresslabel[#1]{#2}| adds a framed box around the
+% address label defined above. The trouble here is in determining the
+% box width, which is reduced from its normal size by the widths of the
+% box rule and rule separator. The optional argument |[#1]| is the same
+% as for the previous macro, but here it performs a real service,
+% because it is often the case that box rule and box separator sizes
+% should be adjusted locally.
+% \begin{macrocode}
+\long\def\boxedaddresslabel{\L@dblarg{\@boxedaddresslabel}}
+\long\def\@boxedaddresslabel[#1]#2{\genericlabel{#1%
+ \addr@width=\area@width\advance\addr@width by-2\fboxsep%
+ \advance\addr@width by-2\fboxrule\fbox{%
+ \begin{tabular}{@{}p{\addr@width}@{}}\raggedright #2\end{tabular}}}}
+% \end{macrocode}
+% The environment |labels|, for verbatim labels, will be defined.
+% \begin{macrocode}
+\long\def\labels
+ {\iffirst@label\LabelSetup\first@labelfalse\fi\start@@label}
+\def\endlabels{\end@@label}
+% \end{macrocode}
+% The label contents are saved in a box called |\this@label|, formed as
+% a raggedright minipage of width |\area@width|. The trick is to make
+% the end of line character into a macro |^^M| which gets executed each
+% time it is encountered. By testing for blank lines, we can find the
+% end of a series of consecutive address lines and cause the macro to
+% terminate the label box definition, and possibly start another. The
+% usual action taken on intercept of an end of line character is to
+% insert |\newline|. It is only the case of a blank line that causes
+% us to end the current label. Here, swallow a pending \verb|^M|, to
+% avoid having a blank line at the start of each label. Extra blank
+% lines cause blank labels, which are thrown away when encountered,
+% later on. A technical point: we cannot use \verb|\sbox|, as
+% otherwise \TeX\ gets confused, attempting to use \verb|\bgroup| as
+% the second argument to \verb|\sbox|, which is not what we want.
+% \begin{macrocode}
+\def\start@@label{%
+ \begin{lrbox}{\this@label}%
+ \begin{minipage}{\area@width}\raggedright%
+ \catcode `\^^M =\active\@gobblecr%
+}
+\def\end@@label{%
+ \end{minipage}\end{lrbox}%
+ \sticky@label}
+% \end{macrocode}
+%
+% The principal support macros needed to define the |labels| environment
+% will be defined below. These macros assume names and addresses appear
+% as consecutive lines separated by a blank line. If we are in the
+% middle of consecutive address lines, then just start a new line.
+% \begin{macrocode}
+\def\start@newline{\mbox{}\expandafter\newline}%
+% \end{macrocode}
+% If we have met a blank line, then finish the current label and start a
+% new label.
+% \begin{macrocode}
+\def\new@label{\end@@label\start@@label}%
+% \end{macrocode}
+% The macro |^^M| invokes either |\start@newline| or |\new@label|. To
+% define it, we use some hackery from Phil Taylor. Step one is to
+% activate a control sequence at end of line.
+% \begin{macrocode}
+\catcode `\^^M = \active%
+% \end{macrocode}
+% The opaque definition required uses |futurelet| to selectively expand
+% a control sequence during a definition. The macro |^^M| is supposed to
+% replace carriage returns by |\newline|, or else end this label and
+% start a new one with |\new@label|. The idea is to define |^^M| to be a
+% control sequence |\nexttoken|, active only when |^^M| has been made an
+% active control sequence. Then the expansion of |^^M{#1}| will be
+% |\nexttoken|, provided the next line |#1| following the current one
+% has no characters (except carriage return at the end). Otherwise, we
+% must be at the start of a new cluster of label lines.
+% \begin{macrocode}
+\def ^^M{\futurelet\nexttoken\isitapar}%
+\def\isitapar{\ifx^^M\nexttoken\let\action=\new@label\else%
+ \let\action\start@newline\fi\action}%
+% \end{macrocode}
+% Definitions involving |^^M| are finished. Re-instate the original
+% catcode for carriage-return.
+% \begin{macrocode}
+\catcode `\^^M = 5\relax%
+% \end{macrocode}
+% The syntax of the |labels| environment can be shortened to a single
+% line, provided an input file name is known and the contents have been
+% prepared for use with the |labels| environment.
+% \begin{macrocode}
+\def\labelfile#1{\begin{labels}\input#1\end{labels}}
+% \end{macrocode}
+% In the interest of a general engine for label production, the program
+% can prompt for the file name at runtime. This kind of feature makes it
+% possible to run one batch file to create labels, regardless of the
+% source.
+% \begin{macrocode}
+\def\promptlabels{\typein[\labelfilename]{What is the name of the
+ label file?}
+ \labelfile{\labelfilename}}
+% \end{macrocode}
+% It is possible that a number of empty labels should be printed before
+% going on to print the next set of labels.
+% The |\skiplabels| macro takes an
+% integer argument of the number of empty labels to produce. An |x| is
+% printed on the terminal for each such empty label. For example:
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{labels}
+% \begin{document}
+% \numberoflabels=19
+% \boxedaddresslabel{Me \\my street \\ mytown \\ England}
+% \skiplabels{2}% Make 21 on first sheet
+% \numberoflabels=16
+% \boxedaddresslabel{You \\your street \\ yourtown \\ England}
+% \end{document}
+% \end{verbatim}
+% \begin{macrocode}
+\newcount\sk@pped
+\def\skiplabels#1{\sk@pped=#1%
+ \savebox{\this@label}{\rule{0pt}{.5in}}%
+ \skip@labels=0\relax
+ \loop\ifnum\skip@labels<\sk@pped\make@label%
+ \advance\skip@labels by 1\relax\repeat}
+%</package>
+% \end{macrocode}
+%
+% \section{History and acknowledgements}
+% \begin{itemize}
+% \item (SPQR) v.1, May 9th 1989 simply allowed
+% for |\addresslabel{... \\ ...\\...}|
+% \item (SPQR) v.2, July 15th permitted verbatim style with no explicit end of lines
+% \item (SPQR) v.3, March 1991 made more generic
+% \item (SPQR) v.4, January 1992 checked and made to work with emtex drivers
+% to my satisfaction, and documented to bare-bones level with `doc' system.
+% \item (SPQR) v.5, March 1993 allowed for |\skiplabels|
+% \item (SPQR) v.6, January 1994 for \LaTeXe
+% \item (SPQR) v.7, January 1994 fixes
+% \item (SPQR) v.8, April 1994 revised .dtx file
+% \item (GG) v.9, April 1995 revised .dtx file to Package so it
+% works with |article|, |report| and |book| classes.
+% Revisions by |gustafson@math.utah.edu|.
+% Made source independent of paper size (it depended on a4 paper).
+% Fixed extra space bug in tabular array of |\addresslabel| -
+% it did not reproduce results of the |labels| environment.
+% Minipage lines weren't ragged, now they are.
+% New controls to set spaces around labels. Corrected the label
+% placement computations. Error reporting for labels that
+% are too big for the set dimensions. Report in millimeters.
+% Invoked label setup at runtime. New |\boxedaddresslabel[#1]{#2}|.
+% Micrometer placement of label grid on the page. Introduced empty
+% label algorithm. Got rid of strange error messages.
+% \item (GG) v.9, May 1995. |newenvironment{labels}| failed under \LaTeX{}
+% 2.09 (1991), but worked under later versions! Defining |\labels|
+% and |\endlabels| fixed the problem.
+% \item (SPQR) v.10, June 1995. Checked and issued.
+% \item (GG) v.11, January 1998.
+% New counter |\LabelTotal| and page eject when this counter is
+% zero.
+% Beta version April 1996, released January 1998. Documented
+% \LaTeX{}209 style file |olabels.sty|.
+% \item (JDG) v.12, January 2002.
+% Introduced more natural dimension description system, which
+% is activated by the `|newdimens|' package option. This is only
+% implemented for the \LaTeXe\ version.
+% \item (JDG) v.13, May 2003.
+% Bug fix release: don't break with the color package (thanks
+% to Dominique de Waleffe for reporting it)
+%
+% \end{itemize}
+% The crucial macros which make the system bearable for mailing lists
+% by redefining end of line came from Phil Taylor; apologies
+% to him for using them in a \LaTeX\ style file!
+%
+% \Finale
+\endinput
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
diff --git a/Master/texmf-dist/source/latex/labels/labels.ins b/Master/texmf-dist/source/latex/labels/labels.ins
new file mode 100644
index 00000000000..e2fb1443a96
--- /dev/null
+++ b/Master/texmf-dist/source/latex/labels/labels.ins
@@ -0,0 +1,50 @@
+\def\fileversion{4}
+\def\filedate{2003/05/22}
+\def\batchfile{labels.ins}
+\input docstrip.tex
+\keepsilent
+%
+% LaTeX2e document class for printing labels
+%
+% Sebastian Rahtz and Julian Gilbey
+%
+\preamble
+Originally copyright (C) 1993-1994-1995-1998 by Sebastian Rahtz
+ and Grant Gustafson
+Copyright (C) 2002-2003 by Julian Gilbey <jdg@debian.org>
+
+This program may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.2
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX
+version 1999/12/01 or later.
+
+This program consists of the files labels.dtx and labels.ins
+together with the generated files labels.sty and olabels.sty.
+
+\endpreamble
+
+% ignored commands
+\def\filedate{2003/05/22}
+\def\batchfile{labels.dst}
+\input docstrip.tex
+
+% package file
+
+\Msg{*** Generating style file ***}
+\generateFile{labels.sty}{f}{\from{labels.dtx}{package}}
+\generateFile{olabels.sty}{f}{\from{labels.dtx}{package,latex209}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space olabels.sty, labels.sty}
+\Msg{*}
+\Msg{***********************************************************}
+
+
+\endinput