% \iffalse meta-comment % % Copyright (C) 2006 by Wybo Dekker % ------------------------------------------------------- % % 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} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesClass{isodoc}% %<*class> [2009/11/16 v0.7 isodoc class for letters and invoices] % %\ifnum\pdfoutput=1\else\ClassError{isodoc}{Compile me with pdflatex!}{} %\fi %<*driver> \documentclass{ltxdoc} \usepackage[a4paper,margin=25mm,left=50mm,nohead]{geometry} \usepackage{txfonts}\pdfprotrudechars=1 \usepackage[l2tabu,orthodox]{nag} \usepackage{ctable,pdfpages,paralist,eurosym,sverb,ltablex} \parindent0pt\parskip1ex \EnableCrossrefs \PageIndex \IndexPrologue{\section*{Index}} \newcommand{\FIG}[3]{ % pdfname label caption \ctable[label={#2},caption={#3},figure,botcap,framerule=.5pt]{@{}c@{}}{}{% \includegraphics[width=\textwidth]{#1} } } \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} \PrintIndex \end{document} % % \fi % % \CheckSum{1941} % % \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 $\Rightarrow$ accountno % german and french translations corrected % indents removed in header fields % expect printer to have more unprintable border % ascriptiontext $\Rightarrow$ accountnametext for dutch % Interdocument language changes now work; % Vatno, if defined, is reported with accountdata; % country in returnaddress now separated with dot; % option changes kept local to the letter/invoice; % English/American accountname text adapted % } % \changes{v0.3}{2007/08/21}{several errors in documentation corrected % } % \changes{v0.3b}{2007/08/21}{non-zero parskip generated whitespace in standard textblocks; % several accept positions fixed, % added option shift, % whitespace problems solved, % added option currency, % added option cityzip - without documentation % } % \changes{v0.4}{2008/05/01}{options shift, currency, cityzip added % norwegian translations added (thanks Sveinung Heggen) % } % \changes{v0.5}{2008/07/12}{text misplacement in subject-less letters % corrected % norwegian translations corrected % } % \changes{v0.6}{2008/07/12}{moved all documentation files in subdirectory doc, % because files appeared to be wrongly placed on the % TeX Collection DVD % Some minor corrections % } % \changes{v0.7}{2010/01/02}{using eurosym package instead of marvosym; % using frenchb package instead of french; % added addresswidth option, default stays 2 cols; % changes suggested by Fabrice Niessen (thanks!): % added header/noheader options; % added bodyshift option; % date format can be yyyy-mm-dd or a literal `today'; % added forcedate option to enter anything for date; % added foldleft and foldright options, default stays right; % headingcolor, if defined, colors fancy headings; % headcolor, if defined, colors headings in header and footer; % foldmarkcolor, if defined, colors foldmark % } % % \DoNotIndex{% % \ , \", \', \@auxout, \AtBeginDocument, \AtEndDocument, \Cbox, \CurrentOption, % \DeclareOption, \DescribeMacro, \EUR, \LARGE, \Large, \LoadClass, \ML, \NN, % \PassOptionsToClass, \ProcessOptions, \RequirePackage, \TPGrid, \Tbox, \\, \^, % \`, \aa, \addtocounter, \advance, \barsep, \baselineskip, \begin, \bfseries, % \bgroup, \clearpage, \cmidrule, \colorbox, \csname, \def, \define@key, % \definecolor, \egroup, \else, \empty, \end, \endcsname, \enspace, % \expandafter, \fancyhead, \fancyhf, \fi, \filedat, \fileversion, % \footnotesize, \geometry, \hfill, \hsize, \hspace, \ht, \if@twoside, % \ifcase, \ifdim, \ifnum, \ifx, \ignorespaces, \immediate, \includegraphics, % \lastpage@putlabel, \let, \long, \multicolumn, \newcommand, \newcount, % \newdimen, \newenvironment, \newif, \newlabel, \noindent, \number, \o, \or, % \pageref, \pagestyle, \paperheight, \paperwidth, \par, \parindent, \parskip, % \pdfinfo, \pdfprotrudechars, \qquad, \quad, \raggedright, \raisebox, \relax, % \rightskip, \rule, \scriptsize, \scshape, \selectlanguage, \setbox, % \setcounter, \setkeys, \sffamily, \space, \string, \tbfigures, \textbf, % \textbullet, \thepage, \thispagestyle, \undefined, \unskip, \usepackage, % \vbox, \vfill, \vspace, \write % } % % \GetFileInfo{isodoc.dtx} % % \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 % robust 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 also 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{} % \setupdocument{} % \begin{document} % \letter[]{} % ... 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{} % \setupdocument{} % \begin{document} % \invoice[]{} % ... more \invoice calls ... % \end{document} % \end{verbatim} % % \section{Options} % % Options are given as key=value pairs, separated by comma's. % Extra comma's, including one behind the last pair, don't hurt. % An option argument should be enclosed in braces if it contains % comma's or equals signs. % % 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 or invoices in the document, like your company data; the optional % arguments of |\letter| and |\invoice| set only those options % that are different for each letter or invoice, such as 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 only a few 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{norwegian} & Norwegian,\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 \T{logoaddress} option, % or let it automatically be created from the contents of the options \T{who}, \T{street}, % \T{prezip}, \T{zip}, \T{city}, \T{country}, and \T{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 \C{}\C{} 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{cityzip} & Place zip \textsl{after} city, instead of before it (the default).\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.}\NN % \T{addresswidth = ...}& The address window's width. The default is 70 mm (2 columns).\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{Header fields}{Under the address window, a header is printed. The % page is vertically divided in six columns, one each for the left and right % margins, and four which, in the header, % 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{bodyshift = ...} & The header starts 98mm from the top of the paper, % but it can be shifted with the |bodyshift| option.\NN % \T{[no]header} & The |noheader| option disables all header fields, the % |header| option re-enables them (|header| is the default.)\NN % \T{yourletter = ...} & first field in the header: the date of the letter % this document is reaction on; empty by default.\NN % \T{yourref = ...} & second field in the header: addressee's reference of the letter % this document is reaction on; empty by default.\NN % \T{ourref = ...} & third field in the header: your own reference for % this document.\NN % \T{date = ...} & fourth field of the header. The argument must % have the form \T{yyyymmdd} or \T{yyyy-mm-dd}; 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. The default value 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. However, you can force % the use of \C{today} by providing the string |today| % for the argument.\NN % \T{forcedate = ...} & The restrictions of the |date| option can be overridden by % using the |forcedate| option instead; you can thus enter % anything you like for the date.\NN % \T{subject = ...} & subject of this document; is placed under the other fields, % over the width of the first, second and half of the % third fields.\NN % } % % \pagebreak %%% % \OPTS{Opening and Closing}{A letter is started with an opening -- something % like `Dear John', and ended with a closing -- something like % `Regards,\T{}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 \T{autograph} option % is not used (using it without a value is equivalent to % \T{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{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{phoneprefix} & prefix for phone numbers. The default is `0'; will be changed % into `+$<$areacode$>$-' if the \T{foreign} option is used.\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{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{foldleft} & The folding mark is printed in the left margin.\NN % \T{foldright} & The folding mark is printed in the right margin. This is the default.\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{term = ...} & Payment term in days; default is 30.\NN % \T{currency = ...} & Currency; default is euro.\NN % \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}{}{ % \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}.\NN % \T{shift = ...} & The many textpositions in isodoc are defined in millimeters, % but sometimes printers show an aberration in their horizontal % or vertical printing position. You can correct for this with the % \T{shift = x,y} option, where x and y (both 0 by default) shift % the output to the right and down, respectively, in millimeters.\NN % } % % \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 in the distribution): % |listkeys show|} % % \noindent\begin{tabular}{@{}lllll@{}} % accept &addresswidth ¤cy &ourref &website \NN % acceptaccount &areacode &email &phone &who \NN % acceptaddress &autograph &enclosures &phoneprefix &yourletter \NN % acceptcents &bic &fax &returnaddress &yourref \NN % acceptdesc &cellphone &fontpackage &rightaddress &zip \NN % acceptdescription &chamber &forcedate &routingno & \NN % accepteuros &city &iban &signature & \NN % acceptreference &closing &leftaddress &street & \NN % accountname &company &logoaddress &subject & \NN % accountno &country &opening &term & \NN % addresscenter &countrycode &openingcomma &vatno & \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 by example. % \subsection{A simple letter} % 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). You can create your % own logo by redefining the |\logo| command. % \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} % % \subsection{Multiple letters, redefined logo} % Let's try another illustrative example, see 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} % \subsection{A simple invoice} % \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}. % % \subsection{Invoice with redefined logo} % 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 use |\ctable| floats here, and we need |ctable|'s commands for decent % spacing in tables and more. |ctable| also brings us |array|, |tabularx|, % |color|, and |xkeyval|. |eurosym| is used for the euro symbol. % \begin{macrocode} \RequirePackage{ctable,eurosym,graphicx,stringstrings} \RequirePackage[dutch,norsk,german,frenchb,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,nofoot,head=\baselineskip]{geometry} \RequirePackage[absolute,overlay]{textpos} \ifdim\paperwidth>\paperheight\TPGrid{297}{210}\else\TPGrid{210}{297}\fi % \end{macrocode} % Several colors can be changed, by using the |\definecolor| command; % the defaults (all black) are set here:\\ % \DescribeMacro{headcolor} % \texttt{headcolor:} color for the header and footer field texts\\ % \DescribeMacro{headingcolor} % \texttt{headingcolor:} color for the fancy headings\\ % \DescribeMacro{markercolor} % \texttt{markercolor:} color for the folding marks % \begin{macrocode} \definecolor{headcolor}{gray}{0} \definecolor{headingcolor}{gray}{0} \definecolor{markercolor}{gray}{0} % \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]{\color{headingcolor}% \pagetext\ \thepage\ \oftext{} \pageref{LastPageOf\thelettercount}} \fancyhead[RE,LO]{\color{headingcolor}% \totext: \toname\ (\date)} \else \fancyhead[L]{\color{headingcolor}% \totext: \toname\ (\date)} \fancyhead[R]{\color{headingcolor}% \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\color{headcolor}} % \end{macrocode} % \subsection{The options and their defaults} % \subsubsection{General options} % The default font is latin modern (using the |lmodern| package). % \DescribeMacro{fontpackage} % The |fontpackage| option can be used to select another font. % \begin{macrocode} \define@key{isodoc}{fontpackage}{\def\fontpackage{#1}} \def\fontpackage{lmodern} % \end{macrocode} % The default shift is 0mm,0mm. % \DescribeMacro{shift} % The |shift| option moves the output to the right and down: % \begin{macrocode} \def\@xyshift#1,#2@@@{\def\@xshift{#1}\def\@yshift{#2}} \define@key{isodoc}{shift}{% \@xyshift#1@@@ \AtBeginDocument{\textblockorigin{\@xshift mm}{\@yshift mm}} } % \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}{cityzip}[\cityziptrue]{\cityziptrue} \newif\ifcityzip\cityzipfalse \define@key{isodoc}{foreign}[\foreigntrue]{\foreigntrue} \newif\ifforeign\foreignfalse \define@key{isodoc}{localbank}[\localbanktrue]{\localbanktrue} \newif\iflocalbank\localbankfalse % \end{macrocode} % \DescribeMacro{dutch} % \DescribeMacro{english} % \DescribeMacro{german} % \DescribeMacro{american} % \DescribeMacro{french} % \DescribeMacro{norwegian} % The following keys set the language; English, set at the |\EndOfClass| is the % default. % \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} \define@key{isodoc}{norwegian} []{\norwegiandoc} % \end{macrocode} % \DescribeMacro{fill} % \DescribeMacro{nofill} % The default is to have left, but not right justification, allowing for hyphenation % in extreme cases: % \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} % \DescribeMacro{company} % \DescribeMacro{logoaddress} % \DescribeMacro{who} % \DescribeMacro{street} % \DescribeMacro{city} % \DescribeMacro{zip} % \DescribeMacro{country} % \DescribeMacro{countrycode} % 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: % \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} % \DescribeMacro{leftaddress} % \DescribeMacro{rightaddress} % \DescribeMacro{addresscenter} % \DescribeMacro{addresswidth} % 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. % \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} \define@key{isodoc}{addresswidth} {\def\addresswidth{#1}} \def\addresswidth{70} % \end{macrocode} % \DescribeMacro{to} % 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: % \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} % \DescribeMacro{return} % \DescribeMacro{noreturn} % \DescribeMacro{returnaddress} % 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: % \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{Header} % \DescribeMacro{header} % \DescribeMacro{noheader} % A header is switched on or off with the |header| and |noheader| options. % The default is to have a header. % \begin{macrocode} \define@key{isodoc}{header} []{\headertrue} \newif\ifheader\headertrue \define@key{isodoc}{noheader}[]{\headerfalse} % \end{macrocode} % \DescribeMacro{bodyshift} % The header is the start of the body. It is initially positioned % at 98mm from the top of the paper, but it can be shifted with % the |bodyshift| option. % \begin{macrocode} \define@key{isodoc}{bodyshift} {\advance\headerpos#1\advance\bodyskip#1mm} \newdimen\bodyskip\bodyskip=0mm \newcount\headerpos\headerpos=98 % \end{macrocode} % % \subsubsection{Footer} % \DescribeMacro{footer} % \DescribeMacro{nofooter} % A footer is switched on or off with the |footer| and |nofooter| options. % The default is the have no footer. % \begin{macrocode} \define@key{isodoc}{footer} []{\footertrue} \newif\iffooter\footerfalse \define@key{isodoc}{nofooter}[]{\footerfalse} % \end{macrocode} % \DescribeMacro{areacode} % \DescribeMacro{phone} % \DescribeMacro{phoneprefix} % \DescribeMacro{cellphone} % \DescribeMacro{fax} % \DescribeMacro{website} % \DescribeMacro{email} % 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} % \DescribeMacro{nofold} % The default is to have no folding mark. So start with the folding mark % position outside the paper boundaries: % \begin{macrocode} \define@key{isodoc}{nofold}[]{\yfold=-1mm} \newdimen\yfold\yfold=-1mm % \end{macrocode} % \DescribeMacro{foldleft} % \DescribeMacro{foldright} % The folding mark is in the right margin, but it can be moved to the left % margin with the |foldleft| option, or, if made that the default in your style % file, back to the right margin with the |foldright| option: % \begin{macrocode} \define@key{isodoc}{foldleft}[]{\xfold=9mm} \newdimen\xfold\xfold=201mm \define@key{isodoc}{foldright}[]{\xfold=201mm} % \end{macrocode} % \DescribeMacro{fold2} % 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. % \begin{macrocode} \define@key{isodoc}{fold2}[]{\yfold=158mm} % \end{macrocode} % \DescribeMacro{fold3} % 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. % \begin{macrocode} \define@key{isodoc}{fold3}[]{\yfold=107mm} % \end{macrocode} % \DescribeMacro{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: % \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. % The header position is 98mm by default, but it can be shifted with the |bodyshift| option. % \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} % \DescribeMacro{date} % The date must be entered in either of three formats: yyyy-mm-dd, yyyymmdd % or the string |today|. Here we check that a correct format is offered and % that the values for |mm| and |dd| are in the range 1--12 and 1--31 respectively. % The string |today| sets the date to today's date. % \begin{macrocode} \define@key{isodoc}{date}{\@isomakedate{#1}} \def\date{\Undefined{date}} % \end{macrocode} % \DescribeMacro{forcedate} % If you know what you do you can substitute anything you like for the date by % using the |forcedate| option instead of |date|: % \begin{macrocode} \define@key{isodoc}{forcedate}{\def\forcedate{#1}}\def\forcedate{} % \end{macrocode} % \DescribeMacro{subject} % The subject is empty by default and will be typeset. % \begin{macrocode} \define@key{isodoc}{subject}{\def\subject{#1}} \def\subject{} % \end{macrocode} % \DescribeMacro{opening} % \DescribeMacro{openingcomma} % 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. % \begin{macrocode} \newcount\openingpos \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} % \DescribeMacro{closing} % \DescribeMacro{closingskip} % 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: % \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} % \DescribeMacro{autograph} % 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): % \begin{macrocode} \define@key{isodoc}{autograph}[2]{\def\autographversion{#1}} \def\autographversion{0} % \end{macrocode} % \DescribeMacro{signature} % The signature, something like `John Letterwriter', is set by the |signature| option; % the default is `Undefined signature'. % \begin{macrocode} \define@key{isodoc}{signature}{\def\signature{#1}} \def\signature{\Undefined{signature}} % \end{macrocode} % \DescribeMacro{enclosures} % 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} % \DescribeMacro{term} % \DescribeMacro{accountno} % \DescribeMacro{routingno} % \DescribeMacro{accountname} % \DescribeMacro{iban} % \DescribeMacro{bic} % \DescribeMacro{vatno} % \DescribeMacro{chamber} % \DescribeMacro{currency} % 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}} \define@key{isodoc}{currency} {\def\currency{#1}} \def\currency{\EUR} % \end{macrocode} % \DescribeMacro{accept} % \DescribeMacro{acceptaccount} % \DescribeMacro{acceptaddress} % \DescribeMacro{acceptcents} % \DescribeMacro{acceptdescription} % \DescribeMacro{acceptdesc} % \DescribeMacro{accepteuros} % \DescribeMacro{acceptreference} % 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 -- the last character % tells if the items are tyepset in a Tbox (T) or in a Cbox (C): % \pagebreak%%% % \begin{verbatim} % description T % ref description T % ref euros cents reference C % % eur ct account C % % desc address T % desc address % desc address % \end{verbatim} % \begin{macrocode} \def\xacceptdescription{105}\def\yacceptdescription{200}\def\wacceptdescription{100} %T \def\xacceptref{7} \def\yacceptref{212} \def\wacceptref{30} %T \def\xaccepteuros{60} \def\yaccepteuros{216} \def\waccepteuros{32} %C \def\xacceptcents{89} \def\yacceptcents{216} \def\wacceptcents{13} %C \def\xacceptreference{125} \def\yacceptreference{216} \def\wacceptreference{55} %C \def\xaccepteur{14.4} \def\yaccepteur{228.5} \def\waccepteur{21} %C \def\xacceptct{32} \def\yacceptct{228.5} \def\wacceptct{9} %C \def\xacceptaccount{75} \def\yacceptaccount{228.5} \def\wacceptaccount{65} %C \def\xacceptdesc{7} \def\yacceptdesc{241} \def\wacceptdesc{26} %T \def\xacceptaddress{58} \def\yacceptaddress{241} \def\wacceptaddress{90} %T % \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{\zippedcity}{\ifcityzip\city\ \prezip\ \zip\else\prezip\ \zip\ \city\fi} \newcommand{\logo}{% { \parskip=0pt\parindent=0pt \begin{textblock}{140}[0,1](35,20)% \textsf{\LARGE\company}\\[-1.7ex] % large company name \rule{\hsize}{.3pt} % on top a rule \end{textblock} } \Tbox{140}{22}{35}{\noindent \footnotesize\sffamily \ifx\undefined\logoaddress% \ifx\undefined\tbfigures\else\tbfigures\fi \ifx\who\empty\else\who\\\fi \ifx\street\empty\else\street\\\fi \zippedcity \ifforeign\\\country\fi \else\logoaddress\fi } } % \end{macrocode} % \DescribeMacro{\returnaddress} % \begin{macrocode} \def\returnaddress{% \ifx\undefined\tbfigures\else\tbfigures\fi % when using osf-txfonts... just for me \company\\ \street\\ \zippedcity \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{\@isomakedate} % \begin{macrocode} \newcount\@isoyear \@isoyear=\year \year=0 \newcount\@isomonth \@isomonth=\month \newcount\@isoday \@isoday=\day \def\@isomakedate#1{% \def\@isoarg{#1}\def\@isotoday{today} \ifx\@isoarg\@isotoday \year=\@isoyear \month=\@isomonth \day=\@isoday \else \stringlength[q]{\@isoarg} \ifnum\theresult=10 \substring[q]{\@isoarg}{5}{5} \if\thestring-\else\ClassError{isodoc}{ Illegal date separator: \thestring (must be -)}{}\fi \substring[q]{\@isoarg}{8}{8} \if\thestring-\else\ClassError{isodoc}{ Illegal date separator: \thestring (must be -)}{}\fi \else \ifnum\theresult=8\else\ClassError{isodoc}{ Illegal date: not yyyymmdd | yyyy-mm-dd | today}{}\fi \fi \Treatments{0}{0}{0}{1}{0}{0} \substring[q]{\@isoarg}{1}{$} \let\@isodigits=\thestring \def\@isoarg{\thestring} \stringlength[q]{\@isodigits} \ifnum\theresult=8\else\ClassError{isodoc}{Illegal date: must have 8 digits}{}\fi \substring[q]{\@isoarg}{1}{4} \year=\thestring \def\@isoarg{\@isodigits} \substring[q]{\@isoarg}{5}{6} \month=\thestring \def\@isoarg{\@isodigits} \substring[q]{\@isoarg}{7}{8} \day=\thestring \def\@isoarg{\@isodigits} \ifnum \month > 12 \ClassError{isodoc}{Illegal date: month>12}{}\fi \ifnum \day > 31 \ClassError{isodoc}{Illegal date: day>31}{}\fi \fi } % \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 in the distribution): % |listkeys defs|} % \DescribeMacro{\showkeys} % \begin{macrocode} \def\showkeys{% \begin{tabular}{ll} accept & \accept\NN 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 addresscenter & \addresscenter\NN addresswidth & \addresswidth\NN areacode & \areacode\NN autograph & \autograph\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 currency & \currency\NN email & \email\NN enclosures & \enclosures\NN fax & \fax\NN fontpackage & \fontpackage\NN forcedate & \forcedate\NN iban & \iban\NN leftaddress & \leftaddress\NN logoaddress & \logoaddress\NN opening & \opening\NN openingcomma & \openingcomma\NN ourref & \ourref\NN phone & \phone\NN phoneprefix & \phoneprefix\NN returnaddress & \returnaddress\NN rightaddress & \rightaddress\NN routingno & \routingno\NN signature & \signature\NN street & \street\NN subject & \subject\NN term & \term\NN vatno & \vatno\NN website & \website\NN who & \who\NN yourletter & \yourletter\NN yourref & \yourref\NN zip & \zip\NN \end{tabular} } \AtEndOfClass{% \usepackage{hyperref} \year=0 } \AtEndDocument{% \hypersetup{pdfauthor={\who}, 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 (\currency)}\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\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 \def\barsep{\raisebox{-1.5ex}[0pt][0pt]{\rule{.05em}{4ex}}}% \letter[#1,opening=\invoicetext,openingcomma={},closing={},signature={}]{% \Tbox{35}{127}{140}{#2} } } % \end{macrocode} % \DescribeMacro{\letter} % |\letter| prints a letter... % \begin{macrocode} \newcommand{\letter}[2][]{{ % extra brace keeps option changes local \setkeys{isodoc}{#1} \hypersetup{pdftitle={letter to \toname\ dated \today}, pdfsubject={\subject}} \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} { \parskip=0pt\parindent=0pt \begin{textblock}{\addresswidth}[0,.5](\xaddress,\addresscenter)% \ifreturn {\def\\{\unskip\enspace\textbullet\enspace\ignorespaces}% \sffamily\bfseries\scriptsize\returnaddress }\\[-.8\baselineskip] \rule{\hsize}{.2pt}\\ \fi \toname\\\toaddress \end{textblock} } \openingpos=\headerpos \ifheader \advance\openingpos12 \advance\bodyskip12mm \Tbox{35}{\headerpos}{35}{\noindent {\@hft\yourlettertext}\\ \yourletter } \Tbox{70}{\headerpos}{35}{\noindent {\@hft\yourreftext}\\ \raggedright\yourref } \Tbox{105}{\headerpos}{35}{\noindent {\@hft\ourreftext}\\ \raggedright\ourref } \Tbox{140}{\headerpos}{35}{\noindent {\@hft\datetext}\\ \ifx\forcedate\empty% \ifnum\year=0\Undefined{date}\else\date\fi \else\forcedate\fi } \ifx\subject\empty\else% \advance\openingpos10 \advance\bodyskip10mm \Tbox{35}{108}{105}{\noindent \begin{tabularx}{\hsize}{@{}l>{\raggedright}X@{}} \@hft\subjecttext&\subject \end{tabularx} } \fi \fi \footcount=35 \iffooter \footfield{\websitetext}{}{\website} \footfield{\phonetext}{\lead}{\phone} \footfield{\cellphonetext}{\lead}{\cellphone} \footfield{\faxtext}{\lead}{\fax} \footfield{\emailtext}{}{\email} \fi { \parskip=0pt\parindent=0pt \begin{textblock*}{3mm}(\xfold,\yfold)% {\color{markercolor}\rule{\hsize}{.2pt}} \end{textblock*} } \ifx\undefined\accepttype\else\accept\fi \ifx\subject\empty\vspace*{80mm}\else\vspace*{90mm}\fi \noindent\Tbox{35}{\ifx\subject\empty110\else120\fi}{140}{\opening\openingcomma} \thispagestyle{empty} \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{% { \parskip=0pt\parindent=0pt \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{% { \parskip0pt\parindent=0pt \begin{textblock}{#3}(#1,#2)% \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{Bank details} \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{Donn\'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} % \DescribeMacro{\norwegiandoc} % \begin{macrocode} \def\norwegiandoc{% \set@lang{norsk} \def\yourlettertext{Deres brev av} \def\yourreftext{Deres ref:} \def\ourreftext{V\aa{}r ref:} \def\datetext{Dato} \def\totext{Til} \def\pagetext{Side} \def\oftext{av} \def\date{\number\day.~\ifcase\month\or januar\or februar\or mars\or april\or mai\or juni\or juli\or august\or september\or oktober\or november\or desember\fi \space \number\year} \def\subjecttext{Vedr:} \def\ccname{kopi til:} \def\enclosuretext{Vedlegg:} \def\enclosurestext{Vedlegg:} \def\faxtext{telefaks} \def\websitetext{hjemmeside} \def\emailtext{e-post} \def\phonetext{telefon} \def\cellphonetext{mobil} \def\invoicetext{{\bfseries\Large\scshape faktura}} \def\descriptiontext{Beskrivelse} \def\amounttext{Bel\o{}p} \def\accountdatatext{betales til} \def\termtext{betalingsfrist} \def\daystext{dager} \def\accountnotext{faktura nr} \def\accountnametext{til} \def\referencetext{referanse} \def\chambertext{} \def\vatnotext{Org. nr.} \def\Vattext{Mva} \def\Totaltext{Total} } % \end{macrocode} % \Finale \endinput $Id: isodoc.dtx,v 1.28 2010-01-02 16:54:02 wybo Exp $