summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-barcode
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-10-18 20:45:25 +0000
committerKarl Berry <karl@freefriends.org>2006-10-18 20:45:25 +0000
commitee55a90f4497f62a8b7cf4375ebc8b677d33a882 (patch)
tree692d8a148d4f37ceccac6a6af31d91aa33ebdf22 /Master/texmf-dist/doc/generic/pst-barcode
parent13a2c5a918f470bb66ade4498a7bde360c331bf0 (diff)
pst-barcode needs MAKEpst
git-svn-id: svn://tug.org/texlive/trunk@2347 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-barcode')
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/Changes58
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/README10
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/barcode.pdfbin0 -> 228289 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-barcode/barcode.tex1037
4 files changed, 1105 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/Changes b/Master/texmf-dist/doc/generic/pst-barcode/Changes
new file mode 100644
index 00000000000..17ab2457dbf
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-barcode/Changes
@@ -0,0 +1,58 @@
+----- pst-barcode.tex
+0.04 2006-07-23 - adding support for the ISBN-13 code
+ - printing the code from the current point and
+ no more from the origin
+0.03 2005-07-26 - Changes to the documentation and the syntax
+ of psbarcode (hv)
+0.02 2005-07-26 - first version (hv)
+
+
+----- pst-barcode.sty
+0.01 2005-07-26 first version (hv)
+
+
+----- pst-barcode.pro
+2006-03-04 - An encoder for the Reduced Space Symbology RSS Expanded was added.
+ - The incorrect definition of the USPS FIM-B symbol was fixed.
+ - An encoder for the Reduced Space Symbology RSS Limited was added.
+ The efficiency of RSS-14 was improved.
+ - An encoder for the new OneCode symbology used by the US
+ Postal Service was added.
+ - The FIM symbols now render according to their specification.
+ - The Postnet, Royal Mail, AusPost and KIX encoders were amended
+ so that the metrics of their default symbols confirms
+ strongly to their respective specifications.
+ - The encoders now pass an array containing the widths of the
+ bar space succession to the renderer allowing for sub-point
+ horizontal precision.
+ - The default border positions for EAN and UPC symbols were
+ amended to properly enclose the human readable text.
+ - The colour support code was fixed to prevent overwriting of
+ the current colour when values are left unspecified.
+ - The logic to guard whitespace in EAN symbols was migrated
+ from the encoders to the renderer.
+ - The whitespace guard symbols are now drawn directly making them
+ independant of any font.
+ - The inter-guard bar height of EANs and UPCs was amended.
+ - The renderer was amended to support the passing of encoder
+ specific arguments.
+ - The options barcolor, textcolor, bordercolor, showbackground
+ and backgroundcolor were added to the renderer.
+ - A flaw in the derivation of the top border height was fixed.
+ - add support for the new ISBN-13
+ - printing the code from the current point
+ - The performance of the renderer was improved by avoiding
+ unnecessary calls of setfont
+ - The auspost encoder was extended to support the customer
+ information field.
+2005-10-24 - A new encoder for the bar codes used by the
+ Australian Postal Service was added.
+2005-10-17 - adding a checksum for code 2of5 encoder
+2005-10-14 - some more changes to the possible charcters
+2005-09-26 - A new encoder was added to support the generation
+ of miscellaneous symbols.
+ - Support for generation of FIM symbols used on
+ US Postal service reply mail was added.
+2005-09-15 added Kix -- Dutch mail
+2005-09-17 choose the right syntax for saving the length
+2005-09-08 some more tweaks to the code
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/README b/Master/texmf-dist/doc/generic/pst-barcode/README
new file mode 100644
index 00000000000..8e3d83f73ad
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-barcode/README
@@ -0,0 +1,10 @@
+This version of pst-barcode uses the xkeyval package, the extended
+version of keyval.
+
+Save the files pst-barcode.sty|.tex|.pro in a directory, which is part of your
+local TeX tree. pst-barcode.pro should be saved in ../texmf/dvips/pstricks/
+Then do not forget to run texhash to update this tree.
+pst-barcode needs pstricks, which should be part of your
+local TeX installation, otherwise get it from a CTAN server, f.ex.
+http://www.dante.de/CTAN/graphics/pstricks/
+
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf b/Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf
new file mode 100644
index 00000000000..8f85434f353
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/barcode.tex b/Master/texmf-dist/doc/generic/pst-barcode/barcode.tex
new file mode 100644
index 00000000000..fe8f3541c39
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-barcode/barcode.tex
@@ -0,0 +1,1037 @@
+\documentclass{article}
+\usepackage{pstricks,tabularx,paralist}
+\usepackage{showexpl}
+\lstset{wide,preset=\raggedright}
+\usepackage{pst-barcode}
+\let\PSTfileversion\fileversion
+\usepackage[ps2pdf,colorlinks,linktocpage]{hyperref}
+\usepackage{breakurl}
+\def\CMD#1{\texttt{\textbackslash #1}}
+
+\title{Package \texttt{pst-barcode}\\
+\footnotesize v. \PSTfileversion}
+\author{Terry Burton\thanks{\protect\url{tez@terryburton.co.uk}}
+ \and Herbert Vo\ss\thanks{\protect\url{hvoss@tug.org}}}
+\date{\today}
+\begin{document}
+\maketitle
+
+
+\begin{center}
+\begin{tabular}{@{}>{\ttfamily}lll@{}}
+\textrm{\emph{file name}} & \emph{meaning} & \emph{version}\\\hline
+pst-barcode.sty & \LaTeX\ style file -- wrapper & 2006-07-23\\
+pst-barcode.tex & \TeX\ file -- PS interface & 2006-07-23\\
+pst-barcode.pro & PostScript file & 2006-07-23\\
+barcode.tex & documentation source & 2006-07-23\\
+barcode.pdf & documentation PDF & 2006-07-23\\
+\end{tabular}
+\end{center}
+
+
+
+\clearpage
+\tableofcontents
+
+
+\clearpage
+\section{Introduction}
+To install the package put the three files in a place, where \TeX{} will search
+for the files:
+
+\bigskip\noindent
+\begin{tabular}{@{}ll@{}}
+\emph{name} & \emph{target dir} \\\hline
+\verb+pst-barcode.tex+ & \verb+$LOCALTEXMF/tex/generic/pstricks/+\\
+\verb+pst-barcode.sty+ & \verb+$LOCALTEXMF/tex/latex/pstricks/+\\
+\verb+pst-barcode.pro+ & \verb+$LOCALTEXMF/dvips/pstricks/+ \\
+\verb+barcode.tex+ & \verb+$LOCALTEXMF/doc/pstricks/+\\
+\verb+barcode.pdf+ & \verb+$LOCALTEXMF/doc/pstricks/+ %$
+\end{tabular}
+
+\bigskip
+There is only one macro \verb+\psbarcode+ with the usual PSTricks syntax
+\begin{verbatim}
+\psbarcode[<TeX options>]{<PS options>}{<bar type>}
+\end{verbatim}
+
+Important is the fact, that the barcode is printed in a box of zero dimension.
+If you want to save some space in your text, use the \verb+pspicture+ environment
+or the \verb+\makebox+ macro.
+
+
+
+\section{The options}
+\subsection{The \TeX\ options}
+
+\begin{tabular}{@{}lll@{}}
+\emph{name} & \emph{default} & \emph{remarks}\\\hline
+\verb+transx+ & 0 & horizontal shift\\
+\verb+transy+ & 0 & vertical shift\\
+\verb+scalex+ & 1 & horizontal scaling\\
+\verb+scaley+ & 1 & vertical scaling\\
+\verb+rotate+ & 0 & rotating angle in degrees
+\end{tabular}
+
+\subsection{The PostScript options}
+
+\begin{tabularx}{\textwidth}{@{}llX@{}}
+\emph{name} & \emph{default} & \emph{remarks}\\\hline
+\verb+height+ & 1 & dimension is inch\\
+\verb+textsize+ & 10 & dimension is pt\\
+\verb+textpos+ & -2 & dimension is pt; it is the shift for additional code text\\
+\verb+inkspread+ & 0.15 & dimension is pt\\
+\verb+showborder+ & - & - \\
+\verb+borderwidth+ & 0.5 & dimension in pt \\
+\verb+borderleft+ & 10 & dimension in pt\\
+\verb+borderright+ & 10 & dimension in pt\\
+\verb+bordertop+ & 1 & dimension in pt\\
+\verb+borderbottom+ & 1 & dimension in pt\\
+\verb+borderwidth+ & 0.5 & dimension in pt\\
+\verb+width+ & - & dimension in inch\\
+%
+\verb+font+ & /Helvetica & must be a PostScript font\\
+\verb+includetext+ & - & enable human readable text \\
+\verb+includecheck+ & - & enable check digit \\
+\verb+includecheckintext+ & - & check digit visible in text
+\end{tabularx}
+
+\subsection{Examples for the TeX options}
+
+\begin{LTXexample}[pos=t,preset=\centering]
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{includetext}{ean8}
+\end{pspicture}
+\begin{pspicture}(-2,-1.5)(0.5,0.2in)
+\psbarcode[rotate=180,linecolor=red]{12345678}{includetext guardwhitespace height=0.6}{ean8}
+\end{pspicture}
+\begin{pspicture}(3.5,1.2in)
+\psbarcode[scalex=1.5,scaley=0.5,transy=20]{12345678}{includetext inkspread=0.5}{ean8}
+\end{pspicture}
+\end{LTXexample}
+
+\newpage
+\subsection{Examples for the PostScript options}
+
+\begin{LTXexample}[pos=t,preset=\centering]
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{includetext guardwhitespace height=0.6}{ean8}
+\end{pspicture}
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{textsize=15 includetext guardwhitespace height=0.6}{ean8}
+\end{pspicture}
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{includetext inkspread=0.5}{ean8}
+\end{pspicture}
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{includetext textpos=0}{ean8}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,preset=\centering]
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{includetext guardwhitespace}{ean8}
+\end{pspicture}
+\begin{pspicture}(3.5,1.2in)
+\psbarcode{12345678}{textsize=15 includetext guardwhitespace width=2}{ean8}
+\end{pspicture}
+\end{LTXexample}
+
+
+\section{Usage}
+By default the barcode has a width and a height of zero. Using the \CMD{parbox}
+macro or the \verb+pspicture+ environment can reserve the needed space for
+the barcode. The \CMD{fbox} in the following examples is used
+only for demonstration.
+
+
+\begin{LTXexample}[width=.5\linewidth]
+foo
+\fbox{%
+ \parbox[b][1in]{1.5in}{\psbarcode{241078}{includetext width=1.5 height=1}{code39}}}
+bar
+\end{LTXexample}
+
+\bigskip
+\begin{LTXexample}[width=.5\linewidth]
+foo
+\fbox{%
+\begin{pspicture}(0,-8pt)(1.5in,1in)
+ \psbarcode{241078}{includetext width=1.5 height=1}{code39}
+\end{pspicture}}
+bar
+\end{LTXexample}
+
+
+\section{Possible barcodes}
+
+The following section shows the symbologies that are supported by
+the encoders, including the available features for each. This list
+may not be up-to-date. If it does not contain any of the formats or
+features that you require then check the project source code or
+try the support mailing list.
+
+\subsection{EAN-13}
+
+\begin{description}
+\item[Characters] \verb+0123456789+
+\item[Data] 12 or 13 digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\\hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\item[Notes] If just 12 digits are entered then the check digit is calculated automatically
+\end{description}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(3,1.2in)
+\psbarcode[scalex=0.8,scaley=0.8]{9781860742712}{includetext guardwhitespace}{ean13}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{EAN-8}
+
+\begin{description}
+\item[Characters] \verb+0123456789+
+\item[Data] 8 digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\
+ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\end{description}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(-2,-1.2)(0,0.2in)
+\psbarcode[rotate=180,linecolor=red]{12345678}{includetext guardwhitespace height=0.6}{ean8}
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{UPC-A}
+
+\begin{description}
+\item[Characters] \verb+0123456789+
+\item[Data] 11 or 12 digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\
+ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\item[Notes] If just 11 digits are entered then the check digit is
+ calculated automatically
+\end{description}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(3,1.2in)
+\psbarcode[transx=15pt,transy=10pt]{78858101497}{includetext}{upca}
+\qdisk(0,0){3pt}\rput[lb](5pt,-10pt){Origin}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{UPC-E}
+
+\begin{description}
+\item[Characters] \verb+0123456789+
+\item[Data] 7 or 8 digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\
+ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\item[Notes] If just 7 digits are entered then the check digit is calculated automatically
+\end{description}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(1.5,1.2in)
+\psbarcode{0123456}{includetext}{upce}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{EAN-5}
+
+\begin{description}
+\item[Characters] \verb+0123456789+
+\item[Data] 5 digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\end{description}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(2,1in)
+\psbarcode{90200}{includetext guardwhitespace}{ean5}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{EAN-2}
+
+\begin{description}
+\item[Characters] \verb+0123456789+
+\item[Data] 2 digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\\hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\end{description}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(1,1in)
+\psbarcode{38}{includetext guardwhitespace}{ean2}
+\end{pspicture}
+\end{LTXexample}
+
+\newpage
+\subsection{ISBN}
+An ISBN symbol is really an EAN-13 with a particular prefix, 978 for the older ISBN-10 format, and others for the new ISBN-13 format.
+
+\begin{description}
+\item[Characters] \verb+-0123456789+
+\item[Data] 9 or 10 digits for ISBN-10 seperated appropriately with dashes
+\item[Data] 12 or 13 digits for ISBN-13 seperated appropriately with dashes
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\item[Notes] If just 9 (ISBN-10) or 12 (ISBN-13) digits are entered then the human readable,
+ ISBN check digit is calculated automatically
+\end{description}
+
+\smallskip
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(3,1in)
+\psbarcode{3-86541-114}{includetext guardwhitespace}{isbn}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip\enlargethispage{2ex}
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(3,1in)
+\psbarcode{978-3-86541-114}{includetext guardwhitespace}{isbn}
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{Code-39}
+
+\begin{description}
+\item[Characters] \verb+0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*+ %$
+\item[Data] Variable number of characters, digits and any of the symbols \texttt{-.\@ *\$/+\%}.
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includecheck} & Enable check digit\\
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make check digit visible in text\\
+ \end{tabular}
+\end{description}
+
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,1in)
+\psbarcode{CODE-39}{includecheck includetext}{code39}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Code-128 and UCC/EAN-128}
+
+\begin{description}
+\item[Characters] \verb|!"#$%&'\(\)*+,-./0...9:;<=>?@A...Z[\\]^_`a...z|\verb+{|}~+ %$
+\item[Data] Variable number of ASCII characters and special
+funtion symbols, starting with the approriate start character
+for the initial character set. UCC/EAN-128s must have a manditory
+\texttt{FNC 1} symbol immediately following the start character.
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make check digit visible in text\\
+ \end{tabular}
+\item[Notes] Any non-printable character can be entered via its escaped
+ ordinal value, for example \texttt{\^{}070} for \texttt{ACK}
+ and \texttt{\^{}102} for \texttt{FNC 1}. Since a caret symbol
+ serves as an escape character it must be escaped as \texttt{\^{}062}
+ if used in the data. The check character is always added automatically.
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,1in)
+\psbarcode{^104^102Count^0991234^101!}{includetext}{code128}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Rationalized Codabar}
+
+\begin{description}
+\item[Characters] \verb!0123456789-$:/.+ABCD! %$
+\item[Data] Variable number of digits and any of the symbols \texttt{-\$:/.+ABCD}.
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includecheck} & Enable check digit\\
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make check digit visible in text\\
+ \end{tabular}
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(4,1in)
+\psbarcode{0123456789}{includetext}{rationalizedCodabar}
+\end{pspicture}
+\end{LTXexample}
+
+
+\newpage
+\subsection{Interleaved 2 of 5 and ITF-14}
+
+\begin{description}
+\item[Characters] \verb!0123456789!
+\item[Data] Variable number of digits. An ITF-14 is 14 characters and
+ does not have a check digit.
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includecheck} & Enable check digit\\
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make check digit visible in text\\
+ \end{tabular}
+\item[Notes] The data may be automatically prefixed with 0 to make the
+ data, including optional check digit, of even length.
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,0.7in)
+\psbarcode{05012345678900}{includecheck height=0.7}{interleaved2of5}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Code 2 of 5}
+
+\begin{description}
+\item[Characters] \verb!0123456789!
+\item[Data] Variable number of digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,1.2in)
+\psbarcode{0123456789}{includetext textpos=75 textfont=Helvetica textsize=16}{code2of5}
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{Postnet}
+
+\begin{description}
+\item[Characters] \verb!0123456789!
+\item[Data] Variable number digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make the check digit visible in the text
+ \end{tabular}
+\item[Notes] Check digit is always added automatically
+\end{description}
+
+\begin{LTXexample}[width=.6\linewidth]
+\begin{pspicture}(7,0.3in)
+\psbarcode{01234567}{includetext textpos=-10 textfont=Arial textsize=10}{postnet}
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{Royal Mail}
+
+\begin{description}
+\item[Characters] \verb!ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS!
+\item[Data] Variable number digits and capital letters
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make the check digit visible in the text
+ \end{tabular}
+\item[Notes] Check digit is always added automatically
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,0.5in)
+\psbarcode{LE28HS9Z}{includetext}{royalmail}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Kix (Customer index) -- Dutch Mail}
+
+\begin{description}
+\item[Characters] \verb!ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS!
+\item[Data] Variable number digits and capital letters
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+% \texttt{includecheckintext} & Make the check digit visible in the text
+ \end{tabular}
+\item[Notes] Check digit is always added automatically
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,0.3in)
+\psbarcode{1203AA12}{includetext}{kix}
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{Australian postal service}
+
+\begin{description}
+\item[Characters] \verb!ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRSabc...xyz!
+\item[Data] Variable number digits and letters
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make the check digit visible in the text
+ \end{tabular}
+%\item[Notes] Check digit is always added automatically
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(5,0.3in)
+\psbarcode{1139549554}{includetext}{auspost}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{onecode}
+United States Postal Service, replaces POSTNET and PLANET symbols.
+Each barcode can be 20, 25, 29, or 31 digits long, depending on the type of ZIP code present. Each digit has four possible states, so one digit represents numbers 0-3.
+\begin{description}
+\item[Characters] \verb!0123456789!
+\item[Data] Variable number digits
+\iffalse
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\ \hline
+ \texttt{includetext} & Enable human readable text\\
+ \end{tabular}
+\fi
+\end{description}
+
+\begin{LTXexample}[pos=t,preset=\centering]
+\begin{pspicture}(5,0.3in)
+\psbarcode{0123456709498765432101234567891}{includetext}{onecode}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Symbol}
+The purpose of the symbol encoder is to store the definitions of miscellaneous barcode
+symbols such as the FIM symbols used by the US Postal Service on their reply mail.
+
+
+\begin{LTXexample}[width=.4\linewidth]
+\begin{pspicture}(1cm,1.5cm)
+\psbarcode{fima}{}{symbol}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=.4\linewidth]
+\begin{pspicture}(1cm,1.5cm)
+\psbarcode{fimb}{}{symbol}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=.4\linewidth]
+\begin{pspicture}(1cm,1.5cm)
+\psbarcode{fimc}{}{symbol}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=.4\linewidth]
+\begin{pspicture}(1cm,1.5cm)
+\psbarcode{fimd}{}{symbol}
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{MSI}
+
+\begin{description}
+\item[Characters] \verb!0123456789!
+\item[Data] Variable number digits
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\\hline
+ \texttt{includecheck} & Enable check digit\\
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make check digit visible in the text
+ \end{tabular}
+\end{description}
+
+\begin{LTXexample}[width=.5\linewidth]
+\begin{pspicture}(6,1in)
+\psbarcode{0123456789}{includecheck includetext}{msi}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Plessey}
+
+\begin{description}
+\item[Characters] \verb!01234B6789ABCDEF!
+\item[Data] Variable number of hexadecimal characters
+\item[Options]~\\
+ \begin{tabular}{l|l}
+ Option & Feature\\\hline
+ \texttt{includetext} & Enable human readable text\\
+ \texttt{includecheckintext} & Make the check digits visible in the text
+ \end{tabular}
+\item[Notes] Check digits are always added automatically.
+\end{description}
+
+\begin{LTXexample}[pos=t,preset=\centering]
+\begin{pspicture}(0,-2mm)(12,1in)
+\psbarcode{0123456789ABCDEF}{includetext}{plessey}
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Reduced Space Symbology (RSS)}
+This is a family that includes RSS-14\textregistered, RSS Limited\textregistered,
+and RSS Expanded\textregistered{} (\url{http://www.gs1.org/productssolutions/barcodes/technical/rss.html}). RSS-14 and RSS Limited encode Global Trade Item
+Numbers (GTINs). RSS Expanded will encode any of the GS1 System identification
+numbers as well as all other Application Identifiers.
+RSS is used in the healthcare industry.
+
+\begin{description}
+\item[Characters] \verb!0123456789!
+\item[Data] Variable number digits
+\end{description}
+
+\subsubsection{rss14}
+
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(12,.3in)
+\psbarcode{24012345678905}{height=0.3}{rss14}
+\end{pspicture}
+\end{LTXexample}
+
+\subsubsection{rsslimited}
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(12,.3in)
+\psbarcode{00978186074271}{height=0.3}{rsslimited}
+\end{pspicture}
+\end{LTXexample}
+
+\subsubsection{rssexpanded}
+\begin{LTXexample}[width=.3\linewidth]
+\begin{pspicture}(12,.3in)
+\psbarcode{000000010011001010100001000000010000}{height=0.3}{rssexpanded}
+\end{pspicture}
+\end{LTXexample}
+
+
+
+\section{Code Commentary}
+This commentary assumes familiarity with the PostScript
+language\footnote{The PostScript Language Tutorial and Cookbook
+(a.k.a. the Blue Book), which is freely available online, serves
+as both a useful tutorial and reference manual to the language.}.
+
+The code is split cleanly into two types of procedure:
+
+\begin{description}
+\item[The encoders]{Each of these represents a barcode
+symbology\footnote{By symbology we mean an accepted standard for
+representation of data as a barcode},
+e.g. EAN-13 or Code-128. It takes a string containing the barcode
+data and a string containing a list of options that modify the
+output of the encoder. It generates
+a structured representation of the barcode and its text for the
+symbology, including the calculation of check digits where necessary.}
+\item[The renderer]{This takes the output of an encoder and
+generates a visual representation of the barcode.}
+\end{description}
+
+This means that all barcodes can be generated simply in a similar
+manner:
+
+\begin{lstlisting}
+(78858101497) (includetext height=0.6) upca barcode
+(0123456789) (includecheck) interleaved2of5 barcode
+\end{lstlisting}
+
+
+\subsection{The Barcode Data Structure}
+\label{datastructure}
+The following table describes the structured representation of a
+barcode that is passed by an encoder to the renderer as a
+dictionary when the PostScript is executed.
+
+\begin{center}
+
+\begin{tabular}{l|c|p{6.5cm}}
+Element & Key & Value \\
+\hline
+Space bar succession & \texttt{sbs} &
+String containing the integer widths, in points, of each bar and
+space, starting with the leftmost bar.\\
+
+Bar height succession & \texttt{bhs} &
+Array containing the height of each bar in inches, starting with
+the leftmost bar.\\
+
+Bar base succession & \texttt{bbs} &
+Array containing the offset of the base of each bar in inches,
+starting with the leftmost bar.\\
+
+Human readable text & \texttt{txt} &
+Array of arrays that contain the character, position, height,
+font and scale factor (font size), in points, for each of the visible
+text characters.
+\end{tabular}
+
+\end{center}
+
+
+\subsection{An Encoder}
+
+The procedure labelled code2of5 is a simple example of an encoder,
+which we will now consider. Its purpose is to accept as input a string
+containing the barcode contents and a string containing a list of options,
+and to process these in a way
+that is specific to this encoder, and finally to output an
+instance of the dictionary-based data structure described in section
+\ref{datastructure} that represents the barcode contents in the
+Code 2 of 5 symbology.
+
+As with all of the encoders, the input string is assumed to be valid for
+the corresponding symbology, otherwise the behaviour is undefined.
+
+The variables that we use in this procedure are confined to local
+scope by declaring the procedure as follows:
+
+\begin{lstlisting}
+/code2of5 {
+
+ 0 begin
+
+...
+
+ end
+
+} bind def
+/code2of5 load 0 1 dict put
+\end{lstlisting}
+
+We start by immediately reading the contents strings that are passed as
+arguments to this procedure by the user.
+
+\begin{lstlisting}
+ /options exch def
+ /barcode exch def
+\end{lstlisting}
+
+We initialise a few default variables. Those variables corresponding to
+options that can be enabled with the options argument are initially
+set to false.
+
+\begin{lstlisting}
+ /includetext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+\end{lstlisting}
+
+The options string is tokenised with each successive token defining either a
+name value pair which we instantiate or a lone variable that we define as true,
+allowing us to override the given default variables given above.
+
+\begin{lstlisting}
+options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+} loop
+\end{lstlisting}
+
+Since any user given options create variables that are strings we need to convert
+them back to their intended types.
+
+\begin{lstlisting}
+/textfont textfont cvlit def
+/textsize textsize cvr def
+/textpos textpos cvr def
+/height height cvr def
+\end{lstlisting}
+
+We then create an array of string encodings for each of the available
+characters which we then declare in another string. This information
+can be derived from careful reading of the relevant specification,
+although this is often surprisingly difficult to obtain.
+
+\begin{lstlisting}
+ /encs
+ [ (1111313111) (3111111131) (1131111131) (3131111111)
+ (1111311131) (3111311111) (1131311111) (1111113131)
+ (3111113111) (1131113111) (313111) (311131)
+ ] def
+
+ /barchars (0123456789) def
+\end{lstlisting}
+
+We now store the length of the content string and calculate the
+total number of bars and spaces in the resulting barcode.
+We initialise a string of size dependant on this length into
+which we will build the space bar succession. Similarly, we create
+an array into which we will add the human readable text information.
+
+\begin{lstlisting}
+ /barlen barcode length def
+ /sbs barlen 10 mul 12 add string def
+ /txt barlen array def
+\end{lstlisting}
+
+We now begin to populate the space bar succession by adding the
+encoding of the start character to the beginning.
+
+\begin{lstlisting}
+ sbs 0 encs 10 get putinterval
+\end{lstlisting}
+
+We now enter the main loop which iterates over the content string
+from start to finish, looking up the encoding for each character,
+adding this to the space bar succession.
+
+It is important to understand how the encoding for a given character
+is derived. Firstly, given a character, we find its position in the
+string of all available characters. We then use
+this position to index the array of character encodings to obtain
+the encoding for the given character, which is added to the space/bar
+succession. Likewise, the character is added to the array of human
+readable text along with positioning and font information.
+
+\begin{lstlisting}
+ 0 1 barlen 1 sub {
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop
+ length /indx exch def
+ pop pop
+ /enc encs indx get def
+ sbs i 10 mul 6 add enc putinterval
+ txt i [barcode i 1 getinterval i 14 mul 10 add -7
+ textfont textsize] put
+ } for
+\end{lstlisting}
+
+The encoding for the end character is obtained and added to
+the end of the space bar succession.
+
+\begin{lstlisting}
+ sbs barlen 10 mul 6 add encs 11 get putinterval
+\end{lstlisting}
+
+Finally we prepare to push a dictionary containing the space bar
+succession (and any additional information defined in section
+\ref{datastructure}) that will be passed to the renderer.
+
+\begin{lstlisting}
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval
+\end{lstlisting}
+
+
+\subsection{The Renderer}
+
+The procedure labelled barcode is known as the renderer, which we now
+consider. Its purpose is to accept as input an instance of the
+dictionary-based data structure described in section
+\ref{datastructure} that represents a barcode in some arbitrary
+symbology and produce a visual rendering of this at the current
+point.
+
+The variables that we use in this procedure are confined to local
+scope by declaring the procedure as follows:
+
+\begin{lstlisting}
+/barcode {
+
+ 0 begin
+
+...
+
+ end
+
+} bind def
+/barcode load 0 1 dict put
+\end{lstlisting}
+
+We then immediately read the dictionary-based data structure which
+is passed as a single argument to this procedure by an encoder, from
+which we extract the space bar succession, bar height succession and bar
+base succession.
+
+\begin{lstlisting}
+ /args exch def
+ /sbs args (sbs) get def
+ /bhs args (bhs) get def
+ /bbs args (bbs) get def
+\end{lstlisting}
+
+We attempt to extract from the dictionary the array containing the
+information about human readable text. However, this may not exist
+in the dictionary in which case we create a default empty array.
+
+\begin{lstlisting}
+ args (txt) known
+ {
+ /txt args (txt) get def
+ }
+ {
+ /txt [] def
+ } ifelse
+\end{lstlisting}
+
+We have extracted or derived all of the necessary information
+from the input, and now use the space bar succession, bar height
+succession and bar base succession in calculations that create a
+single array containing elements that give coordinates for each of
+the bars in the barcode.
+
+We start by creating a bars array that is half the length of the
+space bar succession. We build this by repeatedly adding array elements
+that contain the height, x-coordinate, y-coordinate and width of
+single bars. The height and y-coordinates are read from the bar
+height succession and the bar base succession, respectively, whilst
+the x-coordinate and the width are made from a calculation of the
+total indent, based on the space bar succession and a compensating
+factor that accounts for ink spread.
+
+\begin{lstlisting}
+ /bars sbs length 1 add 2 idiv array def
+ /x 0.00 def
+ 0 1 sbs length 1 sub {
+ /i exch def
+ /d sbs i get 48 sub def
+ i 2 mod 0 eq
+ {
+ /h bhs i 2 idiv get 72 mul def
+ /c d 2 div x add def
+ /y bbs i 2 idiv get 72 mul def
+ /w d 0.15 sub def
+ bars i 2 idiv [h c y w] put
+ } if
+ /x x d add def
+ } for
+\end{lstlisting}
+
+Finally, we perform the actual rendering in two phases. Firstly we
+use the contents of the bars array that we just built to render each
+of the bars, and secondly we use the contents of the text array
+extracted from the input argument to render the
+text. We make an efficiency saving here by not performing loading and
+rescaling of a font if the scale factor for the font size is 0. The graphics
+state is preserved across calls to this procedure to prevent
+unexpected interference with the users environment.
+
+\begin{lstlisting}
+ gsave
+
+ bars {
+ {} forall
+ setlinewidth moveto 0 exch rlineto stroke
+ } forall
+
+ txt {
+ {} forall
+ dup 0 ne {exch findfont exch scalefont setfont}
+ {pop pop}
+ ifelse
+ moveto show
+ } forall
+
+ grestore
+\end{lstlisting}
+
+\subsection{Notes Regarding Coding Style}
+
+PostScript programming veterans are encouraged to remember that the
+majority of people who read the code are likely to have little,
+if any, prior knowledge of the language.
+
+To encourage development, the code has been written with these
+goals in mind:
+
+\begin{itemize}
+\item[-]{That it be easy to use and to comprehend}
+\item[-]{That it be easy to modify and enhance}
+\end{itemize}
+
+To this end the following points should be observed for all new
+code submissions:
+
+\begin{itemize}
+\item[-]{New encoders should be based on the code of a similar
+existing encoder}
+\item[-]{Include comments where these clarify the operations
+involved, particular where something unexpected happens}
+\item[-]{Prefer simplicity to efficency and clarity to
+obfuscation, except where this will be a problem}
+\end{itemize}
+
+\subsection{Installing the Barcode Generation Capability into a Printer's Virtual Machine}
+
+Most genuine PostScript printers allow procedures to be defined such
+that they persist across different jobs through the use of the \texttt{exitserver}
+command. If your printer supports this then you will be able to print
+the main code containing the definitons of all the encoders and the
+renderer once, e.g. soon after the device is turned on, and later omit
+these definitons from each of the barcode documents that you print.
+
+To install the barcode generation capabilities into the
+virtual machine of a PostScript printer you need to uncomment a line near the
+top of the code so that it reads:
+
+\begin{lstlisting}
+serverdict begin 0 exitserver
+\end{lstlisting}
+
+Once this code is printed the procedural definitions for the encoders and
+the renderer will remain defined across all jobs until the device is reset
+either by power-cycling or with the following code:
+
+\begin{lstlisting}
+serverdict begin 0 exitserver systemdict /quit get exec
+\end{lstlisting}
+
+
+
+\clearpage
+\section{Package code}
+\subsection{\texttt{pst-barcode.sty}}
+
+\lstinputlisting[xleftmargin=-1cm,xrightmargin=-1cm]{pst-barcode.sty}
+
+\subsection{\texttt{pst-barcode.tex}}
+\lstinputlisting[xleftmargin=-1cm,xrightmargin=-1cm]{pst-barcode.tex}
+
+%\subsection{\texttt{pst-barcode.pro}}
+%\lstinputlisting[language={},xleftmargin=-1.5cm,xrightmargin=-1.5cm]{pst-barcode.pro}
+\end{document}
+