% File: telprint.sty % Version: 2006/02/12 v1.6 % Author: Heiko Oberdiek % Email: % % Copyright: Copyright (C) 2006 Heiko Oberdiek. % % 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 Heiko Oberdiek. % % Function: This is a very old package that I have written % to format phone numbers. It follows German % conventions and the documentation is in German % at the end of this file. :-( % It follows a short overview in English: % % Use: LaTeX: % \usepackage{telprint} % \telprint{123/456-789} % plain: % \input telprint.sty % \telprint{123/456-789} % % \telprint{...} formats the explicitly given number. % Digits, spaces and some special characters % ('+', '/', '-', '(', ')', '~', ' ') are supported. % Numbers are divided into groups of two digits from the right. % Examples: % \telprint{0761/12345} ==> 07\,61/1\,23\,45 % \telprint{01234/567-89} ==> 0\,12\,34/5\,67\leavevmode\hbox{-}89 % \telprint{+49 (6221) 297} ==> +49~(62\,21)~2\,97 % % The output of the configured by % \telhyphen, \telslash, \telleftparen, \telrightparen, \telplus, % \teltilde. % Example: % \telslash{\,/\,} % \telprint{12/34} ==> 12\,/\,34 % % \telspace configures the space between digit groups. % % \telnumber only formats a number in digit groups; special % characters are not recognized. % % \ifx\telprint\UnDeFiNeD % \fi in derselben Zeile wie \endinput oder \expandafter verwenden! \else\endinput\fi \message{Package `telprint' 1.6, 12.02.2006 % Copyright (c) 1996, 1997, 2004, 2005, 2006 by Heiko Oberdiek.} \ifx\DeclareRobustCommand\UnDeFiNeD \def\DeclareRobustCommand*#1[1]{\def#1##1} \def\TELreset{\let\DeclareRobustCommand=\UnDeFiNeD} \immediate\write-1{Package `telprint' warning: % Macros are not robust!} \else \let\TELreset=\relax \fi \DeclareRobustCommand*{\telspace}[1]{\def\TELspace{#1}} \telspace{{}$\,${}} \DeclareRobustCommand*{\telhyphen}[1]{\def\TELhyphen{#1}} \telhyphen{\leavevmode\hbox{-}}% \hbox zur Verhinderung der Trennung \DeclareRobustCommand*{\telslash}[1]{\def\TELslash{#1}} \telslash{/}% \DeclareRobustCommand*{\telleftparen}[1]{\def\TELleftparen{#1}} \telleftparen{(}% \DeclareRobustCommand*{\telrightparen}[1]{\def\TELrightparen{#1}} \telrightparen{)}% \DeclareRobustCommand*{\telplus}[1]{\def\TELplus{#1}} \telplus{+}% \DeclareRobustCommand*{\teltilde}[1]{\def\TELtilde{#1}} \teltilde{~}% \newtoks\TELtoks \def\TELnumber#1#2\TELnumberEND{% \begingroup \def\0{#2}% \expandafter\endgroup \ifx\0\empty \TELtoks=\expandafter{\the\TELtoks#1}% \ifnum\TELswitch=0 \def\TELx{\TELspace}\def\TELy{}% \else \def\TELx{}\def\TELy{\TELspace}% \fi \the\TELtoks \else \ifnum\TELswitch=0 \TELtoks=\expandafter{\the\TELtoks#1\TELx}% \def\TELswitch{1}% \else \TELtoks=\expandafter{\the\TELtoks#1\TELy}% \def\TELswitch{0}% \fi \TELnumber#2\TELnumberEND \fi } \DeclareRobustCommand*{\telnumber}[1]{% \TELtoks={}% \def\TELswitch{0}% \TELnumber#1{}\TELnumberEND } \def\TELsplit{\futurelet\TELfuture\TELdosplit} \def\TELdosplit#1#2\TELsplitEND {% \def\TELsp{ }% \expandafter\ifx\TELsp\TELfuture \let\TELfuture=\relax \expandafter\telnumber\expandafter{\the\TELtoks}~% \telprint{#1#2}% Das Leerzeichen kann nicht #1 sein! \else \def\TELfirst{#1}% \ifx\TELfirst\empty \expandafter\telnumber\expandafter{\the\TELtoks}% \TELtoks={}% \else\if-\TELfirst \expandafter\telnumber\expandafter{\the\TELtoks}\TELhyphen \telprint{#2}% \else\if/\TELfirst \expandafter\telnumber\expandafter{\the\TELtoks}\TELslash \telprint{#2}% \else\if(\TELfirst \expandafter\telnumber\expandafter{\the\TELtoks}\TELleftparen \telprint{#2}% \else\if)\TELfirst \expandafter\telnumber\expandafter{\the\TELtoks}\TELrightparen \telprint{#2}% \else\if+\TELfirst \expandafter\telnumber\expandafter{\the\TELtoks}\TELplus \telprint{#2}% \else\def\TELtemp{~}\ifx\TELtemp\TELfirst \expandafter\telnumber\expandafter{\the\TELtoks}\TELtilde \telprint{#2}% \else \TELtoks=\expandafter{\the\TELtoks#1}% \TELsplit#2{}\TELsplitEND \fi\fi\fi\fi\fi\fi\fi \fi } \DeclareRobustCommand*{\telprint}[1]{% \TELtoks={}% \TELsplit#1{}\TELsplitEND } \TELreset\let\TELreset=\UnDeFiNeD \endinput % _History_ % * Version 1.0 vom 28.11.1996 % - Erste lauffaehige Version. % - Nur '-' und '/' als zulaessige Sonderzeichen. % * Version 1.1 vom 16.09.1997 % - Dokumentation und Kommentare (Posting in de.comp.text.tex). % - Erweiterung um Sonderzeichen '(', ')', '+', '~' und ' '. % - Trennungsverhinderung am "hyphen". % * Version 1.2 vom 16.10.1997 % - Schutz vor wiederholtem Einlesen. % - Unter LaTeX2e Nutzung des \DeclareRobustCommand-Features. % * Version 1.3 vom 09.12.1997 % - Temporaere Variable eingespart. % * Version 1.4 vom 02.11.2004 % - Fehler in der Dokumentation korrigiert. % * Version 1.5 vom 30.09.2005 % - Konfigurierbare Symbolde: '/', '(', ')', '+' und '~'. % * Version 1.6 vom 12.02.2006 % - LPPL 1.3. % - Kurze Uebersicht in Englisch. % - CTAN. % % _Dokumentation_ % * \telprint#1 % Der eigentliche Anwenderbefehl zur formatierten Ausgabe von % Telefonnummern. Diese duerfen dabei nur als Zahlen angegeben % werden(, da sie tokenweise analysiert werden). % Als Trenn- oder Sonderzeichen werden unterstuetzt: % '+', '/', '-', '(', ')', '~', ' ' % Einfache Leerzeichen werden erkannt und durch Tilden ersetzt, um % Trennungen in der Telefonnummer zu verhindern. (Man beachte aus % gleichem Grunde die \hbox bei '-'.) % Beispiele: % \telprint{0761/12345} ==> 07\,61/1\,23\,45 % \telprint{01234/567-89} ==> 0\,12\,34/5\,67\leavevmode\hbox{-}89 % \telprint{+49 (6221) 297} ==> +49~(62\,21)~2\,97 % % Der Rest enthaelt eher Technisches: % * \telspace#1 % Mit diesem Befehl wird der Abstand zwischen den Zifferngruppen % angegeben (Default: \,). % (Durch \telspace{} kann dieser zusaetzliche Abstand abgestellt % werden.) % * \telhyphen#1 % Dieser Befehl gibt die Art des Bindestriches, wie er ausgegeben % werden soll. In der Eingabe darf jedoch nur der einfache % Bindestrich stehen: % \telprint{123-45}, jedoch NIE \telprint{123--45}! % Kopka-Bindestrich-Fans geben an: % \telhyphen{\leavevmode\hbox{--}} % * \telslash#1, \telleftparen#1, \telrightparen#1, \telplus#1, % \teltilde % Diese Befehle konfigurieren die Zeichen '/', '(', ')', '+' % und '~'. Sie funktionieren analog zu \telhyphen. % * \telnumber#1 % Richtung interner Befehl: Er dient dazu, eine Zifferngruppe % in Zweiergruppen auszugeben. % Die einzelnen Zahlen werden im Tokenregister \TELtoks % gespeichert. Abwechselnd werden dabei zwischen zwei Token % (Zahlen) \TELx bzw. \TELy eingefuegt, abhaengig von dem % wechselnden Wert von \TELswitch. Zum Schluss kann dann einfach % festgestellt werden ob die Nummer nun eine geradzahlige oder % ungeradzahlige Zahl von Ziffern aufwies. Dem entsprechend wird % \TELx mit dem Zusatzabstand belegt und \TELy leer definiert % oder umgekehrt. ) % * \TEL... interne Befehle, Technisches: % \TELsplit dient zur Aufteilung einer zusammengesetzten % Telefonnummer (Vorwahl, Hauptnummer, Nebenstelle). In dieser % Implementation werden als Trennzeichen nur '/' und '-' erkannt. % Die einzelnen Bestandteile wie Vorwahl werden dann dem Befehl % \telnumber zur Formatierung uebergeben. % * Die Erkennung von einfachen Leerzeichen ist um einiges % schwieriger: Die Tokentrennung ueber Parameter #1#2 funktioniert % nicht fuer einfache Leerzeichen, da TeX sie _niemals_ als % eigenstaendige Argumente behandelt!!! (The TeXbook, Chapter 20, % p. 201) % (Anmerkung am Rande: Deshalb funktionieren die entsprechenden % Tokenmakros auf S. 149 des Buches "Einfuehrung in TeX" von % N. Schwarz (3. Aufl.) nicht, wenn im Tokenregister als erstes % ein einfaches Leerzeichen steht!) %