In meiner LaTeX Vorlage hatte ich Abfragen eingebaut die auf die Existenz von Befehlen als auch der geladenen Klassen prüfen. Davon ausgehend hat mich Markus Kohm darauf hingewiesen dass es grundsätzlich keine gute Idee ist auf die geladene Klasse zu prüfen wenn man nur daran interessiert ist ob eine Anweisung vorhanden ist (in meinem Fall z.B. der Befehl \chapter) oder nicht.
Hier ein Beispiel zur Umsetzung der Prüfung auf Existenz der Anweisung \chapter
bool Variable definieren
\newboolean{chapteravailable}%
\setboolean{chapteravailable}{false}% |
\newboolean{chapteravailable}%
\setboolean{chapteravailable}{false}%
Möglichkeiten zum Testen der Existenz einer Anweisung
- TeX
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname chapter\endcsname\relax
\setboolean{chapteravailable}{false}%
\else
\setboolean{chapteravailable}{true}%
\fi |
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname chapter\endcsname\relax
\setboolean{chapteravailable}{false}%
\else
\setboolean{chapteravailable}{true}%
\fi
- e-TeX
% Is \chapter undefined? (needs e-TeX)
\ifcsname chapter\endcsname
\setboolean{chapteravailable}{true}%
\else
\setboolean{chapteravailable}{false}%
\fi |
% Is \chapter undefined? (needs e-TeX)
\ifcsname chapter\endcsname
\setboolean{chapteravailable}{true}%
\else
\setboolean{chapteravailable}{false}%
\fi
- feature of package scrkbase
% Is \chapter undefined or relax?
\RequiresPackage{scrkbase}
\ifundefined{chapter}{% using a beta feature of KOMA-Script
\setboolean{chapteravailable}{false}%
}{
\setboolean{chapteravailable}{true}%
} |
% Is \chapter undefined or relax?
\RequiresPackage{scrkbase}
\ifundefined{chapter}{% using a beta feature of KOMA-Script
\setboolean{chapteravailable}{false}%
}{
\setboolean{chapteravailable}{true}%
}
- feature of KOMA-Script
% Is \chapter undefined or relax and define it \relax,
% if it was undefined
\@ifundefined{chapter}{% using a beta feature of KOMA-Script
\setboolean{chapteravailable}{false}%
}{
\setboolean{chapteravailable}{true}%
} |
% Is \chapter undefined or relax and define it \relax,
% if it was undefined
\@ifundefined{chapter}{% using a beta feature of KOMA-Script
\setboolean{chapteravailable}{false}%
}{
\setboolean{chapteravailable}{true}%
}
Die entgültige Anweisung zum Test auf \chapter
\providecommand{\IfChapterDefined}[1]{\ifthenelse{\boolean{chapteravailable}}{#1}{}}%
\providecommand{\IfElseChapterDefined}[2]{\ifthenelse{\boolean{chapteravailable}}{#1}{#2}}% |
\providecommand{\IfChapterDefined}[1]{\ifthenelse{\boolean{chapteravailable}}{#1}{}}%
\providecommand{\IfElseChapterDefined}[2]{\ifthenelse{\boolean{chapteravailable}}{#1}{#2}}%
Ähnliche Beiträge
Werde ich gleich mal Twittern
scrkbase ist ein KOMA-Script internes Paket. Es ist nicht für die Benutzung außerhalb von KOMA-Script vorgesehen. Alle darin definierten Anweisungen sind als intern zu verstehen und nicht als Eigenschaft von scrkbase dokumentiert, sondern ggf. als Eigenschaft aller KOMA-Script-Klassen und Pakete, die scrkbase verwenden. Seit KOMA-Script 3.00 gibt es mit dem Paket scrbase hingegen ein Paket, das auch außerhalb von KOMA-Script genutzt werden kann und in der KOMA-Script-Anleitung dokumentiert ist.
\ifundefined war nie eine dokumentierte Anweisung. Sie existierte auch nur kurzzeitig. Inzwischen heißt die Anweisung \ifundefinedorrelax, wobei ihre Deklaration auch unterdrückt werden kann (siehe dazu die Anleitung). Paket- und Klassenautoren steht es frei stattdessen die Anweisung \scr@ifundefinedorrelax zu verwenden, die nach dem Laden von scrbase immer zur Verfügung steht.
\@ifundefined ist kein Feature von KOMA-Script, sondern eine interne Anweisung des LaTeX-Kerns.