summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/isodoc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-04-09 21:50:10 +0000
committerKarl Berry <karl@freefriends.org>2007-04-09 21:50:10 +0000
commit37978e7887833a19ccf0729dc2a8ccdd5eb246c7 (patch)
treed38ad363b25777984df12f6985ae817a6c1c2405 /Master/texmf-dist/source/latex/isodoc
parent8b900ccf26a7b6d6ff353536ecf8799983450b6c (diff)
new latex package isodoc
git-svn-id: svn://tug.org/texlive/trunk@4141 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/isodoc')
-rw-r--r--Master/texmf-dist/source/latex/isodoc/isodoc.dtx1743
-rw-r--r--Master/texmf-dist/source/latex/isodoc/isodoc.ins61
2 files changed, 1804 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/isodoc/isodoc.dtx b/Master/texmf-dist/source/latex/isodoc/isodoc.dtx
new file mode 100644
index 00000000000..464bc96ae5e
--- /dev/null
+++ b/Master/texmf-dist/source/latex/isodoc/isodoc.dtx
@@ -0,0 +1,1743 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2006 by Wybo Dekker <wybo@servalys.nl>
+% -------------------------------------------------------
+%
+% This file 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.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{isodoc.dtx}
+%</driver>
+%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<class>\ProvidesClass{isodoc}%
+%<*class>
+ [2007/04/05 v0.2 isodoc class for letters and invoices]
+%</class>
+%<class>\ifnum\pdfoutput=1\else\ClassError{isodoc}{Compile me with pdflatex!}{}
+%<class>\fi
+%<*driver>
+\documentclass[11pt]{ltxdoc}
+\usepackage[
+ verbose,
+ pdftex,
+ paper=a4paper,
+ margin=35mm,
+ top=15mm,
+ bottom=20mm,
+ nohead
+]{geometry}
+\usepackage{osf-txfonts}\pdfprotrudechars=1
+\usepackage{ctable,pdfpages,paralist,marvosym,sverb,ltablex}
+\usepackage[colorlinks]{hyperref}
+\parindent0pt\parskip1ex
+\EnableCrossrefs
+\PageIndex
+\RecordChanges
+%\OnlyDescription
+
+\newcommand{\FIG}[3]{ % pdfname label caption
+ \begin{figure}
+ \begin{center}
+ \fboxsep=0pt
+ \fbox{\includegraphics[width=\hsize]{#1.pdf}}
+ \caption{#3\label{#2}}
+ \bigskip
+ \bigskip
+ \bigskip
+ \end{center}
+ \end{figure}
+}
+\newcommand{\OPTS}[3]{
+ \smallskip\noindent
+ \begin{tabularx}{\hsize}{@{}lX@{}}
+ \multicolumn{2}{@{}l}{\bfseries #1}\NN
+ \multicolumn{2}{@{}p{\hsize}@{}}{#2}\NN\NN
+ #3
+ \end{tabularx}
+}
+\def\T#1{\texttt{#1}}
+\def\C#1{\texttt{$\mathtt{\backslash}$#1}}
+\def\CMP#1{\C{#1}\marginpar{\C{#1}}}
+
+\begin{document}
+ \DocInput{isodoc.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \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 \~}
+%
+% \changes{v0.1}{2006/03/18}{Initial version}
+% \changes{v0.2}{2007/04/05}{added options phoneprefix, routingno, logoaddress
+% accountname now optional
+% accountnumber-> accountno
+% german and french translations corrected
+% indents removed in header fields
+% expect printer to have more unprintable border
+% ascriptiontext -> accountnametext for dutch
+% Interdocument language changes now work;
+% Vatno, if defined, is reported with \account data;
+% country in returnaddress now separated with dot;
+% option changes kept local to the letter/invoice;
+% English/American accountname text adapted
+% }
+%
+% \DoNotIndex{%
+% \", \baselineskip,\ifdim, \quad,
+% \', \begin, \ifnum, \raggedright,
+% \\, \bfseries, \ifx, \raisebox,
+% \^, \cmidrule, \ignorespaces, \rule,
+% \`, \colorbox, \immediate, \scriptsize,
+% \@auxout, \def, \includegraphics, \scshape,
+% \AtBeginDocument, \define@key, \lastpage@putlabel,\selectlanguage,
+% \AtEndDocument, \definecolor, \let, \setbox,
+% \CurrentOption, \else, \long, \setkeys,
+% \DeclareOption, \empty, \multicolumn, \sffamily,
+% \DescribeMacro, \end, \newcount, \space,
+% \EUR, \enspace, \newdimen, \tbfigures,
+% \LARGE, \fancyhead, \newif, \textbf,
+% \Large, \fancyhf, \newlabel, \textbullet,
+% \LoadClass, \fi, \noindent, \thepage,
+% \ML, \footnotesize,\number, \thispagestyle,
+% \NN, \geometry, \or, \undefined,
+% \PassOptionsToClass,\hfill, \pageref, \unskip,
+% \ProcessOptions, \hsize, \pagestyle, \vbox,
+% \RequirePackage, \hspace, \parindent, \vfill,
+% \TPGrid, \ht, \pdfinfo, \vspace,
+% \addtocounter, \if@twoside, \pdfprotrudechars, \write,
+% \advance, \ifcase, \qquad, \string,
+% \rightskip, \fileversion, \filedat, \clearpage,
+% \parskip
+% }
+% \GetFileInfo{isodoc.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \title{The \textsf{isodoc} class\thanks{This document
+% corresponds to \textsf{isodoc}~\fileversion, dated \filedate.}\\for
+% letters, invoices, and more}
+% \author{Wybo Dekker \\ \texttt{wybo@servalys.nl}}
+%
+% \maketitle
+%
+% \begin{abstract}\noindent
+% The \texttt{isodoc} class can be used for the preparation of letters,
+% invoices, and, in the future, similar documents.
+% Documents are set up with options, thus making the class easily adaptable to
+% user's wishes and extensible for other document types.
+% \\[2ex]
+% \textbf{Keywords:} letter, invoice, key/value, \textsc{nen1026}
+%
+% \end{abstract}
+% \tableofcontents
+% \section{Introduction}
+%
+% This class is intended to be used for the preparation of letters and
+% invoices. Its starting point was Victor Eijkhout's NTG
+% {\texttt{brief}} class\footnote{CTAN: ntgclass/briefdoc.pdf}, which
+% implements the \textsc{nen 1026} standard. The \texttt{brief} class
+% does not provide facilities for invoices and it is not easily
+% extensible.
+%
+% The goal for the \texttt{isodoc} class is to be extensible and easy to
+% use by providing \textsl{key=value} configuration. Furthermore, texts
+% that need to be placed on prescribed positions on the page (there are
+% many such texts) are positioned by using the {\texttt{textpos}}
+% package.\footnote{CTAN: textpos/textpos.pdf} This provides a very
+% rugged construction of the page.
+%
+% The class itself contains many general definitions, but variable data, such as
+% opening, closing,
+% address and many more, have to be defined using \textsl{key=value}
+% definitions, either in the document or
+% in a style file. The latter is indicated for definitions that don't vary on a
+% per document basis, such as your company name, address, email address and so
+% on. Thus if you run a company and are the secretary of a club,
+% you would have style files for each of them, plus one for your private letters
+% or invoices.\footnote{If you archive your documents in their source form
+% only, it may be wise to work without a style file and set all options in the
+% document itself!}
+%
+% The general setup of a document producing one or more letters is (see
+% figures~\ref{letter1}--\ref{logo2}, page~\pageref{logo1}--\pageref{logo2},
+% for examples):
+% \begin{verbatim}
+% \documentclass{isodoc}
+% \usepackage{<somestyle>}
+% \setupdocument{<generaloptions>}
+% \begin{document}
+% \letter[<addressee_specific_options>]{<letter_content>}
+% ... more \letter calls ...
+% \end{document}
+% \end{verbatim}
+% Similarly, the general setup of a document producing one or more invoices is
+% (figure~\ref{invoice}, page~\pageref{invoice}):
+% \begin{verbatim}
+% \documentclass{isodoc}
+% \usepackage{<somestyle>}
+% \setupdocument{<generaloptions>}
+% \begin{document}
+% \invoice[<addressee_specific_options>]{<invoice_content>}
+% ... more \invoice calls ...
+% \end{document}
+% \end{verbatim}
+%
+% \section{Options}
+%
+% As shown in the two examples in the previous section, there are three commands
+% that can set options: |\setupdocument|, |\letter|, and |\invoice|.
+% These commands will be further explained in the \textsl{Commands} section.
+% |\setupdocument| is normally used to set options that are common to all
+% letters of invoices in the document, like your company data; |\letter|, and
+% |\invoice| set only those options that are different for each letter or
+% invoice, like the |to| and |opening| options.
+%
+% This section lists and explains all available options.
+% All options can be used in both the style files and in the document
+% source, although several will normally only be used in style files (such as
+% |company|) and some only in the document source (such as |to| or |opening|).
+%
+% \OPTS{Language}{Currently five languages are defined. As I am not particularly
+% strong in the translation of administrative terminology, please feel free to
+% send me corrections. And if you don't find your own language here, please send
+% me your translations and your language will be added. The keywords below set
+% the language, English is used by default.}{
+% \T{dutch} & Set language to Dutch, \NN
+% \T{english} & English,\NN
+% \T{german} & German,\NN
+% \T{american} & American,\NN
+% \T{french} & or French.\NN
+% \T{foreign} & Use this key if you send your letter to a foreign
+% country. With it, your country will be added to
+% return and logo addresses, your zip code will be
+% prefixed with your country code, telephone numbers will
+% be prefixed with +31-- (or whatever your \T{areacode}
+% option has been set to) instead of just a 0. In
+% the \C{accountdata} command, it causes \textsc{iban} en
+% \textsc{bic} code to be included.\NN
+% }
+%
+% \OPTS{Logo}{Information about the sender is defined here. The logo, by
+% default, consists of a large company name on top a rule with, hanging under the rule,
+% a contact person's data.
+% You can define the latter either explicitly with the |logoaddress| option,
+% or let it automatically be created from the contents of the options |who|, |street|,
+% |prezip|, |zip|, |city|, |country|, and |foreign|, as far as you have defined those.
+% Definition in parts can be useful if you need
+% them elsewhere in your document.}{
+% \T{company = ...} & Your company name as it should appear in the logo (if
+% you use the default logo) and in the return address
+% (where it may get overridden by the \T{returnaddress}
+% keyword.) For private documents, use your name or
+% nickname here.\NN
+% \T{logoaddress = ...}& Contact person's data; use |\\| commands for line breaks.
+% If you don't define this option, the data will be constructed
+% from the following options.\NN
+% \T{who = ...} & Contact person's name; probably your own name.\NN
+% \T{street = ...} & Street in the sender's address.\NN
+% \T{city = ...} & City in the sender's address.\NN
+% \T{zip = ...} & Zip in the sender's address.\NN
+% \T{country = ...} & Country in the sender's address. Only used if \T{foreign}
+% key was used.\NN
+% \T{countrycode = ...}& Sender's country code. For The Netherlands: NL\NN
+% \T{areacode = ...} & Sender's area code. For The Netherlands: 31\NN
+% }
+%
+% \OPTS{Address window}{The addressee's address is printed in a window. The
+% width of the window is two columns (70 mm), and its contents are vertically
+% centered in it. There are no limits to the vertical size of the
+% window, other than the physical size of the window in the envelopes you use.
+% The vertical position of the window's center is set with the \T{addresscenter}
+% keyword. Horizontally there are two options: left or right.}{
+% \T{leftaddress} & Places the window over columns 2 and 3; this is the
+% default.\NN
+% \T{rightaddress} & Places the window over columns 4 and 5.\NN
+% \T{addresscenter = ...} & Distance in mm of the center of the window from the top of the
+% paper; the default value is 63.5 mm, fitting for a DL
+% envelope for triple folded A4 (110x220mm) with a window
+% at 50 mm from the top, 30mm high.\footnote{The middle of
+% the window is at 50+30/2=65 mm from the top of the
+% envelope; the paper is folded (see the folding options
+% below) to give the folded paper a tolerance of 1.5mm on
+% both sides in the envelope, so the address should be
+% placed 1.5 mm higher at 65-1.5=63.5 mm.} Use
+% \T{addresscenter} \textsl{after} \T{fold}, \T{fold2} or \T{fold3},
+% because the definition of the folding marks also puts
+% the window positions at their corresponding
+% defaults.\NN
+% \T{to = ...} & The addressee's address. New lines can be introduced with the \C{}\C{}
+% command; lines longer than 70 mm will cause extra
+% newlines.\NN\relax
+% \T{[no]return} & Do or don't print a return address on top of the
+% addressee's address. This is useful if blank window envelopes
+% are used. The return address is composed from the
+% contents of the \T{company}, \T{street}, \T{zip}, \T{city}, and
+% \T{country} keywords; it is printed in a bold
+% script size sans serif font and is is separated from
+% the addressee's address with a rule. The country will
+% only be printed if the \T{foreign} keyword has been used.\NN
+% \T{returnaddress = ...}& The return address, if it is composed as just
+% described, may become too long to fit in the address
+% window. Or you may want to define a completely
+% different return address. With the \T{returnaddress} keyword you can
+% redefine the return address. Use \C{}\C{} to insert
+% bullets. \NN
+% }
+%
+% \OPTS{Opening and Closing}{A letter is started with an opening -- something
+% like `Dear John', and ended with a closing -- something like
+% `Regards,\T{<newline>}Betty', perhaps with an autograph (or white space) in between.}{
+% \T{opening = ...} & Dear John\NN
+% \T{closing = ...} & Regards\NN
+% \T{signature = ...} & Betty\NN
+% \T{autograph = ...} & \begin{minipage}[t]{\hsize}
+% This keyword can have one of the 10 values 0--9:\\[-\baselineskip]
+% \begin{compactitem}
+% \item [0:] no autograph; the \T{signature} appears right under
+% the \T{closing}. This is the default if the |autograph| option
+% is not used (using it without a value is equivalent to
+% |autograph=2|).
+% \item [1:] generates extra whitespace between
+% \T{signature} and \T{closing} for a hand-written
+% autograph. Change with the \T{closingskip} key.
+% \item [2--9:] inserts one of eight autograph images
+% which, with the \C{autograph} command,
+% may have been defined in the style file.\\\mbox{}
+% \end{compactitem}
+% \end{minipage}
+% \NN
+% \T{enclosures = ...} & This keyword can be used to add a note, at the end of
+% the document, which starts with \textbf{Enclosure:}
+% followed by the value of the keyword. Multiple
+% enclosures can be separated with \C{}\C{} commands. If
+% those are found, the starting text will be
+% \textbf{Enclosures:}.\NN
+% \T{closingskip = ...} & white space between signature and closing. The
+% default is \T{2}\C{baselineskip}.
+% }
+%
+% \OPTS{Headline fields}{Under the address window, a headline is printed. The
+% page is vertically divided in six columns, one each for the left and right
+% margins, and four which, in the headline,
+% say: \textsl{Your letter of}, \textsl{Your reference}, \textsl{Our reference},
+% and \textsl{Date}, each with their respective contents under them. If the
+% \T{subject} keyword is used, an extra line starting with \textsl{Subject:} will
+% appear, followed by the contents on the same line and over a width of 2.5
+% columns. If needed, extra lines will be used.}{
+% \T{yourletter = ...} & first field in the headline: the date of the letter
+% this document is reaction on; empty by default.\NN
+% \T{yourref = ...} & second field in the headline: addressee's reference of the letter
+% this document is reaction on; empty by default.\NN
+% \T{ourref = ...} & third field in the headline: your own reference for
+% this document.\NN
+% \T{date = ...} & fourth field of the headline; the default is `Undefined
+% date', i.e.\ the date of \C{today} is not the default
+% as this would make the date untraceable from the document
+% source only. The argument of the \T{date} option must
+% have the form \T{yyyymmdd}; it will be translated into a
+% date like ``May 3, 2006'' if the document language is
+% English, or into its translation in the actual language.\NN
+% \T{subject = ...} & subject of this document; is placed under the headline,
+% over the width of the first, second and half of the
+% third fields.\NN
+% }
+%
+% \OPTS{Footer fields}{Footer fields are shown in the order in which
+% they appear below; they are empty by default, and empty
+% fields are not displayed.}{
+% \T{[no]footer} & enables or disables printing a page footer; there is room
+% for upto four fields, if you set five fields, the last
+% one will appear in the right margin.\NN
+% \T{phone = ...} & if not empty, prints `phone' in the first field of the
+% page footer, with the contents under it, prefixed with a~0 or,
+% if the \T{foreign} option was used, the areacode (set with the
+% \T{areacode} option.) Telephone numbers should thus be entered
+% without a prefix.\NN
+% \T{phoneprefix} & prefix for phone numbers. The default is `0'; will be changed
+% into `+<areacode>-' if the \T{foreign} option is used.\NN
+% \T{cellphone = ...} & same for cellphone...\NN
+% \T{fax = ...} & fax...\NN
+% \T{email = ...} & email...\NN
+% \T{website = ...} & and website.\NN
+% }
+%
+% \OPTS{Folding marks}{Folding marks can be useful, particularly if your address
+% window is used to its limits. Correctly folding your letter then prevents
+% parts of the address to become invisible because of the letter loosely filling
+% the envelope.}{
+% \T{nofold} & Disable folding marks.\NN
+% \T{fold2} & Folding mark at about halfway, set for tight fitting
+% into a 220x162 mm envelope, with a tolerance of 2 mm
+% at both sides.\NN
+% \T{fold3} & Folding mark at about one third from the top, set for
+% tight fitting into a 220x110 mm envelope, with a
+% tolerance of 1.5 mm at both sides.\NN
+% \T{fold = ...} & For non-standard envelopes and paper formats the position
+% of the folding mark can be set at any position (in mm)
+% from the top of the paper.
+% }
+%
+% \OPTS{Payment data}{In invoices you probably want to make clear where you want
+% your debtor to transfer his money to. You can do so by calling
+% the \C{accountdata} command, which generates a little table containing these data.
+% The contents of this table can be defined with the following keywords:}{
+% \T{accountno = ...} & Your bank account number.\NN
+% \T{routingno = ...} & Your bank's routing number. Will not be cited if undefined.\NN
+% \T{accountname = ...} & Your bank account's ascription.
+% & Will not be cited if undefined.\NN
+% \T{iban = ...} & Your account's \textsc{iban}...\NN
+% \T{bic = ...} & and \textsc{bic} code; \textsc{iban} and \textsc{bic}
+% are only reported in invoices to foreign
+% customers---see the \T{foreign} keyword.\NN
+% \T{vatno = ...} & Your \textsc{vat} reference number, not yet used.\NN
+% \T{chamber = ...} & Your Chamber of Commerce subscription number, not yet
+% used.\NN
+% }
+%
+% \OPTS{Accept data}{These keys pertain to data needed for accept forms:}{
+% \T{acceptaccount = ...} & Payer's bank account number\NN
+% \T{acceptaddress = ...} & Payer's address lines, separated with \C{}\C{}\NN
+% \T{accepteuros = ...} & Euro part of the amount to be paid\NN
+% \T{acceptcents = ...} & Cents part of the amount to be paid\NN
+% \T{acceptdescription = ...} & Description to be quoted on the accept form\NN
+% \T{acceptdesc = ...} & Short version of the description for the
+% detachable strip of the form to be kept by the payer\NN
+% \T{acceptreference = ...} & Reference\NN
+% }
+%
+% \OPTS{Miscellaneous}{Normally, texts in letters are set ragged right. This can
+% be changed with the following keywords:}{
+% \T{[no]fill} & Use the \T{fill} keyword to justify text both left and
+% right; the default is \T{nofill}: left justification
+% only.\NN
+% \T{fontpackage = ...} & The default font is Latin Modern (\T{fontpackage = lmodern}),
+% but with the \T{fontpackage} keyword you can select another
+% package, like \T{txfonts} or \T{osf-txfonts}.
+% }
+%
+% \section{Commands}
+% \DescribeMacro{\showkeys}
+% The \C{showkeys} command can be useful for debugging. It prints a table
+% showing the option keys described in the previous section, and their current values.
+%
+% \DescribeMacro{\setupdocument}
+% Most of the setup, both in the style files and in the documents
+% themselves, is done setting options in a call to the class-defined
+% |\setupdocument| command. The options can be either a key/value pair, or just
+% a key.
+% Options with values and those without may occur in any order, with
+% the exception of |addresscenter| (see there.)
+% Values need
+% their surrounding \{\}'s only if they contain any comma's.
+% The \textsl{Options} section explains the available options.
+%
+% Most of the options have a corresponding command with the same name.
+% Although not very often, it may sometimes be useful to have those
+% commands available. These are the options with a corresponding
+% command:\footnote{Note for developers: the table lines below can be
+% generated with a ruby script listkeys (included at the end of isodoc.dtx):
+% |listkeys isodoc.dtx show|}
+%
+% \noindent\begin{tabular}{@{}lllll@{}}
+% acceptaccount &areacode &email &returnaddress &yourref \NN
+% acceptaddress &bic &enclosures &signature &zip \NN
+% acceptcents &cellphone &fax &street & \NN
+% acceptdesc &chamber &fontpackage &subject & \NN
+% acceptdescription &city &iban &vatno & \NN
+% accepteuros &closing &opening &website & \NN
+% acceptreference &company &openingcomma &who & \NN
+% accountname &country &ourref &addresscenter & \NN
+% accountno &countrycode &phone &yourletter & \NN
+% routingno & & & & \NN
+% \end{tabular}
+%
+% \noindent So you could write in your letter: ``please send me the money on my bank
+% account: |\accountno\| as soon as possible.''
+%
+% \DescribeMacro{\letter}
+% The |\letter| command produces one letter and can be called multiple times. It
+% has two arguments. The first argument is optional and must be a list of
+% \textsl{key=value} pairs. The options set here are usually those that vary among
+% different letters. The second argument contains the letter's content. This
+% content will, depending on the options set, automatically be surrounded by an
+% opening, a closing, an autograph, a signature and a remark about any
+% enclosures. The first page of each letter will be decorated with a logo,
+% the addressee's address, a return address,
+% various reference fields, a footer, a folding mark---all as defined by
+% \textsl{key=value} pairs in |\setupdocument| or in the |\letter| command itself.
+%
+% The second an following pages will have a heading, quoting the name of the
+% addressee and a page number. Examples of letters can be found in the
+% section \textsl{Usage: letters}.
+%
+% \DescribeMacro{\invoice}
+% The |\invoice| command is essentially the same as the |\letter| command, except
+% that the opening is always ``\textbf{\textsc{invoice}}'', and the content
+% (argument 2) is largely composed using the |\itable|, |\iitem|, |\itotal|, and
+% |\accountdata| commands described hereafter. Closing, autograph, and signature
+% are disabled.
+%
+% In the Netherlands, invoices can be provided with an accept form on the lower
+% third part of the page. If the |accept| option was used, this accept form
+% will be filled with the available data, in the |ocrb| font where needed.
+%
+% The following commands pertain to invoices:
+% \DescribeMacro{\itable}
+% The |\itable| command uses |tabularx| to create a two-column table. The
+% first column of the table will have the header `Description' (or its
+% equivalent in the language selected), the header of the second column says
+% `Amount (\EUR)'. The single argument of |\itable| should contain the
+% contents of the table and is of the form:
+% \begin{verbatim}
+% item 1 & amount 1\NN
+% item 2 & amount 2\NN
+% ...
+% item n & amount n \NN
+% \cmidrule[.05em]{2-2}
+% Total & amount \NN
+% \end{verbatim}
+% However, the next two commands may be used to enter these data more cleanly:
+%
+% \DescribeMacro{\iitem}
+% The |\iitem{item}{amount}| command (|iitem| stands for Invoice Item) is
+% equivalent to writing |item & amount\NN|.
+%
+% \DescribeMacro{\itotal}
+% The |\itotal{amount}| command (|itotal| stands for Invoice total) is
+% equivalent to writing\\
+% |\cmidrule[.05em]{2-2} Total & amount \NN|, with the additional
+% advantage that the word `Total' will be replaced with its equivalent
+% in the current language. Thus, the argument to the |\itable|
+% command show above can also be written:
+% \begin{verbatim}
+% \iitem{item 1}{amount 1}
+% \iitem{item 2}{amount 2}
+% ...
+% \iitem{item n}{amount n}
+% \total{amount}
+% \end{verbatim}
+% \DescribeMacro{\accountdata}
+% The |\accountdata| command prints a little table with accounting information
+% needed by the creditor for paying the invoice. It is constructed using the
+% values of the options |accountno|, |accountname|, |routingno|, |iban|, and
+% |bic|. The latter two are only included if the |foreign| option was used.
+%
+% \DescribeMacro{\autograph}
+% The \C{autograph} command, which will normally appear in a style file,
+% serves to define up to eight autographs based
+% on \textsc{pdf}, \textsc{jpeg} or \textsc{png} images. One of these
+% autographs will be drawn between the closing (\textsl{Best regards})
+% and the signature (\textsl{Betty}) if you use the \T{autograph} option
+% with a value from 2 through 9. \C{autograph} has 7 arguments:
+%
+% \begin{tabularx}{\hsize}{@{}rX@{}}
+% arg 1:&2,3,...9: autograph number; will be translated internally to define
+% |\autographA|, |\autographB|... |\autographH|\NN
+% 2:&scaling factor for the image\NN
+% 3:&distance the autograph outdents in the margin\NN
+% 4:&vertical position of the baseline of the closing
+% (\textsl{Regards,}) from the top\NN
+% 5:&vertical position of the baseline of the signature (\textsl{John
+% Letterwriter}) from the top\NN
+% 6:&height of the image\NN
+% 7:&the image (jpg, png, pdf...)\NN
+% \end{tabularx}
+%
+% The arguments 3--6 must be dimensions, and for a given autograph image should
+% be inferred by inspecting the image with an image manipulation program
+% like, for example, the gimp. In the lower left corner of the gimp window,
+% select the units of length, move the pointer to the positions where you want
+% margin, closing, and signature and to the bottom of the image, read the x, y,
+% y and y positions respectively and use those for the argument 3, 4, 5, and 6.
+%
+% \FIG{letter}{letter1}{Minimal letter example}
+%
+% \DescribeMacro{\logo}
+% The |\logo| command is internally used to define the default logo; you can
+% redefine it with |\renewcommand{\logo}{...}|. An example of logo redefinition
+% can be found on page~\pageref{logoredef}.
+%
+% \section{Usage: letters}
+%
+% Usage of the class is best explained with an example.
+% Here is the latex source for a small letter; its result appears in figure~\ref{letter1}:
+% \verbinput{letter.txt}
+% This source essentially shows three items:
+% \begin{compactenum}
+% \item the inclusion of a package |mystyle|; we'll come to that shortly.
+% \item the command |\setupdocument| called with many \textsl{key=value} arguments, each
+% defining one of the texts that go into the letter.
+% \item the command |\letter|, enclosing the body of the letter;
+% just to give the letter some real body, a small text has
+% been included using |\input|.
+% \end{compactenum}
+% Of course this is not all of the information needed to create a
+% letter. For example, there should be a logo, telling the addressee who I am
+% and there should be contact information such as my address, telephone number
+% and so on. This is where the included |mystyle| package plays its part. Here
+% is an example of such a style file:
+% \verbinput{mystyle.txt}
+% So in the style file, too, |\setupdocument| is used to register
+% information that will common to almost all of my letters. The
+% |\autograph| command sets up an autograph, based on an image file. Apart
+% from the code shown here, a style file can contain definitions for more
+% autographs, and a definition for a logo. Without the latter, a default logo is
+% produced. Note also that I have included defaults for |opening|, |closing|,
+% and |signature| in the style file, and that I did not override those in the
+% letter's source.
+%
+% \FIG{logo1}{logo1}{Long letter example with a non-standard logo, page 1}
+% \FIG{logo2}{logo2}{Long letter example with a non-standard logo, page 2}
+%
+% The letter source example shown above, in combination with this style example,
+% compiles to the letter shown in figure~\ref{letter1}.
+% This example illustrates some aspects of isodoc:
+% \begin{compactitem}
+% \item At the top, you see the default letterhead (logo). The
+% |\renewcommand{\logo}{...}| command can be used to create your own logo.
+% \item Under it is the address. It has a return address in script sized sans
+% serif boldface over
+% it, because the |return| key has been used. A return address is useful if you
+% send your letters in a standard window envelope. The positioning of the
+% address is done in the style file, using the |addresscenter| and |leftaddress| or
+% |rightaddress| keywords.
+% \item The paper is vertically divided in six equally wide columns. The outer
+% two columns are the left and right margins, the second to fifth columns contain
+% header and footer fields.
+% \item The ``Your reference'' and ``Our reference'' fields have not been set
+% (with the |yourref| and |ourref| keys) and therefore stay empty by default,
+% the date field has also not been set, but it should be. Therefore, the default
+% value is ``Undefined date'', and a warning is issued by a pink background.
+% \item A folding mark has been printed in the extreme right margin, such that
+% on folding the paper along it, it will correctly fit in a 220 x 110 mm
+% envelope; this has been achieved by using the |fold3| key.
+% \item In between closing (\textsl{Best regards,}) and signature
+% (\textsl{W.H.~Dekker}) an autograph has been placed. This was done by setting
+% |autograph=2|. Alternative values are |0| (nothing between closing and
+% signature), |1| for white space where an autograph can be placed with a pen
+% after printing, or one of the values |2-9|, which may have been associated
+% with other autograph images. In this case, I have used an autograph image in
+% which I have drawn the boundary box and the \textsl{outdent},
+% \textsl{closing}, and \textsl{signature} positions defined in the
+% |\autograph| command (see the section \textsl{Commands}) with red lines.
+% \item The bottom of the letter has (up to) four fields with contact
+% information. This is useful if your logo does not show that information. If it
+% does, you can omit these fields by using the |nofooter| key, or by not
+% using the |footer| key, depending on the default set in the style file.
+% \end{compactitem}
+%
+% Let's try another illustrative example, seee figures~\ref{logo1}
+% and~\ref{logo2}: we use a modified style file, with a
+% redefined logo, so we don't need a page footer; we use preprinted right-windowed
+% envelopes, so a return address is not needed. Here is the style file
+% (|logostyle.sty|):
+% \verbinput{logostyle.txt}
+% \label{logoredef}
+% \FIG{invoice}{invoice}{Invoice example}
+% The letter source does not use the |autograph| key, so the default value of
+% |2| is used; we write it in Dutch and use
+% a larger text, just to see what happens if more than one page is generated:
+% \verbinput{logoletter.txt}
+% In this case, the same letter had to be sent to two different people,
+% with different openings and addresses of course. So the letter's body
+% is separately defined and the |\letter| command is called twice, with
+% the same body, but different |to| and |opening| keys.
+% Figures~\ref{logo1} and~\ref{logo2} show the first two pages (the
+% first letter) of this document, which actually has four pages.
+%
+% \section{Usage: invoices}
+% \FIG{accept}{accept}{Invoice example with accept form}
+%
+% Invoices (can) have the same structure as letters, except that the |\opening|
+% isn't ``Dear Somebody'' anymore, but something like ``Invoice''. And the
+% |\closing| doesn't say ``Best regards'', but may provide payment information.
+% And the body is not a simple text, but a table with descriptions of things to
+% be paid, and the corresponding amounts of money.
+%
+% An example, as usual, is most instructive:
+% \verbinput{invoice.txt}
+% The result is shown in figure~\ref{invoice}.
+%
+% When the |accept| option is used, the invoice will be created with an invoice
+% form on the lower third part of the page. Here is an example:
+% \verbinput{accept.txt}
+% Normally such invoices are printed on preprinted paper with an easily
+% detachable, perforated form. In this example, the form itself has been
+% printed, too. The |graphicx| and |textpos| packages have already been made
+% available by the |isodoc| class. Figure~\ref{accept} shows the output of this
+% example.
+%% \StopEventually{}
+%
+% \section{Implementation}
+% The basis is the |article| class with all options:
+%
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions
+\LoadClass{article}
+% \end{macrocode}
+% We don't use |\ctable| floats here, but we need |ctable|'s commands for decent
+% spacing in tables and more. |ctable| also brings us |array|, |tabularx|,
+% |color|, and |xkeyval|. |marvosym| is used for the euro symbol.
+% \begin{macrocode}
+\RequirePackage{ctable,marvosym,graphicx}
+\RequirePackage[dutch,german,french,american,english]{babel}
+% \end{macrocode}
+%
+% Since the name of the package contains 'iso', make the page A4.
+% For textpos, divide the page in 210 columns of 1mm each
+% and 297 rows, 1mm each. The page is vertically divided in 6 columns of
+% 35mm each: a left margin, 4 fields, and a right margin.
+% If the class option |landscape| is used, the paper still stays divided in
+% 1mm x 1mm cells. This may be useful if you use the isodoc class for other
+% purposes.
+%
+% \begin{macrocode}
+\RequirePackage[a4paper,margin=35mm,head=\baselineskip]{geometry}
+\RequirePackage[absolute,overlay]{textpos}
+\ifdim\paperwidth>\paperheight\TPGrid{297}{210}\else\TPGrid{210}{297}\fi
+% \end{macrocode}
+%
+% Use fancy headings, except for the first page.
+% The heading, on a rule, looks like:\\[2ex]
+% To: John Doe (April 1st, 2006)\hfill Page 2 of 3\\[2ex]
+% \begin{macrocode}
+\RequirePackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhf{}
+\if@twoside
+ \fancyhead[LE,RO]{\pagetext\ \thepage\ \oftext{} \pageref{LastPageOf\thelettercount}}
+ \fancyhead[RE,LO]{\totext: \toname\ (\date)}
+\else
+ \fancyhead[L]{\totext: \toname\ (\date)}
+ \fancyhead[R]{\pagetext\ \thepage\ \oftext{} \pageref{LastPageOf\thelettercount}}
+\fi
+% \end{macrocode}
+% The |\xxxdoc| commands (like \dutchdoc) set the default language via
+% |\AtBeginDocument|, but other language changes should be done without that.
+% So we must have a boolean to check if we are in the preamble:
+%
+% \begin{macrocode}
+\newif\ifpreamble\preambletrue
+\AtBeginDocument{\preamblefalse}
+% \end{macrocode}
+% Background color for signaling items that should have been defined, but
+% weren't:
+% \begin{macrocode}
+\definecolor{isodocpink}{rgb}{1,.7,.7}
+\def\Undefined#1{\colorbox{isodocpink}{Undefined #1}}
+% \end{macrocode}
+% A small sans serif font is used for header and footer field names and the
+% sender's address information. The idea is that this is used for all
+% pre-printed text on the letter paper.
+% \begin{macrocode}
+\def\@hft{\footnotesize\sffamily}
+% \end{macrocode}
+% \subsection{The options and their defaults}
+% \subsubsection{General options}
+% The default font is latin modern (using the |lmodern| package).
+% The |fontpackage| option can be used to select another font.
+% \DescribeMacro{fontpackage}
+% \begin{macrocode}
+\define@key{isodoc}{fontpackage}{\def\fontpackage{#1}}
+ \def\fontpackage{lmodern}
+% \end{macrocode}
+% Several items in the letter/invoice will be different in documents that are to
+% be sent abroad; this is set with the |foreign| option, false by default:
+% \DescribeMacro{foreign}
+% \begin{macrocode}
+\define@key{isodoc}{foreign}[\foreigntrue]{\foreigntrue}
+ \newif\ifforeign\foreignfalse
+\define@key{isodoc}{localbank}[\localbanktrue]{\localbanktrue}
+ \newif\iflocalbank\localbankfalse
+% \end{macrocode}
+% The following keys set the language; English, set at the |\EndOfClass| is the
+% default.
+% \DescribeMacro{dutch}
+% \DescribeMacro{english}
+% \DescribeMacro{german}
+% \DescribeMacro{american}
+% \DescribeMacro{french}
+% \begin{macrocode}
+\define@key{isodoc}{dutch} []{\dutchdoc}
+\define@key{isodoc}{english} []{\englishdoc}
+ \AtEndOfClass{\englishdoc}
+\define@key{isodoc}{german} []{\germandoc}
+\define@key{isodoc}{american}[]{\americandoc}
+\define@key{isodoc}{french} []{\frenchdoc}
+% \end{macrocode}
+% The default is to have left, but not right justification, allowing for hyphenation
+% in extreme cases:
+% \DescribeMacro{fill}
+% \DescribeMacro{nofill}
+% \begin{macrocode}
+\define@key{isodoc}{fill} []{\rightskip=1\rightskip}
+\define@key{isodoc}{nofill}[]{\rightskip=0mm plus 35mm}
+ \rightskip=0mm plus 35mm
+% \end{macrocode}
+% \subsubsection{Logo}
+% The logo, by default, consists of a large company or personal name on top a
+% rule, with a contact person's name (probably your own name) and address
+% hanging under the rule.
+% Its contents are defined by the following options:
+% \DescribeMacro{company}
+% \DescribeMacro{logoaddress}
+% \DescribeMacro{who}
+% \DescribeMacro{street}
+% \DescribeMacro{city}
+% \DescribeMacro{zip}
+% \DescribeMacro{country}
+% \DescribeMacro{countrycode}
+% \begin{macrocode}
+\define@key{isodoc}{company} {\def\company{#1}}
+ \def\company{\Undefined{company}}
+\define@key{isodoc}{logoaddress}{\def\logoaddress{#1}}
+\define@key{isodoc}{who} {\def\who{#1}}
+ \def\who{\Undefined{who}}
+\define@key{isodoc}{street} {\def\street{#1}}
+ \def\street{\Undefined{street}}
+\define@key{isodoc}{city} {\def\city{#1}}
+ \def\city{\Undefined{city}}
+\define@key{isodoc}{country} {\def\country{#1}}
+ \def\country{\Undefined{country}}
+\define@key{isodoc}{countrycode}{\def\countrycode{#1}}
+ \def\countrycode{\Undefined{countrycode}}
+\define@key{isodoc}{zip} {\def\zip{#1}}
+ \def\zip{\Undefined{zip}}
+\def\prezip{\ifforeign\countrycode\else\fi}
+% \end{macrocode}
+% \subsubsection{Address window}
+% The address can be positioned vertically with the |addresscenter| option; the
+% default is 63.5mm. This is the vertical position of the center of the address.
+% Horizontally, the address is positioned either left or right, depending on the
+% |leftaddress| or |rightaddress| options being used. In the first case, the
+% address start at x=35mm, which is the left margin (the default), and thus in
+% line with the first header field, in the second case at 105mm, in line with
+% the one-but-last header field.
+% \DescribeMacro{leftaddress}
+% \DescribeMacro{rightaddress}
+% \DescribeMacro{addresscenter}
+% \begin{macrocode}
+\define@key{isodoc}{leftaddress} []{\def\xaddress{35}}
+ \def\xaddress{35}
+\define@key{isodoc}{rightaddress}[]{\def\xaddress{105}}
+\define@key{isodoc}{addresscenter} {\def\addresscenter{#1}}
+ \def\addresscenter{63.5}
+% \end{macrocode}
+% The |to| option takes the addressee's address lines. Use |\\| to
+% separate lines. The info will be split by |\processto| on the first
+% |\\| separator into the addressee's name (|\toname|) and his address
+% (|\toaddress|)
+
+% The |\toname| will be reported in the pdf's document properties.
+% However, this works only if the |to| key is set, with |\setupdocument|, in the
+% preamble. If several letters are composed, |to| is normally set in the
+% |\letter| or |\invoice| commands and thus is not seen by the |\hypersetup|,
+% which is called |\AtBeginDocument|; so set the defaults to
+% |Various people| for the |\toname| and make the address undefined:
+% \DescribeMacro{to}
+% \begin{macrocode}
+\define@key{isodoc}{to}{\processto{#1}}\def\toname{Various people}
+ \def\toaddress{\Undefined{to}}
+\long\def\processto#1{\xproc #1\\@@@\ifx\toaddress\empty
+ \else \yproc #1@@@\fi}
+\long\def\xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\yproc #1\\#2@@@{\def\toaddress{#2}}
+% \end{macrocode}
+% The default is to have no return address; but this can be changed by using
+% the |return| (either in the style file or in the source) or, if the default
+% was changed in the style file, remove it with |noreturn| in the source.
+% Company and country names are often too long to fit in the address window. Or
+% you may want to define an entirely different return address. The
+% |returnaddress| option is provided to redefine the return address:
+% \DescribeMacro{return}
+% \DescribeMacro{noreturn}
+% \DescribeMacro{returnaddress}
+% \begin{macrocode}
+\define@key{isodoc}{return} []{\returntrue}
+ \newif\ifreturn\returnfalse
+\define@key{isodoc}{noreturn} []{\returnfalse}
+\define@key{isodoc}{returnaddress}{\def\returnaddress{#1}}
+% \end{macrocode}
+% \subsubsection{Page footer}
+% A footer is switched on or off with the |footer| and |nofooter| options.
+% The default is the have no page footer.
+% \DescribeMacro{footer}
+% \DescribeMacro{nofooter}
+% \begin{macrocode}
+\define@key{isodoc}{footer} []{\footertrue}
+ \newif\iffooter\footerfalse
+\define@key{isodoc}{nofooter}[]{\footerfalse}
+% \end{macrocode}
+% If there \textsl{is} a page footer, only those fields will be displayed which are not empty.
+% Currently the |phone|, |cellphone|, |fax|, |email| and |website| are
+% recognised as possible footer fields. Phone and fax number will be prefixed
+% with a 0, unless the |foreign| option was used: then the prefix will be
+% `+nn-', where nn is the areacode. The latter is set with the |areacode|
+% option, which is `Undefined areacode' by default.
+% \begin{macrocode}
+\define@key{isodoc}{areacode} {\def\areacode{#1}}
+ \def\areacode{\Undefined{areacode}}
+\define@key{isodoc}{phone} {\def\phone{#1}}
+ \def\phone{}
+\define@key{isodoc}{phoneprefix}{\def\phoneprefix{#1}}
+ \def\phoneprefix{0}
+\define@key{isodoc}{cellphone} {\def\cellphone{#1}}
+ \def\cellphone{}
+\define@key{isodoc}{fax} {\def\fax{#1}}
+ \def\fax{}
+\define@key{isodoc}{website} {\def\website{#1}}
+ \def\website{}
+\define@key{isodoc}{email} {\def\email{#1}}
+ \def\email{}
+\def\lead{\ifforeign+\areacode-\else\phoneprefix\fi}
+
+% \end{macrocode}
+% \subsubsection{Folding mark}
+% The default is to have no folding mark. So start with the folding mark
+% position outside the paper boundaries:
+% \DescribeMacro{nofold}
+% \begin{macrocode}
+\define@key{isodoc}{nofold}[]{\yfold=-1mm}
+ \newdimen\yfold\yfold=-1mm
+% \end{macrocode}
+% The envelope for double folded A4 is C5: 162x220mm,
+% window 40x110mm, upper left corner at 20x50mm.
+% Fold the A4 to have a tolerance of 2mm at top and bottom, by
+% putting the fold mark at 162-4=158 mm.
+% \DescribeMacro{fold2}
+% \begin{macrocode}
+\define@key{isodoc}{fold2}[]{\yfold=158mm}
+% \end{macrocode}
+% The envelope for triple folded A4 is DL: 110x220mm,
+% Fold the A4 to have a tolerance of 1.5mm at top and bottom, by
+% putting the fold mark at 110-3=107mm.
+% \DescribeMacro{fold3}
+% \begin{macrocode}
+\define@key{isodoc}{fold3}[]{\yfold=107mm}
+% \end{macrocode}
+% For non-standard envelopes and paper formats the position of the
+% folding mark can be set at any position (in mm) from the top of the paper:
+% \DescribeMacro{fold}
+% \begin{macrocode}
+\define@key{isodoc}{fold}{\yfold=#1mm}
+% \end{macrocode}
+%
+% \subsubsection{Header fields}
+% There are four header fields, each one quarter of the textwidth wide.
+% Under those, if the subject has been defined, a subject line.
+% \DescribeMacro{ourref}
+% \DescribeMacro{yourref}
+% \DescribeMacro{yourletter}
+% \begin{macrocode}
+\define@key{isodoc}{ourref} {\def\ourref{#1}}
+ \def\ourref{}
+\define@key{isodoc}{yourref} {\def\yourref{#1}}
+ \def\yourref{}
+\define@key{isodoc}{yourletter}{\def\yourletter{#1}}
+ \def\yourletter{}
+% \end{macrocode}
+% The date must be entered in yyyymmdd format; here we check that it
+% contains exactly 8 digits (thanks Taco Hoekwater, Piet van Oostrum)
+% \DescribeMacro{date}
+% \DescribeMacro{subject}
+% \begin{macrocode}
+\define@key{isodoc}{date}{\setdate{#1}}
+ \def\date{\Undefined{date}}
+\define@key{isodoc}{subject}{\def\subject{#1}}
+ \def\subject{}
+\def\checkdigit#1{%
+ \ifcase0\ifcase1#1\or\or\or\or\or\or\or\or\or\else1\fi
+ \ClassError{test}{non-digit-character (#1) in date}{}
+ \fi
+}
+\def\newdate#1#2#3#4#5#6#7#8#9\wybo{%
+ \checkdigit{#1}\checkdigit{#2}\checkdigit{#3}\checkdigit{#4}
+ \checkdigit{#5}\checkdigit{#6}\checkdigit{#7}\checkdigit{#8}
+ \ifx\relax#9\relax
+ \year=#1#2#3#4\month=#5#6\day=#7#8
+ \ifnum \month > 12 \ClassError{isodoc}{Illegal date }{}\fi
+ \ifnum \day > 31 \ClassError{isodoc}{Illegal date }{}\fi
+ \else
+ \ClassError{isodoc}{Date must have exactly 8 digits}{}
+ \fi
+}
+\def\wybo{}
+\def\setdate#1{\newdate #1\wybo\wybo\wybo\wybo\wybo\wybo\wybo\wybo\wybo}
+% \end{macrocode}
+% The opening, something like `Dear Reader', is set by the |opening| option; the
+% default is `Undefined opening'. It is followed by a comma, unless the
+% |openingcomma| has been used to set it to a different character, like a
+% semicolon or an exclamation mark.
+% \DescribeMacro{opening}
+% \DescribeMacro{openingcomma}
+% \begin{macrocode}
+\define@key{isodoc}{opening} {\def\opening{#1}}
+ \def\openingcomma{,}
+\define@key{isodoc}{openingcomma}{\def\openingcomma{#1}}
+ \def\opening{\Undefined{opening}}
+% \end{macrocode}
+% \subsubsection{Closing, autograph, signature}
+% The closing, something like `Best regards', is set by the |closing| option;
+% the default is `Undefined closing'. It will be preceded by a vertical skip,
+% which can be set by the |closingskip| option, which is |2\baselineskip| by
+% default:
+% \DescribeMacro{closing}
+% \DescribeMacro{closingskip}
+% \begin{macrocode}
+\define@key{isodoc}{closing} {\def\closing{#1,}}
+ \def\closing{\Undefined{closing}} % Best regards,
+\define@key{isodoc}{closingskip}{\closingskip=#1}
+ \newdimen\closingskip\closingskip=2\baselineskip
+% \end{macrocode}
+% The autograph is either just a newline, or a vertical spacing where you can
+% put your autograph manually, or a graphic. In the latter case, is must have
+% been defined with the macro |\autograph|, which defines an autograph from an
+% image, see the section \textsl{User Macros}.
+% Not using the |autograph| option is equivalent to |autograph=0| (just a newline).
+% Using it without a value is equivalent to |autograph=2| (image inserted):
+% \DescribeMacro{autograph}
+% \begin{macrocode}
+\define@key{isodoc}{autograph}[2]{\def\autographversion{#1}}
+ \def\autographversion{0}
+% \end{macrocode}
+% The signature, something like `John Letterwriter', is set by the |signature| option;
+% the default is `Undefined signature'.
+% \DescribeMacro{signature}
+% \begin{macrocode}
+\define@key{isodoc}{signature}{\def\signature{#1}}
+ \def\signature{\Undefined{signature}}
+% \end{macrocode}
+% Enclosures are set by the |enclosures| option. There are none by default.
+% \begin{macrocode}
+\define@key{isodoc}{enclosures} {\def\enclosures{#1}}
+ \def\enclosures{}
+% \end{macrocode}
+% \subsubsection{Invoice specific data}
+% Invoices need to state some specific data, like account data and term of
+% payment:
+% \begin{macrocode}
+\define@key{isodoc}{term} [30]{\def\term{#1}}
+\define@key{isodoc}{accountno} {\def\accountno{#1}}
+\define@key{isodoc}{routingno} {\def\routingno{#1}}
+\define@key{isodoc}{accountname}{\def\accountname{#1}}
+\define@key{isodoc}{iban} {\def\iban{#1}}
+\define@key{isodoc}{bic} {\def\bic{#1}}
+\define@key{isodoc}{vatno} {\def\vatno{#1}}
+\define@key{isodoc}{chamber} {\def\chamber{#1}}
+ \def\chamber{Undefined{chamber}}
+% \end{macrocode}
+% If an accept form is to be printed, here are the options to fill in all the
+% fields:
+% \begin{macrocode}
+\define@key{isodoc}{accept}[E05]{\def\accepttype{#1}
+ \newfont\ocrb{ocrb10}
+ }
+\define@key{isodoc}{acceptaccount} {\def\acceptaccount{#1}}
+ \def\acceptaccount{}
+\define@key{isodoc}{acceptaddress} {\def\acceptaddress{#1}}
+ \def\acceptaddress{}
+\define@key{isodoc}{acceptcents} {\def\acceptcents{#1}}
+ \def\acceptcents{Undefined{}}
+\define@key{isodoc}{acceptdescription}{\def\acceptdescription{#1}}
+ \def\acceptdescription{}
+\define@key{isodoc}{acceptdesc} {\def\acceptdesc{#1}}
+ \def\acceptdesc{}
+\define@key{isodoc}{accepteuros} {\def\accepteuros{#1}}
+ \def\accepteuros{Undefined{}}
+\define@key{isodoc}{acceptreference} {\def\acceptreference{#1}}
+ \def\acceptreference{Undefined{ref}}
+% \end{macrocode}
+% For now, we define field positons for the E05 accept form only; when data for
+% other forms become available, the content of |\accepttype| will have to be
+% checked. Here is a rough layout of the E05 accept form:
+% \begin{verbatim}
+% description
+% ref description
+% ref euros cents reference
+%
+% eur ct account
+%
+% desc address
+% desc address
+% desc address
+% \end{verbatim}
+% \begin{macrocode}
+\def\xacceptdescription{105}\def\yacceptdescription{200}\def\wacceptdescription{100}
+\def\xacceptref{7} \def\yacceptref{210} \def\wacceptref{30}
+\def\xaccepteuros{60} \def\yaccepteuros{216} \def\waccepteuros{32}
+\def\xacceptcents{89} \def\yacceptcents{216} \def\wacceptcents{13}
+\def\xacceptreference{125} \def\yacceptreference{216} \def\wacceptreference{55}
+\def\xaccepteur{14.4} \def\yaccepteur{229} \def\waccepteur{21}
+\def\xacceptct{32} \def\yacceptct{229} \def\wacceptct{9}
+\def\xacceptaccount{75} \def\yacceptaccount{229} \def\wacceptaccount{65}
+\def\xacceptdesc{7} \def\yacceptdesc{240} \def\wacceptdesc{26}
+\def\xacceptaddress{58} \def\yacceptaddress{240} \def\wacceptaddress{90}
+% \end{macrocode}
+% This is the |\baselineskip| for the two-line reference of the detachable strip:
+% \begin{macrocode}
+\newdimen\acceptreferenceskip\acceptreferenceskip=5.15mm
+% \end{macrocode}
+% \subsection{User Macros}
+% The autograph is either just a newline, or a vertical spacing where you can
+% put your autograph manually, or a graphic. In the latter case, is must have
+% been defined with the macro |\autograph|, which defines an autograph from an
+% image.\footnote{Thanks, Hans Hagen and Piet van Oostrum, for its definition}\\
+% The arguments 3 - 6 can be found by measuring those (with the gimp, for example)
+% in the unscaled (raw) image (which is the last argument).
+% \\[1ex]
+% \begin{tabularx}{\hsize}{@{}rX@{}}
+% arg 1:&2,3,...9: autograph number; will be translated internally to define
+% |\autographA|, |\autographB|... |\autographH|\NN
+% 2:&scaling factor for the image\NN
+% 3:&the distance the autograph outdents in the margin\NN
+% 4:&the vertical position of the baseline of the closing (Regards,) from the top\NN
+% 5:&the vertical position of the baseline of the signature (John Letterwriter) from the top\NN
+% 6:&the height of the image\NN
+% 7:&the image (jpg, png, pdf...)\NN
+% \end{tabularx}
+% \DescribeMacro{\autograph}
+% \begin{macrocode}
+\newdimen\myoutdent
+\newdimen\signskip
+\newdimen\mydown
+\def\autograph#1#2#3#4#5#6#7{%
+ \ifnum #1<2
+ \ClassError{isodoc}{autograph #1 cannot be changed (first arg must be 2..9)}{}
+ \fi
+ \ifnum #1>9
+ \ClassError{isodoc}{autograph #1 cannot be changed (first arg must be 2..9)}{}
+ \fi
+ \bgroup
+ \lccode`2=`A \lccode`6=`E
+ \lccode`3=`B \lccode`7=`F
+ \lccode`4=`C \lccode`8=`G
+ \lccode`5=`D \lccode`9=`H
+ \lowercase{\def\temp{#1}}%
+ \expandafter\egroup\expandafter\def\csname autograph\temp\endcsname{%
+ \myoutdent=#3
+ \signskip=#5\advance\signskip-#4
+ \mydown=#6\advance\mydown-#4
+ \par\hspace*{-#2\myoutdent}%
+ \raisebox{-#2\mydown}[0bp][0bp]{\includegraphics[scale=#2]{#7}}\\[-\baselineskip]
+ \closing\\[-2\baselineskip]\\[#2\signskip]\signature%
+ }
+}
+% \end{macrocode}
+% \subsubsection{Logo}
+% The logo, by default, consists of a large company name on top a rule,
+% with a contact person's name (probably your own name) and address
+% hanging under the rule.
+% If the osf-txfonts package is used, oldstyle figures are disabled here.
+% \DescribeMacro{\logo}
+% \begin{macrocode}
+\newcommand{\logo}{%
+ \begin{textblock}{140}[0,1](35,20)\noindent
+ \textsf{\LARGE\company}\\[-1.7ex] % large company name
+ \rule{\hsize}{.3pt} % on top a rule
+ \end{textblock}
+ \Tbox{140}{22}{35}{\noindent
+ \@hft
+ \ifx\undefined\logoaddress%
+ \ifx\undefined\tbfigures\else\tbfigures\fi
+ \ifx\who\empty\else\who\\\fi
+ \ifx\street\empty\else\street\\\fi
+ \prezip\ \zip\ \city
+ \ifforeign\\\country\fi
+ \else\logoaddress\fi
+ }
+}
+% \end{macrocode}
+% \DescribeMacro{\returnaddress}
+% \begin{macrocode}
+\def\returnaddress{%
+ \company\\
+ \street\\
+ \prezip{} \zip{} \city
+ \ifforeign\\\country\fi
+}
+% \end{macrocode}
+% \DescribeMacro{\setupdocument}
+% \begin{macrocode}
+\newcommand{\setupdocument}[1]{
+ \setkeys{isodoc}{#1}
+ \iffooter\else\geometry{bottom=25mm}\fi
+ \RequirePackage[T1]{fontenc}
+ \RequirePackage{\fontpackage}\pdfprotrudechars=1
+}
+% \end{macrocode}
+% \DescribeMacro{\footfield}
+% Create any non-empty footfields, starting at left arguments:
+% \begin{compactenum}
+% \item fieldlabel
+% \item a prefix for the content (for phone numbers)
+% \item the content
+% \end{compactenum}
+% \begin{macrocode}
+\def\footfield#1#2#3{%
+ \ifx#3\empty\else
+ \Tbox{\footcount}{275}{35}{\noindent
+ {\@hft#1}\\
+ #2#3
+ }
+ \advance\footcount35
+ \fi
+}
+% \end{macrocode}
+% \DescribeMacro{\accountdata}
+% Print a table with banking information. Show account number, account
+% name + city, and a reference. If the |foreign| key was used,
+% \textsc{iban} and \textsc{bic} codes are also reported.
+% \begin{macrocode}
+\def\accountdata{
+ \textbf{\accountdatatext:}\\
+ \begin{tabular}{@{}rl@{}}
+ \ifx\term\undefined\else
+ \termtext: & \term\ \daystext\\
+ \fi
+ \accountnotext: & \accountno\\
+ \ifx\accountname\undefined\else
+ \accountnametext: & \accountname{}\\
+ \fi
+ \ifx\routingno\undefined\else
+ \routingnotext: & \routingno{}\\
+ \fi
+ \referencetext: & \ourref\\
+ \ifforeign
+ \iflocalbank\else
+ iban: & \scshape \iban\\
+ bic: & \scshape \bic\\
+ \fi
+ \fi
+ \ifx\vatno\undefined\else
+ \vatnotext: & \vatno\\
+ \fi
+ \end{tabular}
+}
+% \end{macrocode}
+% The showkeys command is useful for debugging. It prints a table showing the
+% values of most keys.\footnote{Note for developers: the table lines below can
+% be generated with a ruby script listkeys (included at the end of isodoc.dtx):
+% |listkeys isodoc.dtx show|}
+% \DescribeMacro{\showkeys}
+% \begin{macrocode}
+\def\showkeys{%
+ \begin{tabular}{ll}
+ acceptaccount & \acceptaccount\NN
+ acceptaddress & \acceptaddress\NN
+ acceptcents & \acceptcents\NN
+ acceptdesc & \acceptdesc\NN
+ acceptdescription & \acceptdescription\NN
+ accepteuros & \accepteuros\NN
+ acceptreference & \acceptreference\NN
+ accountname & \accountname\NN
+ accountno & \accountno\NN
+ areacode & \areacode\NN
+ bic & \bic\NN
+ cellphone & \cellphone\NN
+ chamber & \chamber\NN
+ city & \city\NN
+ closing & \closing\NN
+ company & \company\NN
+ country & \country\NN
+ countrycode & \countrycode\NN
+ email & \email\NN
+ enclosures & \enclosures\NN
+ fax & \fax\NN
+ fontpackage & \fontpackage\NN
+ iban & \iban\NN
+ logoaddress & \logoaddress\NN
+ opening & \opening\NN
+ openingcomma & \openingcomma\NN
+ ourref & \ourref\NN
+ phone & \phone\NN
+ returnaddress & \returnaddress\NN
+ signature & \signature\NN
+ street & \street\NN
+ subject & \subject\NN
+ vatno & \vatno\NN
+ website & \website\NN
+ who & \who\NN
+ addresscenter & \addresscenter\NN
+ yourletter & \yourletter\NN
+ yourref & \yourref\NN
+ zip & \zip\NN
+ \end{tabular}
+}
+
+\AtEndOfClass{%
+ \usepackage{hyperref}
+ \year=0
+}
+
+\AtBeginDocument{%
+ \hypersetup{pdfauthor={\who},
+ pdfsubject={\subject},
+ pdfproducer={isodoc v\fileversion},
+ }
+}
+
+% \DescribeMacro{\itable}
+% |\itable| inserts an invoice table; arg1 should be the rows of the table.
+% \begin{macrocode}
+\def\itable#1{
+ \begin{tabularx}{\hsize}{@{}X@{\barsep\quad\qquad}r@{}}
+ \multicolumn{2}{@{}c@{}}{\sffamily\descriptiontext\hfill \amounttext (\EUR)}\ML
+ #1
+ \end{tabularx}
+}
+% \DescribeMacro{\iitem}
+% |\iitem| inserts an invoice item in the |\itable|.
+% It inserts |arg1 & % arg2\NN|:
+% \begin{macrocode}
+\def\iitem#1#2{#1&#2\NN}
+% \DescribeMacro{\itotal}
+% \end{macrocode}
+% |\itotal| inserts an invoice total in the |\itable|.\\
+% It inserts |\cmidrule[.05em]{2-2}Total & arg1\NN|:
+% \begin{macrocode}
+\def\itotal#1{\cmidrule[.05em]{2-2}\Totaltext&\textbf{#1}\NN}
+% \end{macrocode}
+% The counter |\lettercount| is used to construct a label on the last
+% page of each letter/invoice of this document; it wil be set to
+% \texttt{LastPageOf\textsl{n}}, where \textsl{n} is the letter
+% number: 1, 2, 3, ... This allows for page headings saying ``Page n
+% of m.'' Whether we are on the last page of a letter is only known
+% either at |\end{document}| or when a new letter is started. This is
+% why a label is set at the start of a |\letter| call, thus labeling
+% the last page of the previous letter and using |\AtEndDocument| for
+% the last letter, which would otherwise stay unlabeled.
+% \begin{macrocode}
+\newcounter{lettercount}\setcounter{lettercount}{0}
+\AtEndDocument{\label{LastPageOf\thelettercount}}
+% \end{macrocode}
+% \DescribeMacro{\invoice}
+% |\invoice| prints an invoice. The first argument is optional, and may
+% contain the same \textsl{key=value} statement as |\setupdocument|. This is
+% useful if the document contains more than one invoice for different
+% addressees.
+%
+% The second argument creates a two-column table with headings
+% ``Description'' and ``Amount (\EUR)''. The two columns are separated
+% with a vertical rule; its construction is somewhat complicated, as the
+% booktabs/ctable packages are in use that don't provide decent vertical
+% separators. The |\barsep| macro extends these separators vertically.
+
+% \begin{macrocode}
+\newif\ifclosing\closingtrue
+\newcount\footcount
+\newcommand{\invoice}[2][]{%
+ \closingfalse
+ \hypersetup{pdftitle={invoice to \toname\ dated \today}}
+ \def\barsep{\raisebox{-1.5ex}[0pt][0pt]{\rule{.05em}{4ex}}}%
+ \letter[#1,opening=\invoicetext,openingcomma={},closing={},signature={}]{%
+ \noindent
+ #2
+ }
+}
+% \end{macrocode}
+% |\letter| prints a letter...
+% \begin{macrocode}
+\newcommand{\letter}[2][]{{ % extra brace keeps option changes local
+ \hypersetup{pdftitle={letter to \toname\ dated \today}}
+ \setkeys{isodoc}{#1}
+ \label{LastPageOf\thelettercount}
+ \newpage
+ \addtocounter{lettercount}{1}
+ \setcounter{page}{1}
+ \setcounter{footnote}{0}
+ \logo
+% \end{macrocode}
+% addresscenter is the center, vertically, of the to-address block:
+% xaddress should be 1 or 3 for left- and right address windows
+% \begin{macrocode}
+ \begin{textblock}{70}[0,.5](\xaddress,\addresscenter)\noindent
+ \ifreturn
+ {\def\\{\unskip\enspace\textbullet\enspace\ignorespaces}%
+ \sffamily\scriptsize\bfseries\returnaddress
+ }\\[-.8\baselineskip]
+ \rule{\hsize}{.2pt}\\
+ \fi
+ \toname\\\toaddress
+ \end{textblock}
+ \ifx\subject\empty\else%
+ \Tbox{35}{108}{105}{\noindent
+ \begin{tabularx}{\hsize}{@{}l>{\raggedright}X@{}}
+ \@hft\subjecttext&\subject
+ \end{tabularx}
+ }
+ \fi
+ \Tbox{35}{98}{35}{\noindent
+ {\@hft\yourlettertext}\\
+ \yourletter
+ }
+ \Tbox{70}{98}{35}{\noindent
+ {\@hft\yourreftext}\\
+ \raggedright\yourref
+ }
+ \Tbox{105}{98}{35}{\noindent
+ {\@hft\ourreftext}\\
+ \raggedright\ourref
+ }
+ \Tbox{140}{98}{35}{\noindent
+ {\@hft\datetext}\\
+ \ifnum\year=0\Undefined{date}\else\date\fi
+ }
+
+ \footcount=35
+ \iffooter
+ \footfield{\websitetext}{}{\website}
+ \footfield{\phonetext}{\lead}{\phone}
+ \footfield{\cellphonetext}{\lead}{\cellphone}
+ \footfield{\faxtext}{\lead}{\fax}
+ \footfield{\emailtext}{}{\email}
+ \fi
+ \begin{textblock*}{3mm}(201mm,\yfold)\noindent % rule from 201-204mm
+ \rule{\hsize}{.2pt}
+ \end{textblock*}
+ \ifx\undefined\accepttype\else\accept\fi
+
+ \ifx\subject\empty\vspace*{80mm}\else\vspace*{90mm}\fi
+ \noindent\opening\openingcomma\\[\baselineskip]
+ \thispagestyle{empty}
+ \noindent
+ #2
+ {\parindent=0pt\parskip=\baselineskip
+ \ifclosing
+ \ifcase\autographversion
+ \par\closing\\\signature % 0: closing on the next line
+ \or\par\closing\\[\closingskip]\signature % 1: whiteskip
+ \or\autographA
+ \or\autographB
+ \or\autographC
+ \or\autographD
+ \or\autographE
+ \or\autographF
+ \or\autographG
+ \or\autographH
+ \else
+ \par\Undefined{autograph: \autographversion}\\
+ \fi
+ \fi
+ \ifx\enclosures\empty\else
+ \vfill
+ \setbox1=\vbox{\enclosures}%
+ \textbf{\ifdim\ht1>\baselineskip\enclosurestext\else\enclosuretext\fi}%
+ \\\enclosures
+ \fi
+ }
+}}
+% \end{macrocode}
+% \subsection{Internal Macros}
+% The accept is produced from |\Tbox| and |\Cbox| commands only, using the
+% |textpos| package:
+% \DescribeMacro{\Cbox}
+% |\Cbox{x}{y}{width}{text}| places |text| in a box of \testsl{width} mm, centered around (|x|,|y|) in mm:
+% \begin{macrocode}
+\def\Cbox#1#2#3#4{
+ \begin{textblock}{#3}[.5,.5](#1,#2)
+ \begin{center}
+ #4
+ \end{center}
+\end{textblock}}
+% \end{macrocode}
+% \DescribeMacro{\Tbox}
+% |\Tbox{x}{y}{width}{text}| places |text| in a box of \testsl{width} mm, with the upper left corner at (|x|,|y|) in mm:
+% \begin{macrocode}
+\long\def\Tbox#1#2#3#4{
+ \begin{textblock}{#3}(#1,#2)\noindent
+ \begin{minipage}[t]{\hsize}
+ \noindent#4
+ \end{minipage}
+ \end{textblock}
+}
+% \end{macrocode}
+% \DescribeMacro{\accept}
+% This macro will have a parameter if other accept forms will have to be
+% programmed:
+% \begin{macrocode}
+\def\accept{
+ \Tbox{\xacceptdescription}
+ {\yacceptdescription}
+ {\wacceptdescription}
+ {\acceptdescription}
+ \Tbox{\xacceptdesc}
+ {\yacceptdesc}
+ {\wacceptdesc}
+ {\acceptdesc}
+ \Tbox{\xacceptaddress}
+ {\yacceptaddress}
+ {\wacceptaddress}
+ {\ifx\acceptaddress\empty\toname\\\toaddress\else\acceptaddress\fi}
+ \Cbox{\xacceptreference}
+ {\yacceptreference}
+ {\wacceptreference}
+ {\ocrb\acceptreference}
+ \Tbox{\xacceptref}
+ {\yacceptref}
+ {\wacceptref}
+ {\baselineskip=\acceptreferenceskip\ocrb\acceptreference}
+ \Cbox{\xaccepteuros}
+ {\yaccepteuros}
+ {\waccepteuros}
+ {\ocrb\accepteuros}
+ \Cbox{\xacceptaccount}
+ {\yacceptaccount}
+ {\wacceptaccount}
+ {\ocrb\acceptaccount}
+ \Cbox{\xacceptcents}
+ {\yacceptcents}
+ {\wacceptcents}
+ {\ocrb\acceptcents}
+ \Cbox{\xaccepteur}
+ {\yaccepteur}
+ {\waccepteur}
+ {\ocrb\accepteuros}
+ \Cbox{\xacceptct}
+ {\yacceptct}
+ {\wacceptct}
+ {\ocrb\acceptcents}
+}
+% \end{macrocode}
+% Definitions of field names in various languages; corrections and suggestions
+% are very welcome:
+% \DescribeMacro{\dutchdoc}
+% \begin{macrocode}
+\def\set@lang#1{\ifpreamble\AtBeginDocument{\selectlanguage{#1}}\else\selectlanguage{#1}\fi}
+\def\dutchdoc{%
+ \set@lang{dutch}
+ \def\yourlettertext{Uw brief van}
+ \def\yourreftext{Uw kenmerk}
+ \def\ourreftext{Ons kenmerk}
+ \def\datetext{Datum}
+ \def\totext{Aan}
+ \def\pagetext{Bladnummer}
+ \def\oftext{van}
+ \def\date{\number\day~\ifcase\month\or
+ januari\or februari\or maart\or april\or mei\or juni\or juli\or
+ augustus\or september\or oktober\or november\or december\fi
+ \space \number\year}
+ \def\subjecttext{Onderwerp:}
+ \def\ccname{Cc:}
+ \def\enclosuretext{Bijlage:}
+ \def\enclosurestext{Bijlagen:}
+ \def\faxtext{telefax}
+ \def\websitetext{webstek}
+ \def\emailtext{email}
+ \def\phonetext{telefoon}
+ \def\cellphonetext{mobiel}
+ \def\chambertext{kvk}
+ \def\invoicetext{{\bfseries\Large\scshape rekening}}
+ \def\descriptiontext{Omschrijving}
+ \def\amounttext{Bedrag}
+ \def\accountdatatext{Betalingsgegevens}
+ \def\termtext{betalingstermijn}
+ \def\daystext{dagen}
+ \def\accountnotext{rekening nr}
+ \def\accountnametext{ten name van}
+ \def\referencetext{kenmerk}
+ \def\chambertext{kvk}
+ \def\vatnotext{btw nr}
+ \def\Vattext{Btw}
+ \def\Totaltext{Totaal}
+}
+% \end{macrocode}
+% \DescribeMacro{\englishdoc}
+% \begin{macrocode}
+\def\englishdoc{%
+ \set@lang{english}
+ \def\yourlettertext{Your letter of}
+ \def\yourreftext{Your reference}
+ \def\ourreftext{Our reference}
+ \def\datetext{Date}
+ \def\totext{To}
+ \def\pagetext{Page}
+ \def\oftext{of}
+ \def\date{\ifcase\day\or
+ 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or
+ 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or
+ 21st\or 22nd\or 23rd\or 24th\or 25th\or
+ 26th\or 27th\or 28th\or 29th\or 30th\or
+ 31st\fi~\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space \number\year}
+ \def\subjecttext{Subject:}
+ \def\ccname{cc}
+ \def\enclosuretext{Enclosure:}
+ \def\enclosurestext{Enclosures:}
+ \def\faxtext{telefax}
+ \def\websitetext{website}
+ \def\emailtext{email}
+ \def\phonetext{telephone}
+ \def\cellphonetext{cellphone}
+ \def\invoicetext{{\bfseries\Large\scshape invoice}}
+ \def\descriptiontext{Description}
+ \def\amounttext{Amount}
+ \def\accountdatatext{Banking data}
+ \def\termtext{term of payment}
+ \def\daystext{days}
+ \def\accountnotext{Account no.}
+ \def\accountnametext{to the name of}
+ \def\referencetext{Reference}
+ \def\chambertext{ch.comm.}
+ \def\vatnotext{vat no.}
+ \def\Vattext{Vat}
+ \def\Totaltext{Total}
+}
+% \end{macrocode}
+% \DescribeMacro{\americandoc}
+% \begin{macrocode}
+\def\americandoc{%
+ \set@lang{american}
+ \def\yourlettertext{Your letter of}
+ \def\yourreftext{Your reference}
+ \def\ourreftext{Our reference}
+ \def\datetext{Date}
+ \def\totext{To}
+ \def\pagetext{Page}
+ \def\oftext{of}
+ \def\date{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+ \def\subjecttext{Subject:}
+ \def\ccname{cc}
+ \def\enclosuretext{Enclosure:}
+ \def\enclosurestext{Enclosures:}
+ \def\faxtext{telefax}
+ \def\websitetext{website}
+ \def\emailtext{email}
+ \def\phonetext{telephone}
+ \def\cellphonetext{cellphone}
+ \def\invoicetext{{\bfseries\Large\scshape invoice}}
+ \def\descriptiontext{Description}
+ \def\amounttext{Amount}
+ \def\accountdatatext{Banking data}
+ \def\termtext{term of payment}
+ \def\daystext{days}
+ \def\accountnotext{Account no.}
+ \def\accountnametext{to the name of}
+ \def\referencetext{Reference}
+ \def\chambertext{ch.comm.}
+ \def\vatnotext{vat no.}
+ \def\Vattext{Vat}
+ \def\Totaltext{Total}
+}
+% \end{macrocode}
+% \DescribeMacro{\germandoc}
+% \begin{macrocode}
+\def\germandoc{%
+ \set@lang{german}
+ \def\yourlettertext{Ihr Brief vom}
+ \def\yourreftext{Ihr Zeichen}
+ \def\ourreftext{Unser Zeichen}
+ \def\datetext{Datum}
+ \def\totext{An}
+ \def\pagetext{Seite}
+ \def\oftext{aus}
+ \def\date{\number\day.~\ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \space\number\year}
+ \def\subjecttext{Betrifft:}
+ \def\ccname{Kopien an}
+ \def\enclosuretext{Anlage:}
+ \def\enclosurestext{Anlagen:}
+ \def\faxtext{Telefax}
+ \def\websitetext{Webseite}
+ \def\emailtext{Email}
+ \def\phonetext{Telefon}
+ \def\cellphonetext{Handy}
+ \def\invoicetext{{\bfseries\Large\scshape rechnung}}
+ \def\descriptiontext{Umschreibung}
+ \def\amounttext{Betrag}
+ \def\accountdatatext{Bezahlungsdaten}
+ \def\termtext{Zahlungstermin}
+ \def\daystext{Tage}
+ \def\accountnotext{Konto Nr}
+ \def\routingnotext{BLZ}
+ \def\accountnametext{Name}
+ \def\referencetext{Beleg Nr}
+ \def\chambertext{Register Nr}
+ \def\vatnotext{Ustid Nr}
+ \def\Vattext{MwSt}
+ \def\Totaltext{Insgesamt}
+}
+% \end{macrocode}
+% \DescribeMacro{\frenchdoc}
+% \begin{macrocode}
+\def\frenchdoc{%
+ \set@lang{french}
+ \def\yourlettertext{Votre lettre du}
+ \def\yourreftext{Vos r\'ef\'erences:}
+ \def\ourreftext{Nos r\'ef\'erences:}
+ \def\datetext{Date:}
+ \def\totext{\`A l'attention de}
+ \def\pagetext{Page}
+ \def\oftext{de}
+ \def\date{\number\day\ifnum\day=1$^{er}$\fi
+ ~\ifcase\month\or janvier\or
+ f\'evrier\or mars\or avril\or mai\or juin\or
+ juillet\or ao\^ut\or septembre\or octobre\or
+ novembre\or d\'ecembre\fi \space \number\year}
+ \def\subjecttext{Objet:}
+ \def\ccname{Copie \`a}
+ \def\enclosuretext{Pi\`ece jointe:}
+ \def\enclosurestext{Pi\`eces jointes:}
+ \def\faxtext{t\'el\'efax}
+ \def\websitetext{site Web}
+ \def\emailtext{email}
+ \def\phonetext{t\'el\'ephone}
+ \def\cellphonetext{portable}
+ \def\invoicetext{{\bfseries\Large\scshape facture}}
+ \def\descriptiontext{Description}
+ \def\amounttext{Montant}
+ \def\accountdatatext{Cooronn\'ees banquaires}
+ \def\termtext{terme}
+ \def\daystext{jours}
+ \def\accountnotext{no. compte}
+ \def\accountnametext{au nom de}
+ \def\referencetext{r\'ef\'erence}
+ \def\chambertext{c.c.i.}
+ \def\vatnotext{no. T.V.A.}
+ \def\Vattext{T.V.A.}
+ \def\Totaltext{Total}
+}
+% \end{macrocode}
+%
+% \Finale
+\endinput
+
+$Id: isodoc.dtx,v 1.12 2007/04/05 19:33:08 wybo Exp $
diff --git a/Master/texmf-dist/source/latex/isodoc/isodoc.ins b/Master/texmf-dist/source/latex/isodoc/isodoc.ins
new file mode 100644
index 00000000000..d2db5512f58
--- /dev/null
+++ b/Master/texmf-dist/source/latex/isodoc/isodoc.ins
@@ -0,0 +1,61 @@
+%%
+%% Copyright (C) 2006 by Wybo Dekker <wybo@servalys.nl>
+%%
+%% This file 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.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/isodoc}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2006 by Wybo Dekker <wybo@servalys.nl>
+
+This file 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.
+
+\endpreamble
+
+\generate{\file{isodoc.cls}{\from{isodoc.dtx}{class}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* isodoc.cls *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file isodoc.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* pdflatex --interaction=batchmode $NAME > /dev/null *}
+\Msg{* makeindex -q -s gglo.ist -o isodoc.gls isodoc.glo *}
+\Msg{* makeindex -q -s gind.ist -o isodoc.ind isodoc.idx *}
+\Msg{* pdflatex --interaction=batchmode $NAME > /dev/null *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
+
+%% $Id: isodoc.ins,v 1.1.1.1 2006/09/15 21:27:36 wybo Exp $