summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/adrconv/adrconv.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/adrconv/adrconv.dtx')
-rw-r--r--macros/latex/contrib/adrconv/adrconv.dtx983
1 files changed, 983 insertions, 0 deletions
diff --git a/macros/latex/contrib/adrconv/adrconv.dtx b/macros/latex/contrib/adrconv/adrconv.dtx
new file mode 100644
index 0000000000..c42d578a9c
--- /dev/null
+++ b/macros/latex/contrib/adrconv/adrconv.dtx
@@ -0,0 +1,983 @@
+% \CheckSum{547}
+% \iffalse
+% ====================================================================
+%% adrguide.dtx
+%% Copyright 2006, 2010, 2018 Axel Kielhorn
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% 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.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Axel Kielhorn (A.Kielhorn@web.de)
+%
+% This work consists of the files adrconv.ins, adrconv.dtx, adrguide.tex
+% and the derived file adrguide.pdf.
+%
+% Use
+% tex adrconv.ins
+% or
+% latex adrconv.ins
+% to generate the other files, which are indirect parts of the
+% bundle. Use
+% latex adrconv.dtx
+% to generate the implementation documentation. Use
+% latex adrguide.tex
+% to generate the user documentation.
+%
+% ====================================================================
+%
+%<*dtx>
+\ProvidesFile{adrconv.dtx}
+%</dtx>
+%<driver>\ProvidesFile{adrconv.drv}
+%<guide>\ProvidesFile{adrguide.tex}
+%<*tex|cfg|dir|montage>
+%<tex|cfg|dir|montage>\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+%<tex|cfg|dir|montage>\ProvidesFile{%
+%<conv> adrconv%
+%<fax> adrfax%
+%<dir> adrdir%
+%<birthday> adrbirthday%
+%<planer> adrplaner
+%<small> adrsmall
+%<montage&erster> adrmontage1.tex
+%<montage&zweiter> adrmontage2.tex
+%<tex> .tex%
+%<dir&!cfg> .tex%
+%<cfg> .cfg%
+%<tex|cfg|dir|montage> }
+%</tex|cfg|dir|montage>
+%<*dtx|driver|guide|tex|cfg|dir>
+ [2018/01/30 v1.4 LaTeX2e
+%<*dtx>
+ adrconv docstrip file]
+%</dtx>
+%<driver> adrconv implementation documentation driver]
+%<guide> Address guide]
+%<tex> Interactive driver of BibTeX database to addressfile converter]
+%<cfg> adrconv configuration file]
+%<dir&!cfg> Interactive address directory generation]
+%</dtx|driver|guide|tex|cfg|dir>
+%<*driver>
+\documentclass{ltxdoc}
+\CodelineIndex
+\RecordChanges
+
+\newcommand*{\Class}[1]{\textsf{#1}}
+\newcommand*{\Package}[1]{\textsf{#1}}
+\newcommand*{\File}[1]{\texttt{#1}}
+
+\ifx\KOMAScipt\undefined
+ \DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em%
+ M\kern.05em A\kern.1em-\kern.1em Script}}
+\fi
+
+\makeatletter
+\DeclareRobustCommand{\BibTeX}{B\kern-.05em%
+ % Der folgende Hack stammt aus der Definition des
+ % Makros \LaTeX, siehe Datei `ltlogos.dtx' der
+ % LaTeX2e-Verteilung.
+ \hbox{$\m@th$% %% force math size calculations
+ \csname S@\f@size\endcsname \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ I\kern-.025emB}%
+ \kern-.08em%
+ \-\TeX%
+}
+\makeatother
+
+\begin{document}
+ \DocInput{adrconv.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{adrconv.dtx}
+% \title{\BibTeX{} address database to addressfile
+% converter\footnote{This file has version number \fileversion, last
+% revised \filedate}}
+% \author{Axel Kielhorn\thanks{A.Kielhorn@web.de} \and Markus Kohm}
+% \date{\filedate}
+% \maketitle
+% \begin{abstract}
+% \Package{adrconv} is an example for converting \BibTeX{} address
+% databases to \KOMAScript{} address files. For more information see
+% the ``ADRconv Anleitung''. This is only the implementation
+% documentation.
+% \end{abstract}
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \tableofcontents
+%
+% \section{General}
+%
+% This implementation documentation is very rudimentary because it was
+% not written by Axel Kielhorn but by Markus Kohm. I've done this
+% because after two years waiting I wanted to make the break and
+% remove the old version of \Package{adrconv} from \KOMAScript.
+%
+% The use of \Package{adrconv} is described at the ``ADRconv
+% Anleitung''. You'll get the guide, running \TeX{} or \LaTeX{} in
+% \File{adrconv.ins}.
+%
+%
+% \section{The interactive drivers}
+%
+% \iffalse
+%<*tex>
+% \fi
+% Remember the files should work not only with \LaTeX{} but also with
+% Plain\TeX. So we can olny use macros, which are defined at both:
+% \LaTeX{} and Plain\TeX.
+%
+% \begin{macrocode}
+\catcode`\@=11
+\newlinechar`\^^J
+\message{%
+ Now you have to typein the name of the BibTeX addressfile, you want
+ to^^J%
+ convert to script-address-file-format (without extension
+ `.bib'):^^J%
+ Geben Sie nun den Namen der BibTeX-Adressdatei ein, die sie in
+ das^^J%
+ Script-Adressdateiformat konvertieren wollen (ohne `.bib'):^^J%
+ ^^J%
+ addressfile=%
+}
+\def\skiplastspace#1 \@e@o@l@{#1}
+\read-1 to \addressfile
+\edef\addressfile{\expandafter\skiplastspace\addressfile\@e@o@l@}
+\newwrite\auxfile
+\immediate\openout\auxfile=\addressfile.aux
+\immediate\write\auxfile{%
+ \string\citation{*}^^J%
+%<conv> \string\bibstyle{adrconv}^^J%
+%<fax> \string\bibstyle{adrfax}^^J%
+%<birthday> \string\bibstyle{adrbirthday}^^J%
+ \string\bibdata{\addressfile}%
+}
+\immediate\closeout\auxfile
+\message{%
+ After running BibTeX rename file `\addressfile.bbl' to
+ `\addressfile.adr'!^^J%
+ Nach dem BibTeX-Lauf benennen Sie bitte die Datei `\addressfile.bbl'
+ in^^J%
+ `\addressfile.adr' um!^^J%
+}
+\ifx\@@end\undefined\let\@@end\end\fi
+\@@end
+% \end{macrocode}
+% \iffalse
+%</tex>
+% \fi
+%
+%
+% \section{The interactive generator}
+%
+% \iffalse
+%<*!cfg>
+%<*dir>
+% \fi
+% \begin{macrocode}
+\documentclass[headsepline,10pt,twoside,pagesize]{scrartcl}
+% \end{macrocode}
+% Define some new commands
+% \begin{macrocode}
+\newcommand*\jj {j}
+\newcommand*\ja {ja}
+\newcommand*\y {y}
+\newcommand*\yes{yes}
+\newread\ttyin
+\newcommand*{\gobble}[1]{}
+\def\iden#1{#1}
+\def\strip#1#2 \gobble{\def #1{#2}}
+\def\defpar{\par}
+\def\Ask#1#2{%
+ \message{#2}\read\ttyin to #1\ifx#1\defpar\def#1{}\else
+ \iden{\expandafter\strip\expandafter#1#1\gobble\gobble}
+ \gobble\fi}
+% \end{macrocode}
+% \cs{ifGerman} to load \Package{german} or \Package{ngerman}.
+% \cs{RunningHead} to get the names in the header (Telephonebook
+% style). Otherwise a new page is started for each new letter (This is
+% needed for Birthday lists).
+% \begin{macrocode}
+\newif\ifGerman
+\newif\ifRunningHead
+\newif\ifEmail
+% \end{macrocode}
+% \begin{macrocode}
+\newdimen\leftfield
+\newdimen\rightfield
+\newdimen\adrindent
+\oddsidemargin -1in
+\evensidemargin -1in
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\adrfile{}
+\newcommand*\adrtitle{}
+\typeout{^^J%
+ *** dir.tex v2.0 by Frank Neukam <01 Dec 1993>^^J%
+ *** LaTeX2e-changes by Markus Kohm 1994/10/29^^J%
+ *** ADRconv-changes by Axel Kielhorn 1999^^J%
+ *** ngerman-changes by Markus Kohm 2001^^J%
+ ^^J%
+ To create a address-directory just answer the questions:^^J%
+ ^^J}
+\Ask\answer{Use german? [y/n]^^J%
+ Mit deutscher Sprachanpassung? [j/n]}
+\ifx\jj\answer\Germantrue\else
+\ifx\ja\answer\Germantrue\else
+\ifx\y\answer\Germantrue\else
+\ifx\yes\answer\Germantrue\else
+ \Germanfalse\fi\fi\fi\fi
+\ifGerman
+ \def\germanpackage{ngerman}
+ \Ask\answer{Mit alter deutscher Rechtschreibung? [j/n]}
+ \ifx\jj\answer\def\germanpackage{german}\else
+ \ifx\ja\answer\def\germanpackage{german}\else
+ \ifx\y\answer\def\germanpackage{german}\else
+ \ifx\yes\answer\def\germanpackage{german}\fi\fi\fi\fi
+ \usepackage{\germanpackage}
+\fi
+% \end{macrocode}
+% \changes{v1.3}{2010/04/02}{Added support to print the e-mail Address in the addressbook.}
+% \begin{macrocode}
+\Ask\answer{^^JPrint email? [y/n]^^J%
+ E-Mail ausgeben? [j/n]}
+\ifx\jj\answer\Emailtrue\else
+\ifx\ja\answer\Emailtrue\else
+\ifx\y\answer\Emailtrue\else
+\ifx\yes\answer\Emailtrue\else
+ \Emailfalse\fi\fi\fi\fi
+\ifEmail
+\usepackage{url}
+\fi
+\InputIfFileExists{dir.cfg}{%
+ \typeout{Load local configuration-file.}}{%
+ \typeout{No local configuration-file found.}}
+\Ask\adrfile{^^J%
+ Name of address-file (without .adr)?^^J%
+ Name der Adressdatei (ohne .adr)?}
+\Ask\adrtitle{^^J%
+ Title of directory/list?^^J%
+ Titel des Verzeichnisses?}
+\Ask\adrformat{^^J%
+ Name of the layout^^J%
+ Layoutname?}
+\Ask\answer{^^J%
+ With running head? [y/n]^^J%
+ Namen in der Kopfzeile? [j/n]}
+\ifx\jj\answer\RunningHeadtrue\else
+\ifx\ja\answer\RunningHeadtrue\else
+\ifx\y\answer\RunningHeadtrue\else
+\ifx\yes\answer\RunningHeadtrue\else
+ \RunningHeadfalse\fi\fi\fi\fi
+% \end{macrocode}
+% \changes{v1.4}{2018/01/30}{usage of \Package{scrlayer-scrpage}}
+% Since the file uses \Class{scrartcl} it assumes that
+% \Package{scrlayer-scrpage} is available. We do not use \Package{scrpage} any
+% longer, because it is not longer part of the \KOMAScript{} bundle for more
+% than 10 years.
+% \begin{macrocode}
+\ifRunningHead
+\usepackage[manualmark,headsepline]{scrlayer-scrpage}
+\clearpairofpagestyles
+\ohead{\if@twoside\rightmark\ -- \leftmark\fi}
+\chead{\if@twoside\else\rightmark\ -- \leftmark\fi}
+\ofoot{\if@twoside\pagemark\fi}
+\cfoot{\if@twoside\else\pagemark\fi}
+\fi
+\setkomafont{pagehead}{\sffamily\bfseries}
+% \end{macrocode}
+% Loading the Layout definition.
+% If no filename is specified, adrdir will be used.
+% \begin{macrocode}
+\ifx\adrformat\empty
+ \def\adrformat{adrdir}
+\fi
+\InputIfFileExists{\adrformat.cfg}{}{%
+ \typeout{^^J%
+ *** File \adrformat.cfg not found!^^J%
+ *** Datei \adrformat.cfg nicht gefunden!^^J%
+ ^^J}
+ }
+% \end{macrocode}
+% All definitions are done, let's start with the document.
+% \begin{macrocode}
+\begin{document}
+% \end{macrocode}
+% Don't start a new page for every letter when running head is used.
+% \begin{macrocode}
+\ifRunningHead
+ \def\adrchar#1{\typeout{#1}}
+\else
+ \def\adrchar#1{\clearpage\typeout{#1}\markboth{#1}{#1}}
+\fi
+% \end{macrocode}
+% \changes{v1.4}{2018/01/30}{replaced old font command \cs{sc} by NFSS2 font
+% command}
+% \changes{v1.4}{2018/01/30}{replaced old font command \cs{sfb} by NFSS2 font
+% command}
+% \changes{v1.4}{2018/01/30}{support for \cs{addrchar} and \cs{addrentry}}
+% This command does all the formatting:
+% \begin{macrocode}
+%\adrentry
+% 1 {Nachname}
+% 2 {Vorname}
+% 3 {Strasse \\ PLZ Ort}
+% 4 {Telefon\\Mobil}
+% 5 {E-Mail} \ifEmail
+% 6 {Organisation}
+% 7 {Notiz}
+% 8 {Key}
+\def\adrentry#1#2#3#4#5#6#7#8{\hspace{\adrindent}%
+ \parbox[b]{\leftfield}
+ {\raggedright \hspace{-\adrindent}{\normalfont\scshape #1}%
+ \def\tempa{#1}\ifx \tempa\empty \else , #2\fi%
+ \def\tempa{#3}\ifx \tempa\empty \else \par #3\fi%
+ \ifEmail
+ \def\tempa{#5}\ifx \tempa\empty \else \par \url{#5}\fi%
+ \fi
+ \def\tempa{#7}\ifx \tempa\empty \else \par (#7)\fi%
+ }%
+ \hfill%
+ \parbox[b]{\rightfield}
+ {\raggedleft%
+ \def\tempa{#8}\ifx \tempa\empty \else {\scriptsize #8}\par \fi
+ {\small #4}%
+ }\par%
+ \ifRunningHead
+ \markboth{#1}{#1}
+ \fi
+}
+\def\addrentry#1#2#3#4#5#6#7#8#9{%
+ \adrentry{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#9}%
+}
+\def\addrchar{\adrchar}
+\ifx\adrfile\empty \else
+ \InputIfFileExists{\adrfile.adr}{%
+ \pagestyle{empty}
+ \null\vfil
+ \begin{center}
+ {\Large \normalfont\sffamily\bfseries \adrtitle\par}
+ \end{center}
+ \vfil\vfil\null
+% \end{macrocode}
+% Always start on a right page
+% \begin{macrocode}
+ \cleardoublepage
+ \raggedbottom
+ \pagestyle{headings}
+ }{%
+ \typeout{^^J%
+ *** File \adrfile.adr not found!^^J%
+ *** Datei \adrfile.adr nicht gefunden!^^J%
+ ^^J}
+ }
+\fi
+\end{document}
+% \end{macrocode}
+% \iffalse
+%</dir>
+%</!cfg>
+% \fi
+%
+%
+% \section{The configuration files}
+%
+% \iffalse
+%<*cfg>
+% \fi
+% \begin{macrocode}
+%<*dir>
+% \end{macrocode}
+% Configfile for A6 phone book (105\,mm $\times$ 148\,mm).
+% Original was former part of \KOMAScript{}.
+%
+% \begin{macrocode}
+\setlength{\paperwidth}{105mm}
+\setlength{\textwidth}{85mm}
+\setlength{\leftfield}{50mm}
+\setlength{\rightfield}{30mm}
+% \end{macrocode}
+% \begin{macrocode}
+\addtolength{\evensidemargin}{9mm}
+\addtolength{\oddsidemargin}{\paperwidth}
+\addtolength{\oddsidemargin}{-9mm}
+\addtolength{\oddsidemargin}{-\textwidth}
+% \end{macrocode}
+% \begin{macrocode}
+%</dir>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*planer>
+% \end{macrocode}
+% Configfile for organizers (95\,mm $\times$ 172\,mm) maybe from
+% ALDI.
+%
+% \begin{macrocode}
+\setlength{\paperwidth}{95mm}
+\setlength{\textwidth}{70mm}
+\setlength{\leftfield}{45mm}
+\setlength{\rightfield}{25mm}
+% \end{macrocode}
+% \begin{macrocode}
+\addtolength{\evensidemargin}{12mm}
+\addtolength{\oddsidemargin}{12mm}
+% \end{macrocode}
+% \begin{macrocode}
+%</planer>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*small>
+% \end{macrocode}
+% Configfile for pocket calenders (87\,mm $\times$ 148\,mm)
+% e.g. ``Sparkassenkalender''.
+%
+% \begin{macrocode}
+\setlength{\paperwidth}{87mm}
+\setlength{\textwidth}{75mm}
+\setlength{\leftfield}{45mm}
+\setlength{\rightfield}{30mm}
+% \end{macrocode}
+% \begin{macrocode}
+\addtolength{\evensidemargin}{9mm}
+\addtolength{\oddsidemargin}{\paperwidth}
+\addtolength{\oddsidemargin}{-9mm}
+\addtolength{\oddsidemargin}{-\textwidth}
+% \end{macrocode}
+% \begin{macrocode}
+%</small>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\setlength{\adrindent}{1em}
+\addtolength{\leftfield}{-\adrindent}
+% \end{macrocode}
+% \begin{macrocode}
+%<*dir>
+\setlength{\paperheight}{148mm}
+\setlength{\textheight}{112mm}
+%</dir>
+%<*planer>
+\setlength{\paperheight}{172mm}
+\setlength{\textheight}{148mm}
+%</planer>
+%<*small>
+\setlength{\paperheight}{148mm}
+\setlength{\textheight}{112mm}
+%</small>
+\setlength{\headheight}{1.25\baselineskip}
+\setlength{\headsep}{0.25\baselineskip}
+\setlength{\footskip}{1.50\baselineskip}
+\setlength{\topmargin}{-1in}
+%<dir>\addtolength{\topmargin}{8mm}
+%<planer|small>\addtolength{\topmargin}{7mm}
+\setlength{\marginparwidth}{0in}
+\setlength{\marginparsep}{0in}
+\setlength{\marginparpush}{0in}
+\setlength{\parskip}{0.5\baselineskip}
+\setlength{\parindent}{0in}
+\typeout{%
+ ********************************************************************%
+ ^^J^^J%
+ DVIDVI Options:^^J%
+ Front:^^J%
+%<*dir|small>
+%<dir> 1st Step (2 x A6 at A5)^^J%
+%<small> 1st Step (2 x callenders at A5)^^J%
+ -l xx -m 4:-1,2^^J%
+ 2nd Step (2 x A5 at A4)^^J%
+ -m 2:0,1(0mm,148mm)^^J%
+%</dir|small>
+%<planer> -l 24 -m 6:0(4mm,0mm),2(99mm,0mm),4(192mm,0mm)
+ ^^J%
+ Back:^^J%
+%<*dir|small>
+ 1st Step^^J%
+ -l xx -r -m 4:-3,0^^J%
+ 2nd Step^^J%
+ -m 2:1,0(0mm,148mm)^^J%
+%</dir|small>
+%<planer> -l 24 -r -m 6:5(8mm,0mm),3(103mm,0mm),1(198mm,0mm)
+ ^^J%
+%<dir|small> xx must be the result of a multiplication with 4.^^J%
+%<small> Cut 36 mm from one side and tack in the middle.^^J%
+ ^^J%
+ ********************************************************************
+ }
+% \end{macrocode}
+% German Remark from Axel to \File{adrdir.cfg}:
+% \begin{quote}
+% Das ist die einfache Version, einfach in der Mitte durchschneiden,
+% Seiten sortieren, ineinanderstecken und heften.
+%
+% Nicht alle Tacker k\"onnen dieses Format verarbeiten, ich habe
+% lange gesucht und benutze den Novus B5, der passt ganz knapp und ist
+% noch bezahlbar. Danach kommen die Hochleistungstacker \"uber 50 DM.
+% \end{quote}
+%
+% German Remark from Axel to \File{adrplaner.cfg}:
+% \begin{quote}
+% Der Deskjet kann die letzten 14\,mm des Blattes nicht bedrucken,
+% daher wurde das ganze Layout um 4\,mm verschoben, diese m\"ussen an
+% der kurzen Kante abgeschnitten werden.
+%
+% Bei anderen Druckern kann man bei den Vorderseiten 3\,mm von der
+% x-Koordinate abziehen und bei den R\"uckseiten zuaddieren.
+% \end{quote}
+%
+% German Remark from Axel to \File{adrsmall.cfg}:
+% \begin{quote}
+% Von einer Seite m\"ussen noch 36\,mm abgeschnitten werden, dann
+% in der Mitte heften und in den Taschenkalender einstecken.
+% \end{quote}
+%
+% \iffalse
+%</cfg>
+% \fi
+%
+%
+% \section{The \BibTeX{} files}
+%
+% \iffalse
+%<*bst>
+% \fi
+%
+% These \BibTeX{} files are BibTeX-Database to \Class{scrlettr}
+% converters. They are based on BibTeX bibliography style
+% \File{address} Gerd Neugebauer has written in 1994.
+%
+% The files generated from these files may be used for
+% \Class{scrlettr}, \Class{scrlttr2}, \File{phone.tex} or
+% \File{dir.tex} from the \KOMAScript{} Package, \Class{akletter} and
+% some versions of \Class{myletter} which preceded
+% \Class{akletter}. They will even work with the \LaTeX 2.09 version
+% of \textsc{Script}.
+%
+% This is only one way to use the address database layout defined by
+% Gerd Neugebauer. Use this as an example for your own conversion
+% program.
+%
+% \changes{v1.0}{1996/01/01}{Added the key-field}
+% \changes{v1.1}{1996/01/02}{Changed \texttt{net} to \texttt{url} and
+% \texttt{email}}
+% \changes{v1.1.1}{1996/01/03}{Function address: moved
+% \texttt{\bslash\bslash} inside if condition}
+% \changes{v1.1.1}{1996/01/03}{No more warnings if street is empty
+% (reported by Jan Holl\"ander)}
+% \changes{v1.1.2}{1996/01/04}{The \emph{von} part was ignored in
+% names}
+% \changes{v1.1.3}{1996/01/04}{Support for second (mobile)
+% telephonenumber}
+% \changes{v1.2}{1999/11/01}{New release independent of KOMA-Script}
+% \changes{v1.2a}{2001/10/11}{\Package{docstrip} version}
+% \changes{v1.2b}{2002/06/23}{Documentation updated}
+% \changes{v1.2c}{2006/04/19}{Documentation updated, license information
+% updated to LPPL 1.3}
+% \changes{v1.3}{2010/04/02}{Removed \texttt{email.bst}, the email address is now
+% written to the standard \texttt{bbl} by \texttt{adrconv}.}
+% \changes{v1.3}{2010/04/02}{Renamed \texttt{birthday.bst}
+% to \texttt{adrbirthday.bst} to avoid a collision with \texttt{directory.cls}.}
+%
+% The \File{adrbirthday.bst} prints the entries with birthdays only. The
+% entries are sorted by month and inside one month by date.
+%
+% \begin{macrocode}
+ENTRY
+ { name
+ sortas
+ title
+ organization
+ city
+ zip
+ country
+ street
+ phone
+ mobile
+ fax
+ url
+ email
+ note
+ key
+ birthday
+ nbirthday
+ }
+ {}
+%<!birthday> { adr.char }
+%<birthday> { b.month }
+% \end{macrocode}
+% \begin{macrocode}
+%<!birthday>INTEGERS { cur.adr.char }
+%<birthday>STRINGS { cur.month num.index alpha.index }
+% \end{macrocode}
+% \begin{macrocode}
+FUNCTION {get.names}
+{ name empty$
+ { organization empty$
+ { "{}{}" }
+ { organization "{}" * }
+ if$
+ }
+ { "{" name #1 "{ll}" format.name$ "}" * *
+ "{" name #1 "{ff}{ vv}" format.name$ "}" * * *
+ }
+ if$
+}
+% \end{macrocode}
+% \begin{macrocode}
+FUNCTION {print.adrchr}
+%<*!birthday>
+{ adr.char chr.to.int$ cur.adr.char >
+ { newline$ "\adrchar{" adr.char "}" * * write$ newline$
+ adr.char chr.to.int$ 'cur.adr.char :=
+ }
+ 'skip$
+%</!birthday>
+%<*birthday>
+{ b.month cur.month =
+ 'skip$
+ { newline$ "\adrchar{\convdate{" b.month "}}" * * write$ newline$
+ b.month 'cur.month :=
+ }
+%</birthday>
+ if$
+}
+% \end{macrocode}
+%\iffalse
+% $% <-- we do this to correct syntax highlight.
+%\fi
+% \begin{macrocode}
+%<*!fax>
+FUNCTION{format.phone.and.mobile}
+{ phone empty$
+ {
+ mobile empty$
+ { "" }
+ { mobile }
+ if$
+ }{
+ mobile empty$
+ { phone }
+ { phone "\\" mobile * * }
+ if$
+ }
+ if$
+}
+%</!fax>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fax>
+FUNCTION{format.phone.and.fax}
+{ phone empty$
+ { "" }
+ { phone }
+ if$
+ fax empty$
+ 'skip$
+ { phone empty$
+ { fax * }
+ { "\\Fax:\\" fax * * }
+ if$
+ }
+ if$
+}
+%</fax>
+% \end{macrocode}
+%\iffalse
+% $% <-- we do this to correct syntax hightlight.
+%\fi
+% \begin{macrocode}
+FUNCTION{address}
+{
+%<*birthday>
+ nbirthday empty$
+ 'skip$
+ {
+%</birthday>
+ print.adrchr
+ "\adrentry" write$
+ get.names write$ newline$
+ "{"
+ street empty$
+ { "" * }
+ { street " \\ " * *}
+ if$
+ zip empty$
+ { "" * }
+ { zip " " * *}
+ if$
+ city empty$
+ { "" * }
+ { city * }
+ if$
+ "}{" *
+%<!fax> format.phone.and.mobile
+%<fax> format.phone.and.fax
+ "}" * *
+ email empty$
+ { "{}" * }
+ { "{" email "}" * * * }
+ if$
+ organization empty$
+ { "{}" * }
+ { "{" organization "}" * * *}
+ if$
+ note empty$
+ { "{}" * }
+ { "{" note "}" * * * }
+ if$
+ "{" *
+%<*birthday>
+ birthday empty$
+ { "" }
+ { birthday }
+ if$
+ "}{" * *
+%</birthday>
+ key empty$
+ { "" }
+ { key }
+ if$
+ "}" * * write$ newline$
+%<*birthday>
+ }
+ if$
+%</birthday>
+}
+% \end{macrocode}
+% \begin{macrocode}
+FUNCTION{presort}
+%<*!birthday>
+{
+ sortas empty$
+ { name empty$
+ { organization empty$
+ { key empty$
+ { "No name, organization, or key to sort " cite$ * warning$
+ "???"
+ }
+ { key }
+ if$
+ }
+ { organization }
+ if$
+ }
+ { name #1 "{ll},{f }{v }{, j}" format.name$ }
+ if$
+ }
+ { sortas }
+%</!birthday>
+%<*birthday>
+{ nbirthday empty$
+ { "" }
+ { nbirthday }
+%</birthday>
+ if$
+ duplicate$
+ 'sort.key$ :=
+%<*!birthday>
+ #1 #1 substring$
+ 'adr.char :=
+%</!birthday>
+%<*birthday>
+ #1 #2 substring$
+ 'b.month :=
+%</birthday>
+% \end{macrocode}
+% At every but \File{adrbirthday.bst} the adr.char is the first letter of
+% the sort.key.
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \begin{macrocode}
+READ
+% \end{macrocode}
+% \begin{macrocode}
+ITERATE {presort}
+% \end{macrocode}
+% \begin{macrocode}
+SORT
+% \end{macrocode}
+% \begin{macrocode}
+FUNCTION {begin.bib}
+{
+%<*birthday>
+ "\def\convdate#1{\ifcase#1 \or 1 \or 2 \or 3 \or 4 \or 5 "
+ "\or 6 \or 7 \or 8 \or 9 \or 10 \or 11 \or 12 \fi}" * 'num.index :=
+ "\def\convdate#1{\ifcase#1 \or Januar \or Februar \or "
+ " M{^^b a}rz \or April \or Mai \or Juni \or Juli "
+ "\or August \or September \or Oktober \or November \or Dezember \fi}"
+ * * 'alpha.index :=
+ alpha.index write$
+ newline$
+%</birthday>
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+%<!birthday> #0 'cur.adr.char :=
+%<birthday> "00" 'cur.month :=
+}
+%\iffalse
+% $% <-- we do this to correct syntax hightlight.
+%\fi
+% \begin{macrocode}
+EXECUTE {begin.bib}
+% \end{macrocode}
+% \begin{macrocode}
+ITERATE {call.type$}
+% \end{macrocode}
+% Print a newline and flush the write buffer
+% \begin{macrocode}
+FUNCTION {end.bib}
+{ newline$ }
+% \end{macrocode}
+% \begin{macrocode}
+EXECUTE {end.bib}
+% \end{macrocode}
+%
+% \iffalse
+%</bst>
+% \fi
+%
+%
+% \section{An example \BibTeX{} database}
+%
+% Do not believe everything you read here. It is just a
+% demonstration.
+%
+% \iffalse
+%<*bib>
+%<*example>
+% \fi
+% \begin{macrocode}
+
+@address{VornameNachname,
+ name = {Vorname Nachname},
+ street = {Strasse},
+ zip = {PLZ},
+ city = {Ort},
+ phone = {Telefon},
+ email = {E-mail@domain},
+ mobile = {Mobil},
+ birthday = {Geburtstag},
+ note = {Notiz},
+ organization = {Organisation},
+ key = {Key},
+ nbirthday = {0101},
+}
+
+@address{mustermann,
+ name = {Hans Mustermann},
+ city = {Heimstatt},
+ zip = 01234,
+ country = {D -},
+ street = {Einbahnstra{\ss}e 1},
+ phone = {01234 / 5 67 89},
+ fax = {01234 / 5 67 89},
+ email = {hm@work.com},
+ note = {Alles nur Erfindung},
+}
+@address{AxelK,
+ name = {Axel Kielhorn},
+ city = {Verden},
+ zip = 27283,
+ street = {Lange Stra{\ss}e 17},
+ phone = {04231 / 12 34 56},
+ fax = {04231 / 65 34 21},
+ email = {a.kielhorn@web.de},
+ key = {Aki},
+ note = {Author of the modified addressen.bst},
+ birthday = {16.05.1967},
+ nbirthday = 0516,
+}
+@address{RalfK,
+ name = {Ralf Kielhorn},
+ city = {Braunschweig},
+ zip = 38116,
+ street = {Gro{\ss}e Stra{\ss}e 17},
+ phone = {0531 / 12 34 56},
+ key = {Rki},
+ birthday = {05.08.1969},
+ nbirthday = 0805,
+}
+@address{SabineK,
+ name = {Sabine Kielhorn},
+ city = {Oldenburg},
+ zip = 26133,
+ street = {Fraunhoferstra{\ss}e 21},
+ phone = {0441 / 12 34 56},
+ key = {Ski},
+ birthday = {13.11.1970},
+ nbirthday = 1113,
+}
+@address{OEKZ,
+ name = {{{"O}kologisches Zentrum~e.\,V.}},
+ sortas = {Okologisches Zentrum},
+ organization = {Verband der Vereine},
+ city = {Heimstatt},
+ zip = 01234,
+ country = {Germany},
+ street = {Mauerstra{\ss}e 1},
+ phone = {01234 / 5 67 89},
+ fax = {01234 / 5 67 89},
+ email = {hm@work.com},
+ key = {OEKZ},
+}
+@address{DANTE,
+ name = {{DANTE~e.\,V.}},
+ sortas = {Dante},
+ street = {Postfach 10 18 40},
+ zip = {69008},
+ city = {Heidelberg},
+ phone = {0 62 21 / 2 97 66},
+ fax = {0 62 21 / 16 79 06},
+ email = {dante@dante.de},
+ url = {http://www.dante.de},
+ key = {DANTE},
+ birthday = {14. April 1989},
+ nbirthday = {0414}
+ }
+
+% \end{macrocode}
+%
+% \iffalse
+%</example>
+%</bib>
+% \fi
+% \changes{v1.3}{2010/04/02}{Added support for PDF workflow.}
+%<*montage>
+% \begin{macrocode}
+\documentclass{article}
+\usepackage{geometry}
+\geometry{verbose,twoside,nofoot,pdftex,%
+%<erster>a5paper, top=0mm,bottom=0mm,inner=0mm}
+%<zweiter>a4paper,top=0mm,bottom=0mm,inner=0mm}
+\usepackage{pdfpages}
+\begin{document}
+\includepdf[pages={-},
+landscape,
+nup=1x2,
+%<erster>signature=16,
+%<zweiter>signature=4,
+%<erster>noautoscale,scale=1]{adrdir.pdf}
+%<zweiter>noautoscale,scale=1]{adrmontage1.pdf}
+\end{document}
+% \end{macrocode}
+%</montage>
+%
+% \Finale
+\endinput
+%
+% end of file ``adrconv.dtx''