summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/robustcommand/robustcommand.dtx
blob: 07bb39168bb019de7c1eab877b248181114e613c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
% \iffalse meta-comment
%
%%  (C) 2006 Paul Ebermann
%%
%%   Package robustcommand - robuste Kommandos, die nicht
%% automatisch überschreiben.
%%
%%   Die Datei robustcommand.dtx sowie die dazugehörige
%%   robustcommand.ins sowie die damit generierte
%%   robustcommand.sty stehen unter der
%%   "LaTeX Project Public License" (LPPL, zu finden
%%   unter http://www.latex-project.org/lppl/, sowie
%%   auch in den meisten TeX-Distributionen in
%%   texmf/docs/latex/base/lppl*.txt), Version 1.3b oder
%%   später (nach Wahl des Verwenders).
%%
%%   Der 'maintenance-status' ist (zur Zeit) 'author-maintained'.
%%   
%%   Das heißt u.a., die Dateien dürfen frei vertrieben werden,
%%   bei Änderungen (durch andere Personen als Paul Ebermann)
%%   ist aber der Name der Datei zu ändern.
%
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[2003/12/01]
%<package>\ProvidesPackage{robustcommand}
%<package> [2006/03/23 v0.1 Robuste Kommandos (PE)]
%
%<*driver>
\documentclass[draft,ngerman]{ltxdoc}
\usepackage{robustcommand}
\usepackage{pauldoc}
\begin{document}
   \DocInput{robustcommand.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{5}
%
% \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.0}{2006/03/22}{Erste Fassung}
%
% \GetFileInfo{robustcommand.sty}
%
%
% \title{Das \pack{robustcommand}-Package -- Erweiterungen von \cs{DeclareRobustCommand}\thanks{%
% Dieses Dokument gehört zu \pack{robustcommand}~\fileversion,
% vom~\filedate.}}
% \author{Paul Ebermann\thanks{\texttt{Paul-Ebermann@gmx.de}}}
%
% \maketitle
%
% \tableofcontents
%
% \section{Benutzerdoku}
%  Im \LaTeX-Kernel gibt es den Befehl '\DeclareRobustCommand', welcher
%  ein robustes Kommando definiert. Leider beachtet dies -- im Gegensatz
%  zu '\newcommand' -- nicht, ob ein entsprechendes Makro schon vorhanden
%  ist, und überschreibt es einfach, so dass man versehentlich Makros
%  überschreiben kann.
%
%  \DescribeMacro{\robust@new@command}
%  Dieses Package schließt diese Lücke mit dem Kommando
%  
%  '\robust@new@command'\marg{kommando}\oarg{param-num}\oarg{default}\marg{defn}
% 
%  Dies definiert \meta{kommando}, falls noch nicht vorhanden, als robustes
%  Makro (mit kurzen Argumenten) mit Definition \meta{defn}. Falls \meta{kommando}
%  schon existiert,  gibt es eine Fehlermeldung.
%
%  Dies ist also wie '\newcommand*' oder '\DeclareRobustCommand*' zu verwenden,
%  eine \emph{Nicht-Stern-Variante} gibt es nicht.
%
%  Der Makro-Name enthält '@'-Zeichen, so dass er nur in Package-Dateien verwendet
%  werden kann. Normalerweise ist er auch sonst nicht notwendig.
%
% \StopEventually{\PrintChanges\PrintIndex}
%
% \section{Implementation}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
%  \begin{macro}{\robust@new@command} \noindent\marg{kommando}\oarg{default}\oarg{params}\marg{defn}
% 
%    \begin{macrocode}
\newcommand*{\robust@new@command}[1]
{%
%    \end{macrocode}
%  Die Überprüfung und Fehlermeldung realisieren wir, indem wir \meta{kommando}
%  einmal mittels '\newcommand*' definieren. Das gibt eine Fehlermeldung, falls
%  \meta{kommando} schon definiert war.
%    \begin{macrocode}
  \newcommand*{#1}{}%
%    \end{macrocode}
%  Ansonsten nutzen wir jetzt einfach '\DeclareRobustCommand*', welches auch noch die
%  weiteren Argumente (\meta{default}, \meta{params}, \meta{defn}) liest.
%    \begin{macrocode}
  \DeclareRobustCommand*{#1}%
}
%    \end{macrocode}
%  \end{macro}
%
%  Das war schon alles.
%    \begin{macrocode}
\endinput
%</package>
%    \end{macrocode}
%
% \Finale
%\endinput


%%% Folgendes ist nur für meinen Editor.
%%%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End: