nav-left cat-right
cat-right
Matthias Pospiech > LaTeX > Existenz von Paketen prüfen

Existenz von Paketen prüfen

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}%
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
  • e-TeX
    % 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}%
    }
  • 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}%
    }
Die entgültige Anweisung zum Test auf \chapter
\providecommand{\IfChapterDefined}[1]{\ifthenelse{\boolean{chapteravailable}}{#1}{}}%
\providecommand{\IfElseChapterDefined}[2]{\ifthenelse{\boolean{chapteravailable}}{#1}{#2}}%

2 Antworten : “Existenz von Paketen prüfen”

  1. Sabine sagt:

    Werde ich gleich mal Twittern

  2. Markus sagt:

    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.

Trackbacks/Pingbacks

  1. Matthias Pospiech » Blog Archive » LaTeX Klassen and Packet Programming - [...] hierfür gibt es allerdings noch weitere Möglichkeiten, siehe dazu auch Existenz von Paketen prüfen [...]

Einen Kommentar schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

This blog is kept spam free by WP-SpamFree.