% % \iffalse % % Copyright (C) 1997 2002 2008 2011 by % Robin Fairbairns % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3c 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.3c or later is part of all distributions of % LaTeX version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The current maintainer of this work is Robin Fairbairns. % % This work consists of the source files moreverb.dtx, % moreverb.ins % and the derived files moreverb.sty, % moreverb.pdf % % RCS information: % % $Id: moreverb.dtx,v 1.12 2011/04/18 19:03:28 rf10 Exp rf10 $ % % \section{Initially: identify the package} % % We use the same body for the \cs{ProvidesFile} as for the % \cs{ProvidesPackage} command. % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} %<*dtx> \ProvidesFile{moreverb.dtx} % %\ProvidesPackage{moreverb} [2008/06/03 v2.3a % `more' verbatim facilities% %<*dtx> moreverb source file% % ] % \end{macrocode} % Code to compile the thing using LaTeX2e % %<*driver> \documentclass{ltxdoc} % \setcounter{errorcontextlines}{999} % \GetFileInfo{moreverb.dtx} % % The definition of \star in ltxdoc.cls is useless (bug report % LaTeX/2117). \env is something I would like to have -- I'm % not sure this definition is entirely kosher (in any case, why aren't % all these things in doc.sty?) % \renewcommand\star{\texttt{*}} \DeclareRobustCommand\env[1]{\cs{begin\char`\{#1\char`\}}} % \begin{document} \title{Das \textsf{moreverb} Paket\thanks{Diese Datei hat die Versionnummer \fileversion, letzte \"Uberarbeitung \filedate}} \author{Robin Fairbairns (\small\texttt{rf10@cam.ac.uk})\\ nach\\ Angus Duggan, Rainer Sch\"opf and Victor Eijkhout\footnote{\"Ubersetzt von \textbf{Matthias Biniok} (FSU Jena), September 2011.}} \date{\the\year-\ifnum\month<10 0\fi\the\month -\ifnum\day <10 0\fi\the\day} \maketitle \tableofcontents \DocInput{moreverb-DE.dtx} \end{document} % % % \fi % % \CheckSum{402} % % \section{Dieses Paket} % % Dieses Paket nutzt die Ausstattung des \textsf{verbatim} % Pakets der \LaTeXe{}-\emph{tools}-Distribution, um eine Anzahl % von Dingen zur Verf\"ugung zu stellen, die in der Entwicklung des Pakets % als unn\"otig abgelehnt wurden. (Dennoch geh\"ort der Tabulator-Erweiterungs-Code % dieses Pakets zu einem der FAQs von |comp.text.tex|) % % Das Paket stellt Dinge dreier breiter Gebiete zur Verf\"ugung: % \begin{itemize} % \item Tabulator-Erweiterung und \"Ahnliches, % \item Zeilennummerierung, % \item Sonstiges: wortw\"ortlich in eine Datei schreiben (z.\,B. f\"ur % sp\"ateres Wiedereinsetzen), und das 'Verpacken'. % \end{itemize} % % \subsection{Tabulator-Erweiterung} % % Das Paket erm\"oglicht Ihnen, die voraussichtliche Breite der Tabulation % festzulegen und erlaubt das Einbinden von Dateien, die Tabulatoren enthalten. % % \DescribeEnv{verbatimtab} % % \env{verbatimtab}\oarg{Tab-Breite} % gibt dessen K\"orper\footnote{Mit K\"orper ist immer der Rumpf des Befehls gemeint.} wortw\"ortlich wieder, % wobei die Tabulatoren die Gr\"o\ss e der gegeben Breite haben (der Standardwert ist 8). % % \DescribeMacro{\verbatimtabinput} % % \cs{verbatimtabinput}\oarg{Tab-Breite}\marg{Datei-Name} % ist die Datei-Einbindungsversion der \texttt{verbatimtab}-Umgebung. % % \DescribeMacro{\verbatimtabsize} % % Die Gr\"o\ss e des Tabulators wird in \cs{verbatimtabsize} gespeichert und dauert % zwischen den Benutzungen der Umgebungen an. (Das hei\ss t, dass ein optionales Argument an % einem Element auch alle nachfolgenden Elemente betrifft.) % % \noindent Um den Wert durch etwas anderes als durch Benutzung eines % optionalen Arguments zu ersetzen, schreibt man: % % \cs{renewcommand}\cs{verbatimtabsize}|{|\meta{Wert}\cs{relax}|}| % % Es gibt keine Versprechungen hinsichtlich der gebotenen Leistung, wenn Sie das % \cs{relax} weglassen! % % \subsection{Zeilennummerierung} % % Zeilennummerierung ist oft bei der Abbildung von Code-Beispielen n\"utzlich % (dies ist n\"otig f\"ur diejenigen von uns, die solche Code-Schnipsel nicht % versch\"onigen wollen). % % \DescribeEnv{listing} % % \env{listing}\oarg{Intervall}\marg{Startzeile} nummeriert die Zeilen % des K\"orpers. Das Argument \meta{Startzeile} gibt die Startzeile an. % Das optionale Argument \meta{Intervall} legt die Anzahl der Zeilen % zwischen den nummerierten Zeilen fest: Das hei\ss t, jede Zeile mit der % Nummer \(=0\pmod{\mbox{\meta{Intervall}}}\) wird nummeriert. % (Au\ss erdem wird Zeilennummer 1 immer nummeriert.) Der % Standardwert von \meta{Intervall} ist 1 (d.\,h., es wird jede Zeile % nummeriert). % % \DescribeEnv{listingcont} % % \env{listingcont} f\"ahrt dort fort, wo der letzte Eintrag aufgeh\"ort hat. % % Der Stil, in dem das Label gesetzt ist, kann f\"ur eine der beiden Umgebungen ver\"andert werden, % durch Neudefinierung von \cs{listinglabel}. Beide Umgebungen % erweitern auch Tabulatoren. % % '\star'-Versionen von beiden Listing-Umgebungen werden angeboten; % diese machen die gew\"ohnlichen |verbatim*| Dinge mit ausgegebenen Leerzeichen wie % '\verb*| |', aber erweitern keine Tabulatoren. % % \DescribeMacro{listinginput} % % \cs{listinginput}\oarg{Intervall}\marg{Startzeile}\marg{Dateiname} % ist eine Listing-Version zum Schreiben in eine Datei. Es gibt keine '\star'-Form. % % \subsection{Sonstiges} % % \DescribeEnv{verbatimwrite} % % \env{verbatimwrite}\marg{Dateiname} schreibt allen Text seines K\"orpers in eine Datei, % dessen Name als Argument \"ubergeben wird. % % \DescribeEnv{boxedverbatim} % % \env{boxedverbatim} legt den Inhalt einer verbatim-Umgebung in % einer Rahmenbox ab. Wenn man versucht, dies auf eine 'naive' Weise zu tun, wird man sehen, % dass die verbatim-Zeilen alle so breit werden, wie die Breite der Seite, % sodass die Box h\"aufig sehr schlecht zum Text passt, den sie % umgibt. % % \DescribeEnv{verbatimcmd} % % Die |verbatimcmd| Umgebung wurde von der \LaTeX2.09 und % fr\"uheren \LaTeXe{} Versionen dieses Paketes angeboten. Jedoch werden dessen F\"ahigkeiten nun von % |alltt| zur Verf\"ugung gestellt, das im \textsf{alltt}-Paket definiert ist, % welches jetzt Teil der \LaTeX{} Grunddistribution ist, daher wurde % |verbatimcmd| zur\"uckgezogen. % % \StopEventually{} % % \section{Der Code des Pakets} % % \begin{macrocode} %<*moreverb> % \end{macrocode} % % \subsection{Initial-Code} % % L\"adt das \textsf{verbatim}-Paket, falls es noch nicht geladen ist. % % \begin{macrocode} \@ifundefined{verbatim@processline}{\RequirePackage{verbatim}}{} % \end{macrocode} % % \subsection{In eine Datei schreiben} % % \begin{environment}{verbatimwrite} % \env{verbatimwrite}\marg{Dateiname} schreibt den gesamten Text im K\"orper in eine Datei, % der Name der Datei wird als Argument \"ubergeben. (Dieser Code wurde % von Rainer Sch\"opf geschrieben.) % % Beachten Sie, dass der Code bei erstmaliger Benutzung seinen eigenen Output-Stream erzeugt. % (Dies ist eine Sparma\ss nahme; wenn der Benutzer % \env{verbatimwrite} nie benutzt, wird auch kein \cs{write}-Stream erzeugt. Ein gegenw\"artiger problematischer % Benutzungsfall taucht in tex.sx auf \dots) % % \begin{macrocode} \def\verbatimwrite#1{% \@ifundefined{verbatim@out}{\newwrite\verbatim@out}{}% \@bsphack \immediate\openout \verbatim@out #1 \let\do\@makeother\dospecials \catcode`\^^M\active \catcode`\^^I=12 \def\verbatim@processline{% \immediate\write\verbatim@out {\the\verbatim@line}}% \verbatim@start} % \end{macrocode} % \begin{macrocode} \def\endverbatimwrite{% \immediate\closeout\verbatim@out \@esphack} % \end{macrocode} % \end{environment} % % \subsection{Tabulator-Erweiterung} % % Wir definieren ein paar zus\"atzliche Makros und Z\"ahler f\"ur erweiternde Tabulatoren. % Sie werden von den |listing|- und |verbatimtab|-Umgebungen verwendet. % % \begin{macrocode} \newcount\tab@position \newcount\tab@size % \end{macrocode} % % \cs{verbatimtabsize} ist gew\"ohnlich ein Z\"ahler, doch das scheint mir % \"ubertrieben (\LaTeX{} benutzt einfach zu viele Z\"ahler\dots). % % \begin{macrocode} \def\verbatimtabsize{8\relax} % \end{macrocode} % % \begin{macro}{\@xobeytab} % % \cs{@xobeytab} f\"ugt genug Leerzeichen ein, um uns zum n\"achsten % symbolischen Tabulatoren-Ende zu bringen. % \begin{macrocode} \def\@xobeytab{% \loop \toks@\expandafter{\the\toks@\@xobeysp}% \advance\tab@position-1 \ifnum\tab@position>0 \repeat } % \end{macrocode} % \end{macro} % % \begin{macro}{\@vobeytabs} % \cs{@vobeytabs} initialisiert die Benutzung von \cs{@xobeytab}. % Muss innerhalb einer Gruppe ausgef\"uhrt werden, da es nicht in die weite Welt entweichen darf. % % \begin{macrocode} \begingroup \catcode`\^^I=\active \gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}% \endgroup % \end{macrocode} % \end{macro} % % \begin{macro}{\verbatim@tabexpand} % \cs{verbatim@tabexpand}\meta{body of line}\cs{@nil} verarbeitet jeden Buchstaben einer Zeile % durch Endrekursion, z\"ahlt die Buchstaben und % jongliert ein bisschen, wenn ein Tab auftritt. (Was gew\"ohnlich % 'line imaging' genannt wird\dots) % % \begin{macrocode} \def\verbatim@tabexpand#1{% \ifx#1\@nil % \showthe\toks@ \the\toks@ \expandafter\par \else \ifx#1\@xobeytab \@xobeytab \else % \end{macrocode} % % Wir k\"onnen \cs{@xobeysp} gefahrlos in das Token-Register tun, da es % genau das macht, was wir brauchen. % \begin{macrocode} \toks@\expandafter{\the\toks@#1}% \advance\tab@position\m@ne \fi \ifnum\tab@position=0 \tab@position\tab@size \fi \expandafter\verbatim@tabexpand \fi } % \end{macrocode} % \end{macro} % % \begin{environment}{listing} % \env{listing}\oarg{Intervall}\marg{Startzeile} % % Definiert eine verbatim-Umgebung mit nummerierten Zeilen; das optionale Argument % \meta{Intervall} legt die Anzahl der Zeilen zwischen den nummerierten % Zeilen fest, und das Argument \meta{Startzeile} gibt die Startzeile an. % % \begin{environment}{listingcont} % \env{listingcont} % % F\"ahrt dort fort, wo die Auflistung aufh\"ort. Der Stil, in dem das Label gesetzt ist, kann durch % Neudefinierung von \cs{listinglabel} ver\"andert werden. % % '\star'-Versionen beider Umgebungen werden angeboten. % % \begin{macro}{\listing@line} % \cs{listing@line} enth\"alt die aktuelle Zeilennummer; der Standardwert % ist 1, also kann man |listingcont| fr\"ohlich in einem Dokument benutzen, % wenn nur ein Stream von w\"ortlichem Text geschrieben wird. % % \begin{macrocode} \newcount\listing@line \listing@line=1 % \end{macrocode} % \end{macro} % % \begin{macro}{\listing@step} % \cs{listing@step} ist ein anderer Fall, bei dem ein Z\"ahler gewohnt verwendet wird, ohne von sehr % offensichtlichem Nutzen zu sein, % aber ein wertvolles Z\"ahlerregister aufbraucht. % Auch hier ist der Wert modal; das hintere \cs{relax} ist notwendig. % % \begin{macrocode} \def\listing@step{1\relax} % \end{macrocode} % \end{macro} % % Das Hinzuf\"ugen einer \cs{hbox} vor der Zeile verursacht einen % Zeilenumbruch, also mache ich schnell % dieses Geschw\"atz,\footnote{Das % Personalpronomen war in den Kommentaren der Originalversion % dieses Pakets vorhanden; ich wei\ss\ nicht, auf wen es sich bezieht % ~--- RF} um die Linien sch\"on ausgerichtet zu bekommen. % Ich habe wahrscheinlich einige offensichtliche Gr\"unde vergessen, weshalb \cs{hbox}es nicht funktionieren. % \footnote{Der Grund % ist, dass \cs{hbox} im vertikalen Modus einen kompletten Paragraphen aus eigener Kraft herstellt; % dieses Problem k\"onnte im Laufe der Zeit behandelt werden, % aber momentan\dots}. % % \begin{macrocode} \def\listinglabel#1{\llap{\small\rmfamily\the#1}\hskip\listingoffset\relax} \def\thelisting@line{% \setbox0\hbox{\listinglabel\listing@line}% \@tempcnta=\listing@line \divide\@tempcnta\listing@step \multiply\@tempcnta\listing@step \ifnum\listing@line=\@ne \unhbox0 \else \ifnum\@tempcnta=\listing@line \unhbox0 \else \hskip\wd0 \fi \fi} % \end{macrocode} % % \begin{macro}{\listingoffset} % \cs{listingoffset} ist die Trennung zwischen der Zeilennummer und der aktuellen Zeile; der Standardwert % ist \verb|1.5em|. % \begin{macrocode} \providecommand\listingoffset{1.5em} % \end{macrocode} % \end{macro} % % Benutzen Sie einfach \cs{listing}, um die Parameter einzulesen und um % dann \cs{listingcont} zu benutzen. % % \begin{macrocode} \newcommand\listing[2][1]{% \global\listing@line=#2\relax \gdef\listing@step{#1\relax} \listingcont} % \end{macrocode} % % \cs{listingcont} ist das funktionale Ende der zwei Umgebungen. % % \begin{macrocode} \def\listingcont{% \tab@size=\verbatimtabsize \def\verbatim@processline{\tab@position\tab@size \thelisting@line \global\advance\listing@line1 \toks@{}% \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start} % \end{macrocode} % % Nichts Besonderes am Ende der zwei Umgebungen. % % \begin{macrocode} \let\endlisting=\endtrivlist \let\endlistingcont=\endtrivlist % \end{macrocode} % % Jetzt dasselbe Geschw\"atz f\"ur die '\verb+*+' Versionen. % % \begin{macrocode} \expandafter\newcommand\csname listing*\endcsname[2][1]{% \global\listing@line=#2\relax \gdef\listing@step{#1\relax} \csname listingcont*\endcsname} \@namedef{listingcont*}{% \def\verbatim@processline{% \thelisting@line \global\advance\listing@line1 \the\verbatim@line\par}% \@verbatim\verbatim@start} % \end{macrocode} % % Nur ein bisschen \"Arger in den Namensdefinitionen am Ende der % Umgebungen. % % \begin{macrocode} \expandafter\let\csname endlisting*\endcsname\endtrivlist \expandafter\let\csname endlistingcont*\endcsname\endtrivlist % \end{macrocode} % \end{environment} % \end{environment} % % \begin{macro}{listinginput} % \cs{listinginput}\oarg{Intervall}\marg{Startzeile}\marg{Dateiname} % ist eine Version von listing zum Schreiben in eine Datei. % % \begin{macrocode} \def\listinginput{% \@ifnextchar[%] {\@listinginput}% {\@listinginput[1]}} \begingroup \catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N \lowercase{\endgroup \def\@listinginput[#1]#2#3{\begingroup \global\listing@line=#2 \gdef\listing@step{#1\relax} \tab@size=\verbatimtabsize \def\verbatim@processline{\tab@position\tab@size \thelisting@line \global\advance\listing@line1 \toks@{}% \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs \def\verbatim@addtoline##1~{% \verbatim@line\expandafter{\the\verbatim@line##1}}% \openin\verbatim@in@stream=#3 \ifeof\verbatim@in@stream \PackageWarning{moreverb}{No file #3.}% \else \do@verbatimtabinput \closein\verbatim@in@stream \fi \endtrivlist\endgroup \@doendpe }% } % \end{macrocode} % \end{macro} % % \begin{macro}{verbatimcmd} % \texttt{verbatimcmd} war eine verbatim-Umgebung mit Ausnahme der % Escape- und Gruppierungselemente \verb+\+, \verb+{+, \verb+}+. % Das ist (err) genau die Spezifikation der \texttt{alltt} % Umgebung, und es ist im \textsf{alltt} Paket, welches jetzt Teil der % Grunddistribution ist. % \begin{macrocode} \def\verbatimcmd{% \PackageError{moreverb}{The verbatimcmd environment is obsolete}% {Use alltt (from the LaTeX required package alltt) in place of verbatimcmd}% } \let\endverbatimcmd\relax % \end{macrocode} % \end{macro} % % \begin{environment}{boxedverbatim} % \texttt{boxedverbatim} legt den Inhalt einer verbatim-Umgebung in % einer Rahmenbox ab. % % (Geschrieben von Victor Eijkhout.) % % \noindent Fehlerbehebung: % \begin{itemize} % \item David Carlisle 1995-12-28, Besch\"aftigung mit Platzthemen (iirc) % \item Moretn H\o gholm 2008-06-01, Positionierung von Rahmen in Listen % \end{itemize} % % Zuerst redefiniert man 'processline', um nur eine Zeile, so breit wie % die nat\"urliche Breite der Zeile, herzustellen. % % \begin{macrocode} \def\boxedverbatim{% \def\verbatim@processline{% {\setbox0=\hbox{\the\verbatim@line}% \hsize=\wd0 \the\verbatim@line\par}}% % \end{macrocode} % % Nun speichert man den verbatim-Code in einer Box. % % \begin{macrocode} \@minipagetrue % DPC \@tempswatrue % DPC \@totalleftmargin\z@ % MH \setbox0=\vbox\bgroup \verbatim } % \end{macrocode} % % Am Ende der Umgebung, m\"ussen wir (umm) die Resultate einfach in % einen Rahmen stecken. % % \begin{macrocode} \def\endboxedverbatim{% \endverbatim \unskip\setbox0=\lastbox % DPC % \end{macrocode} % % Jetzt ist alles in der Box, also k\"onnen wir sie schlie\ss en\dots % \begin{macrocode} \egroup % \end{macrocode} % % Um den Code zum Zentrieren zu \"andern, ben\"otigt die n\"achste Zeile % eine Stelle zum Schnippeln. % \begin{macrocode} \fbox{\box0}% } % \end{macrocode} % \end{environment} % % \begin{environment}{verbatimtab} % \env{verbatimtab}\oarg{tab width} % ist eine verbatim-Umgebung, welche Tabulatoren erweitert; das optionale % Argument legt den Abstand zwischen den Tab-Stops fest. % % Das Ausf\"uhren von \cs{obeylines}, bevor man sich das optionale Argument ansieht, verhindert eine leere % erste Zeile der Umgebung, die ein \cs{par} % Zeichen wird (dieser Fehler wurde von Werner Lemberg berichtet). % \begin{macrocode} \newenvironment{verbatimtab}{\obeylines\@verbatimtab}{\endtrivlist} % \end{macrocode} % % Dies verarbeitet das optionale Argument von |verbatimtab|, sodass wir uns % nun von den gef\"urchteten \cs{par} Zeichen gesch\"utzt haben: % \begin{macrocode} \newcommand\@verbatimtab[1][\verbatimtabsize]{% \do@verbatimtab{#1}{% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start}% } % \end{macrocode} % \end{environment} % % \begin{macro}{\do@verbatimtab} % % Stellt eine Umgebung f\"ur Tabulatoren bereit; \verb+#1+ ist der Wert der Tabulator-Gr\"o\ss e % (in der Regel, urspr\"unglich ein optionales Argument), \verb+#2+ sind die 'Start-Kommandos', die % ausgef\"uhrt werden sollen, % sobald eine passende Definition von % \cs{verbatim@processline} eingef\"uhrt wurde: % \begin{macrocode} \def\do@verbatimtab#1#2{% \tab@size=#1 \def\verbatim@processline{\tab@position\tab@size \toks@{}% \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}% #2% } % \end{macrocode} % \end{macro} % % \begin{macro}{\verbatimtabinput} % \cs{verbatimtabinput}\oarg{Tab-Breite}\marg{Dateiname} % ist die Version der \texttt{verbatimtab}-Umgebung zum Schreiben in eine Datei. % % Wir benutzen den Input-Stream der vom \textsf{verbatim}-Paket erworben wurde; wir ben\"otigen es schließlich % zum Laden. % (Man muss zugeben, dass der Name des Streams nicht wirklich % Teil der definierten Schnittstelle des Pakets ist, % aber auf der anderen Seite gibt es keine besondere Wahrscheinlichkeit, % dass es sich jemals \"andern wird.) % % Wir benutzen (urspr\"unglich) keine ausgefallenen Eigenschaften von \cs{newcommand}, da die Definition % innerhalb einer Gruppe war, % und damit global. Also \dots\ % 'traditioneller' Code, um einen Befehl mit einem optionalen Argument % anzubieten (was wahrscheinlich nicht mehr n\"otig ist): % % \begin{macrocode} \def\verbatimtabinput{% \@ifnextchar[%] {\@verbatimtabinput}% {\@verbatimtabinput[\verbatimtabsize]}} \begingroup \catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N \lowercase{\endgroup \def\@verbatimtabinput[#1]#2{\begingroup \do@verbatimtab{#1}{% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs}% \def\verbatim@addtoline##1~{% \verbatim@line\expandafter{\the\verbatim@line##1}}% \openin\verbatim@in@stream=#2 \ifeof\verbatim@in@stream \PackageWarning{moreverb}{No file #2.} \else \@addtofilelist{#2}% \do@verbatimtabinput \closein\verbatim@in@stream \fi \endtrivlist\endgroup\@doendpe}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\do@verbatimtabinput} % Ausgeschriebene Schleife (Endrekursion) zum Lesen der Datei: % \begin{macrocode} \def\do@verbatimtabinput{% \read\verbatim@in@stream to \verbtab@line \ifeof\verbatim@in@stream \else \expandafter\verbatim@addtoline\verbtab@line \verbatim@processline \verbatim@startline \expandafter\do@verbatimtabinput \fi } % % \end{macrocode} % \end{macro} % % \Finale % \endinput % %% \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 \~}