summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-07-04 20:21:24 +0000
committerKarl Berry <karl@freefriends.org>2022-07-04 20:21:24 +0000
commit7770798a0e0cf357fe7333de029151688cc21472 (patch)
tree7829b39c8f67424e53129bb512794174f5bd6bb9 /Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex
parent61e43f410a445f8401e7f644ab978e843cc27858 (diff)
koma-script (4jul22)
git-svn-id: svn://tug.org/texlive/trunk@63809 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex2182
1 files changed, 0 insertions, 2182 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex b/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex
deleted file mode 100644
index b93c6fdace7..00000000000
--- a/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrbase.tex
+++ /dev/null
@@ -1,2182 +0,0 @@
-% ======================================================================
-% scrbase.tex
-% Copyright (c) Markus Kohm, 2002-2022
-%
-% This file is part of the LaTeX2e KOMA-Script bundle.
-%
-% This work may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, version 1.3c of the license.
-% 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 and of this work.
-%
-% This work has the LPPL maintenance status "author-maintained".
-%
-% The Current Maintainer and author of this work is Markus Kohm.
-%
-% This work consists of all files listed in manifest.txt.
-% ----------------------------------------------------------------------
-% scrbase.tex
-% Copyright (c) Markus Kohm, 2002-2022
-%
-% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
-% Version 1.3c, verteilt und/oder veraendert werden.
-% Die neuste Version dieser Lizenz ist
-% http://www.latex-project.org/lppl.txt
-% und Version 1.3c ist Teil aller Verteilungen von LaTeX
-% Version 2005/12/01 oder spaeter und dieses Werks.
-%
-% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
-% (allein durch den Autor verwaltet).
-%
-% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
-%
-% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
-% ======================================================================
-%
-% Package scrbase for Package and Class Authors
-% Maintained by Markus Kohm
-%
-% ----------------------------------------------------------------------
-%
-% Paket scrbase für Paket- und Klassenautoren
-% Verwaltet von Markus Kohm
-%
-% ======================================================================
-
-\KOMAProvidesFile{scrbase.tex}
- [$Date: 2022-02-02 12:07:57 +0100 (Mi, 02. Feb 2022) $
- KOMA-Script package scrbase]
-
-\chapter{Grundlegende Funktionen im Paket \Package{scrbase}}
-\labelbase{scrbase}
-\BeginIndexGroup
-\BeginIndex{Package}{scrbase}%
-
-Das Paket \Package{scrbase} stellt einige grundlegende Funktionen bereit, die
-sich an Autoren von Paketen und Klassen richten. Dabei kann es nicht nur für
-Wrapper-Klassen genutzt werden, die ihrerseits eine \KOMAScript-Klasse
-laden. Auch Autoren von Klassen, die ansonsten nichts mit \KOMAScript{} zu tun
-haben, können von der Funktionalität von \Package{scrbase} profitieren.
-
-\section{Laden des Pakets}
-\seclabel{loadit}
-
-Während Anwender ein Paket mit Hilfe von \Macro{usepackage} laden, verwenden
-Paket- und Klassenautoren
-\Macro{RequirePackage}\IndexCmd{RequirePackage}. Autoren von Wrapper-Paketen
-nutzen auch
-\Macro{RequirePackageWithOptions}\IndexCmd{RequirePackageWithOptions}. Bei
-Verwendung von \Macro{RequirePackage} können wie bei
-\Macro{usepackage}\IndexCmd{usepackage} Optionen angegeben
-werden. Demgegenüber erhält das Paket bei \Macro{RequirePackageWithOptions}
-alle Optionen, mit denen zuvor das Wrapper-Paket geladen wurde. Näheres zu
-diesen Anweisungen ist \cite{latex:clsguide} zu entnehmen.
-
-Das Paket \Package{scrbase} benötigt intern die Funktionalität des Pakets
-\Package{keyval}\IndexPackage{keyval}\important{\Package{keyval}}. Diese kann
-auch vom Paket \Package{xkeyval} zur Verfügung gestellt werden. Bei Bedarf
-lädt \Package{scrbase} selbst \Package{keyval}. Näheres zu dem Paket is
-\cite{package:keyval} zu entnehmen.
-
-Das Paket \Package{keyval} erlaubt es, Schlüssel zu definieren und diesen
-Werte zuzuweisen. Auch die Optionen, die \Package{scrbase} bereitstellt,
-verwenden die \Package{keyval}-Syntax: \OptionVName{\PName{Schlüssel}}{Wert}%
-\important{\OptionVName{\PName{Schlüssel}}{Wert}}.
-
-
-\section{Schlüssel als Eigenschaften von Familien und deren Mitgliedern}
-\seclabel{keyvalue}
-
-Wie bereits in \autoref{sec:scrbase.loadit} erwähnt, setzt \Package{scrbase}
-bei Schlüsseln und deren Werten auf das Paket \Package{keyval}. Allerdings
-erweitert es dessen Funktionalität. Während bei \Package{keyval} ein Schlüssel
-einer Familie gehört, kennt \Package{scrbase} zu jeder Familie auch noch
-Familienmitglieder. Ein Schlüssel kann dann sowohl einer Familie als auch
-einem oder mehreren Familienmitgliedern gehören. Außerdem kann ein Wert einem
-Schlüssel eines Familienmitglieds, einem Schlüssel einer Familie oder einem
-Schlüssel aller Familienmitglieder zugewiesen werden.
-
-\begin{Declaration}
- \Macro{DefineFamily}\Parameter{Familienname}
- \Macro{DefineFamilyMember}\OParameter{Mitglied}\Parameter{Familienname}
-\end{Declaration}
-\Package{scrbase} muss aus verschiedenen Gründen die Mitglieder einer Familie
-kennen. Daher ist es notwendig, eine neue Familie zunächst mit
-\Macro{DefineFamily} zu definieren und so eine leere Mitgliederliste zu
-erzeugen. Ist die Familie bereits definiert, so geschieht schlicht nichts. Es
-wird also auch nicht eine bereits existierende Mitgliederliste überschrieben.
-
-Ein neues Mitglied wird der Familie dann mit der Anweisung
-\Macro{DefineFamilyMember} bekannt gegeben. Existiert die Familie nicht, so
-führt dies zu einer Fehlermeldung. Existiert das Mitglied bereits, so
-geschieht nichts. Wird kein Mitglied angegeben, so bleibt das Mitglied nicht
-etwa leer, sondern es wird
-»\texttt{.}\Macro{@currname}\texttt{.}\Macro{@currext}« angenommen. Während
-des Ladens einer Klasse oder eines Pakets sind \Macro{@currname} und
-\Macro{@currext} zusammen der Dateiname.
-
-Theoretisch wäre es möglich, mit einem leeren optionalen Argument
-\PName{Mitglied} auch ein Mitglied ohne Name zu definieren. Dies würde jedoch
-der Familie selbst entsprechen. Es wird empfohlen, als \PName{Familienname} nur
-Buchstaben und Ziffern zu verwenden und das \PName{Mitglied} immer mit einem
-anderen Zeichen, vorzugsweise einem Punkt, zu beginnen. Anderenfalls könnte
-es passieren, dass sich Mitglieder einer Familie mit Mitgliedern anderer
-Familien überdecken.
-
-\Package{scrbase} definiert selbst bereits die Familie »\PValue{KOMA}« und
-fügt ihr das Mitglied »\PValue{.scrbase.sty}« hinzu. Grundsätzlich sind die
-Familien »\PValue{KOMA}« und »\PValue{KOMAarg}« \KOMAScript{} vorbehalten. Es
-wird empfohlen, für eigene Pakete den Namen des Gesamtpakets als Familie und
-den Namen einzelner Pakete im Gesamtpaket als Mitglied zu verwenden.
-%
-\begin{Example}
- Angenommen, Sie schreiben ein neues Gesamtpaket »Fleischermeister«. Darin
- befinden sich die Pakete \File{Salami.sty}, \File{Mettwurst.sty} und
- \File{Krakauer.sty}. Daher entscheiden Sie sich für den Familienname
- »\PValue{Fleischermeister}« und fügen in jedem der Pakete die Zeilen
-\begin{lstcode}
- \DefineFamily{Fleischermeister}
- \DefineFamilyMember{Fleischermeister}
-\end{lstcode}
- ein. Dadurch wird beim Laden der drei genannten Pakete der Familie
- »\PValue{Fleischermeister}« je nach Paket eines der drei Mitglieder
- »\PValue{.Salami.sty}«, »\PValue{.Mettwurst.sty}« und
- »\PValue{.Krakauer.sty}« zugefügt. Am Ende sind dann alle drei Mitglieder
- definiert.
-\end{Example}
-%
-\EndIndexGroup
-\ExampleEndFix
-
-
-\begin{Declaration}
- \Macro{DefineFamilyKey}\OParameter{Mitglied}\Parameter{Familie}%
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Aktion}
- \Macro{FamilyKeyState}
- \Macro{FamilyKeyStateUnknown}
- \Macro{FamilyKeyStateProcessed}
- \Macro{FamilyKeyStateUnknownValue}
- \Macro{FamilyKeyStateNeedValue}
-\end{Declaration}
-Mit dieser Anweisung wird ein \PName{Schlüssel} definiert. Ist ein
-\PName{Mitglied} angegeben, so ist der \PName{Schlüssel} eine Eigenschaft
-dieses Mitglieds der angegebenen \PName{Familie}. Ist\textnote{Hinweis}
-\OParameter{Mitglied} nicht angegeben, so wird wieder das Mitglied
-»\texttt{.}\Macro{@currname}\texttt{.}\Macro{@currext}« angenommen. Ist das
-\PName{Mitglied} hingegen leer, so wird ein Familienschlüssel anstelle eines
-Mitgliederschlüssels definiert.
-
-Wird später dem \PName{Schlüssel} ein Wert zugewiesen, so wird \PName{Aktion}
-ausgeführt, wobei der Wert als Parameter übergeben wird. Innerhalb von
-\PName{Aktion} steht also »\lstinline{#1}« für den übergebenen Wert. Wurde
-kein Wert übergeben, so wird stattdessen der \PName{Säumniswert}
-eingesetzt. Falls kein \PName{Säumniswert} angegeben wird, kann später der
-\PName{Schlüssel} nur mit Wertübergabe verwendet werden.
-
-%\begin{Explain}
- \phantomsection\label{explain:scrbase.macro.DefineFamilyKey}%
- Letztlich führt
-\begin{lstcode}[escapeinside=><]
- \DefineFamilyKey[>\PName{Mitglied}<]{>\PName{Familie}<}{>\PName{Schlüssel}<}
- [>\PName{Säumniswert}<]{>\PName{Aktion}<}
-\end{lstcode}
- zu dem Aufruf
-\begin{lstcode}[moretexcs={define@key},escapeinside=><]
- \define@key{>\PName{Familie\,Mitglied}<}{>\PName{Schlüssel}<}
- [>\PName{Säumniswert}<]{>\PName{erweiterte Aktion}<}
-\end{lstcode}
- wobei \Macro{define@key} im \Package{keyval}-Paket\IndexPackage{keyval}
- definiert ist (siehe \cite{package:keyval}). Allerdings kommen zu dem Aufruf
- von \Macro{define@key} noch einige zusätzliche Vorkehrungen und auch die
- \PName{Aktion} wird automatisch um einige interne Aktionen erweitert.
-%\end{Explain}
-
-Erfolg\ChangedAt{v3.12}{\Package{scrbase}} oder Misserfolg der Ausführung
-der \PName{Aktion} werden über \Macro{FamilyKeyState} an \Package{scrbase}
-zurückgemeldet, damit dieses je nach Bedarf und Verwendung des Schlüssels
-weitere Maßnahmen ergreifen kann. Das kann beispielsweise eine Fehlermeldung
-aber auch nur die Signalisierung einer unbekannten Option sein.
-
-Der Zustand\textnote{unbekannt} \Macro{FamilyKeyState} ist in der
-Voreinstellung identisch mit dem Zustand \Macro{FamilyKeyStateUnknown}. Das
-bedeutet, dass es nicht sicher ist, ob der Schlüssel korrekt verarbeitet
-werden konnte. Findet \Package{scrbase} nach Ausführung der \PName{Aktion}
-noch immer diesen Zustand vor, so wird ein Hinweis in die \File{log}-Datei
-geschrieben und im weiteren der Zustand \Macro{FamilyKeyStateProcessed}
-angenommen.
-
-Der Zustand\textnote{Erfolg} \Macro{FamilyKeyStateProcessed} signalisiert,
-dass der Schlüssel und die Wertzuweisung an den Schlüssel vollständig
-abgeschlossen wurde und alles in Ordnung ist. Auf den Zustand kann einfach
-durch Aufruf von \Macro{FamilyKeyStateProcessed} selbst umgeschaltet werden.
-
-Der Zustand\textnote{unbekannter Wert} \Macro{FamilyKeyStateUnknownValue}
-signalisiert, dass der Schlüssel zwar verarbeitet wurde, ihm jedoch ein Wert
-zugewiesen werden sollte, der nicht erlaubt ist. Diesen Zustand meldet
-beispielsweise \hyperref[cha:typearea]{\Package{typearea}}, wenn versucht
-wird, an Option \DescRef{typearea.option.twoside} den Wert \PValue{unbekannt}
-zuzuweisen. Die Umschaltung auf den Zustand erfolgt einfach durch Aufruf von
-\Macro{FamilyKeyStateUnknownValue} selbst.
-
-Der Zustand\textnote{fehlender Wert}
-\Macro{FamilyKeyStateNeedValue}
-signalisiert, dass der Schlüssel nicht verarbeitet werden konnte, weil er
-zwingend einen Wert erwartet, er aber ohne Wertzuweisung aufgerufen
-wurde. Dieser Zustand wird automatisch gesetzt, wenn ein Schlüssel, der keinen
-\PName{Säumniswert} besitzt, ohne Wertzuweisung verwendet wird. Theoretisch
-wäre aber auch eine explizite Umschaltung darauf durch Aufruf von
-\Macro{FamilyKeyStateNeedValue} selbst möglich.
-
-Des Weiteren können zusätzliche\textnote{Fehler} Fehlerzustände definiert
-werden, indem man \Macro{FamilyKeyState} auf eine kurze Meldung
-umdefiniert. In der Regel sollten jedoch die vier vordefinierten Zustände
-verwendet werden.
-
-\begin{Example}
- Nehmen wir an, jedes der drei Pakete aus dem letzten Beispiel soll einen
- Schlüssel \PValue{Aufschnitt} erhalten. Wird dieser aufgerufen, so soll in
- jedem der Pakete entsprechend dem Aufrufwert ein Schalter gesetzt
- werden. Für das Paket \Package{Salami} könnte das beispielsweise so
- aussehen:
-\begin{lstcode}
- \newif\if@Salami@Aufschnitt
- \DefineFamilyKey{Fleischermeister}%
- {Aufschnitt}[true]{%
- \expandafter\let
- \expandafter\if@Salami@Aufschnitt
- \csname if#1\endcsname
- \FamilyKeyStateProcessed
- }
-\end{lstcode}
- Als Wert ist daher beim Aufruf \PValue{true} oder \PValue{false}
- erlaubt. Ein Test auf unerlaubte Werte existiert in diesem Beispiel
- nicht. Stattdessen wird immer zurückgemeldet, dass der Schlüssel vollständig
- und korrekt verarbeitet wurde. Wird der Schlüssel später verwendet, so muss
- entweder einer der erlaubten Werte zugewiesen oder ein Aufruf ohne
- Wertzuweisung verwendet werden. In letzterem Fall kommt der Säumniswert
- \PName{true} zum Einsatz.
-
- Für die anderen beiden Pakete kann das fast identisch definiert
- werden. Lediglich die Zeichenfolge »\texttt{Salami}« ist jeweils zu
- ersetzen.
-\end{Example}
-%
-\EndIndexGroup
-\ExampleEndFix
-
-
-\begin{Declaration}
- \Macro{RelaxFamilyKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
-\end{Declaration}
-Wurde\ChangedAt{v3.15}{\Package{scrbase}} zuvor \PName{Schlüssel} für das
-\PName{Mitglied} der \PName{Familie} definiert, so wird diese Definition
-quasi aufgehoben. Der \PName{Schlüssel} ist dann für dieses \PName{Mitglied}
-der \PName{Familie} nicht mehr definiert. Die Verwendung für einen
-\PName{Schlüssel}, der für dieses \PName{Mitglied} der \PName{Familie} gar
-nicht definiert ist, ist ebenfalls zulässig und bleibt wirkungslos.
-
-Ist kein \PName{Mitglied} angegeben, so wird genau wie bei Anweisung
-\DescRef{\LabelBase.cmd.DefineFamilyKey} wieder das Mitglied
-»\texttt{.}\Macro{@currname}\texttt{.}\Macro{@currext}« angenommen. Allerdings
-wird \Macro{RelaxFamilyKey} selten während des Ladens eines Pakets,
-sondern häufiger zur Laufzeit verwendet. Daher ist \PName{Mitglied} in der
-Regel auch explizit anzugeben.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyProcessOptions}\OParameter{Mitglied}\Parameter{Familie}
-\end{Declaration}
-Grundsätzlich ist die Erweiterung der Schlüssel von Familien auf Familien und
-Familienmitglieder dazu gedacht, dass Schlüssel beziehungsweise die
-Wertzuweisung an Schlüssel als ganz normale Klassen- oder Paketoptionen
-verwendet werden können. Diese Anweisung stellt daher eine Erweiterung von
-\Macro{ProcessOptions*}\IndexCmd{ProcessOptions*}%
-\important{\Macro{ProcessOption*}} aus dem \LaTeX-Kern dar (siehe
-\cite{latex:clsguide}). Dabei verarbeitet die Anweisung nicht nur Optionen,
-die mit \Macro{DeclareOption}\IndexCmd{DeclareOption}%
-\important{\Macro{DeclareOption}} definiert wurden. Es werden auch alle
-Schlüssel eines angegebenen Familienmitglieds abgearbeitet. Wird das optionale
-Argument \PName{Mitglied} nicht angegeben, so wird wieder das Mitglied
-»\texttt{.}\Macro{@currname}\texttt{.}\Macro{@currext}« verwendet.
-
-Eine Besonderheit sind Schlüssel, die nicht einem Familienmitglied, sondern
-der Familie selbst zugeordnet sind, bei der also das Mitglied leer geblieben
-ist. Diese werden ebenfalls gesetzt und zwar noch bevor der Schlüssel des
-Mitglieds gesetzt wird.
-\begin{Example}
- Wenn in den Paketen aus den zurückliegenden Beispielen nach der Definition
- der Schlüssel die Zeile
-\begin{lstcode}
- \FamilyProcessOptions{Fleischermeister}
-\end{lstcode}
- ergänzt wird, so kann der Anwender bereits beim Laden der Pakete mit
- \Macro{usepackage} die Eigenschaft \Option{Aufschnitt} als Option
- angeben. Wird die Option bei \Macro{documentclass} und damit global
- angegeben, so wird die Eigenschaft automatisch bei allen drei Paketen
- gesetzt, wenn alle drei Pakete einzeln geladen werden.
-\end{Example}
-Es\textnote{Achtung!} wird darauf hingewiesen, dass bei Paketen globale
-Optionen vor den lokal dem Paket zugewiesenen Optionen ausgeführt
-werden. Während bei der Abarbeitung der globalen Optionen unbekannte Werte für
-Optionen dazu führen, dass darüber lediglich in der \File{log}-Datei
-informiert und die Option ansonsten ignoriert wird, führt dies bei lokalen
-Optionen zu einer Fehlermeldung.
-
-Man kann \Macro{FamilyProcessOptions} wahlweise als Erweiterung von
-\Macro{ProcessOption*} oder als Erweiterung des
-\PName{Schlüssel=Wert}-Mechanismus von \Package{keyval} verstehen. Letztlich
-werden mit Hilfe von \Macro{FamilyProcessOptions} aus
-\PName{Schlüssel=Wert}-Paaren Optionen.
-
-Wie\textnote{Achtung!} auch \Macro{ProcessOptions} darf
-\Macro{FamilyProcessOptions} nicht während der Ausführung von Optionen
-verwendet werden. Es ist also insbesondere auch nicht erlaubt, innerhalb der
-Ausführung von Optionen Pakete zu laden.%, die selbst
-%\Macro{FamilyProcessOptions} verwenden.%
-%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{BeforeFamilyProcessOptions}\OParameter{Mitglied}\Parameter{Familie}%
- \Parameter{Code}%
-\end{Declaration}
-Insbesondere\ChangedAt{v3.18}{\Package{scrbase}} Autoren von Wrapper-Klassen
-wünschen manchmal, in ein Paket oder eine Klasse noch vor der Verarbeitung der
-Optionen eines zukünftig geladenen Pakets oder einer zukünftig geladenen
-Klasse mit \DescRef{\LabelBase.cmd.FamilyProcessOptions} eingreifen zu
-können. Dies ist mit \Macro{BeforeFamilyProcessOptions} möglich. Das Paket
-\Package{scrbase} bietet dafür einen sogenannten Haken\Index{Haken}
-(engl. \emph{hook}). Diesem kann man mit \Macro{BeforeFamilyProcessOptions}
-neuen \PName{Code} hinzufügen. Die Parameter \PName{Mitglied} und
-\PName{Familie} entsprechen dabei denen von
-\Macro{FammilyProcessOptions}. Allerdings kann man auch den Haken von
-Familien-Mitgliedern \PName{Code} hinzufügen, wenn bisher die \PName{Familie}
-oder das \PName{Mitglied} noch gar nicht definiert ist.
-
-Der Haken eines Familien-Mitglieds wird übrigens nach dessen Ausführung
-automatisch gelöscht. Verwendet man hingegen ein leeres \PName{Mitglied}, so
-wird dieser Haken\Index{Haken} für alle Mitglieder der \PName{Familie}
-ausgeführt und bleibt auch über die Ausführung hinaus erhalten.
-
-\begin{Example}
- Sie schreiben ein Paket \Package{Rauchwurst}, das selbst \Package{Mettwurst}
- lädt. Allerdings wollen Sie nicht, dass für dieses Paket die Option
- \Option{Aufschnitt} gesetzt werden kann. Daher deaktivieren sie die Option
- vor dem Laden des Pakets über \Macro{BeforeFamilyProcessOptions}.
-\begin{lstcode}
- \RequirePackage{scrbase}
- \BeforeFamilyProcessOptions[.Mettwurst.sty]%
- {Fleischermeister}{%
- \RelaxFamilyKey[.Mettwurst.sty]%
- {Fleischermeister}{Aufschnitt}%
- }
- \RequirePackageWithOptions{Mettwurst}
-\end{lstcode}
- Versucht nun jemand Ihr Paket mit Option
- \Option{Aufschnitt} zu laden, so meldet das Paket \Package{Mettwurst}, dass
- diese Option nicht bekannt ist. Wird die Option \Option{Aufschnitt} als
- globale Option angegeben, so ignoriert Paket \Package{Mettwurst}
- diese. Voreinstellungen innerhalb des Pakets \Package{Mettwurst}, die
- beispielsweise mit \DescRef{\LabelBase.cmd.FamilyExecuteOptions} noch vor
- \DescRef{\LabelBase.cmd.FamilyProcessOptions} erfolgen könnten, wären
- allerdings davon unabhängig. Aber natürlich kann man eigene
- Voreinstellungen von \Package{Rauchwurst} aus ebenfalls per
- \Macro{BeforeFamilyProcessOptions} in \Package{Mettwurst} einschleusen.%
-\end{Example}
-\EndIndexGroup
-\ExampleEndFix
-
-
-\begin{Declaration}
- \Macro{FamilyExecuteOptions}\OParameter{Mitglied}\Parameter{Familie}%
- \Parameter{Optionenliste}
-\end{Declaration}
-Diese Anweisung stellt eine Erweiterung von
-\Macro{ExecuteOptions} aus dem \LaTeX-Kern dar (siehe
-\cite{latex:clsguide}). Dabei verarbeitet die Anweisung nicht nur Optionen,
-die mit \Macro{DeclareOption} definiert wurden. Es werden auch alle Schlüssel
-eines angegebenen Familienmitglieds abgearbeitet. Wird das optionale Argument
-\PName{Mitglied} nicht angegeben, so wird wieder das Mitglied
-»\texttt{.}\Macro{@currname}\texttt{.}\Macro{@currext}« verwendet.
-
-Eine Besonderheit sind Schlüssel, die nicht einem Familienmitglied, sondern
-der Familie selbst zugeordnet sind, bei der also das Mitglied leer geblieben
-ist. Diese werden ebenfalls gesetzt, und zwar noch bevor der Schlüssel des
-Mitglieds gesetzt wird.
-\begin{Example}
- Angenommen, die Option \Option{Aufschnitt} soll in den zurückliegenden
- Beispielen bereits als Voreinstellung gesetzt werden, so müssen die Pakete
- nur um den Aufruf
-\begin{lstcode}
- \FamilyExecuteOptions{Fleischermeister}
- {Aufschnitt}
-\end{lstcode}
- ergänzt werden.
-\end{Example}
-
-Wird\ChangedAt{v3.20}{\Package{scrbase}} \Macro{FamilyExecuteOptions} mit
-einer nicht definierten Option in der \PName{Optionenliste} aufgerufen, so
-wird normalerweise ein Fehler ausgegeben. Eine Ausnahme von dieser Regel ist,
-wenn für das \PName{Mitglied} eine Option namens
-\Option{@else@}\important{\Option{@else@}} definiert wurde. In diesem Fall
-wird statt der unbekannten Option eben diese Option \Option{@else@}
-verwendet. Der an \Option{@else@} übergebene Wert ist dabei die nicht
-definierte Option mit dem im Aufruf angegebenen Wert. Innerhalb von
-\KOMAScript{} wird das beispielsweise genutzt, um die Stil-Option bei der
-Definition von Gliederungsbefehlen vor allen anderen auszuwerten.
-
-Diese Anweisung darf auch innerhalb der Ausführung von Optionen verwendet
-werden.%
-%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyOptions}\Parameter{Familie}\Parameter{Optionenliste}%
-\end{Declaration}
-Im Gegensatz zu normalen Optionen, die mit \Macro{DeclareOption} definiert
-wurden, können die \PName{Schlüssel} auch noch nach dem Laden der Klasse oder
-des Pakets gesetzt werden. Dazu verwendet der Anwender
-\Macro{FamilyOptions}. Die \PName{Optionenliste} hat dabei die Form:
-%\begin{flushleft}\begin{tabular}{l}
- \PName{Schlüssel}\texttt{=}\PName{Wert}\texttt{,}\linebreak[1]%
- \PName{Schlüssel}\texttt{=}\PName{Wert} \dots{},
-%\end{tabular}\vskip\dp\strutbox\end{flushleft}
-wobei für \PName{Schlüssel}, für die ein Säumniswert definiert ist, die
-Wertzuweisung natürlich auch entfallen kann.
-
-Durch die Anweisung werden die \PName{Schlüssel} aller Mitglieder der
-angegebenen \PName{Familie} gesetzt. Existiert ein \PName{Schlüssel} auch als
-Eigenschaft der Familie selbst, so wird dieser Familien-Schlüssel zuerst
-gesetzt. Danach folgen die Mitglieder-Schlüssel in der Reihenfolge, in der die
-Mitglieder definiert wurden. Existiert ein angegebener \PName{Schlüssel} weder
-für die Familie noch für ein Mitglied der Familie, so wird von
-\Macro{FamilyOptions} ein Fehler ausgegeben. Dies geschieht ebenfalls, wenn
-zwar für einige Mitglieder ein Schlüssel existiert, jedoch jedes dieser
-Mitglieder über \DescRef{\LabelBase.cmd.FamilyKeyState} einen Fehler
-zurückmeldet.
-\begin{Example}
- Sie ergänzen das Fleischermeister-Projekt um ein weiteres Paket
- \Package{Wurstsalat}. Wird dieses Paket verwendet, so sollen alle
- Wurstpakete zunächst einmal Aufschnitt produzieren:
-\begin{lstcode}
- \ProvidesPackage{Wurstsalat}%
- [2008/05/06 nonsense package]
- \RequirePackage{scrbase}
- \DefineFamily{Fleischermeister}
- \DefineFamilyMember{Fleischermeister}
- \FamilyProcessOptions{Fleischermeister}\relax
- \FamilyOptions{Fleischermeister}{Aufschnitt}
-\end{lstcode}
- Sollte noch kein Wurstpaket geladen sein, so würde nun eine Fehlermeldung
- wegen der nicht definierten Option »\Option{Aufschnitt}« ausgegeben. Das
- kann vermieden werden, indem vor der letzten Zeile für das Paket selbst
- ebenfalls ein entsprechender Schlüssel definiert wird:
-\begin{lstcode}
- \DefineFamilyKey{Fleischermeister}%
- {Aufschnitt}[true]{}%
-\end{lstcode}
- Allerdings produzieren so Wurstpakete, die nach Paket
- \Package{Wurstsalat} geladen werden, keinen Aufschnitt. Dies kann man
- ebenfalls ändern:
-\begin{lstcode}
- \AtBeginDocument{%
- \DefineFamilyKey[.Wurstsalat.sty]%
- {Fleischermeister}%
- {Aufschnitt}[true]{}%
- }
- \DefineFamilyKey{Fleischermeister}%
- {Aufschnitt}[true]{%
- \AtBeginDocument{%
- \FamilyOptions{Fleischermeister}%
- {Aufschnitt=#1}%
- }%
- }%
-\end{lstcode}
- Somit wird zunächst während \Macro{begin}\PParameter{document} die Option so
- definiert, dass sie für das Paket \Package{Wurstsalat} keine Funktion mehr
- ausübt. Da nach dem Laden von \Package{Wurstsalat}, innerhalb von
- \Macro{begin}\PParameter{document} die beiden Anweisungen \Macro{@currname}
- und \Macro{@currext} nicht mehr den Dateinamen des Pakets enthalten, muss
- zwingend das optionale Argument von \DescRef{\LabelBase.cmd.DefineFamilyKey}
- verwendet werden.
-
- Bis zu dieser Umdefinierung der Option wird jedoch eine Definition
- verwendet, die während \Macro{begin}\PParameter{document} die Option erneut
- für die Familie und all ihre Mitglieder ausführt und damit auch für andere
- Wurstpakete setzt. Die Verzögerung der Ausführung von \Macro{FamilyOptions}
- ist hier entscheidend. Zum einen werden nur so später geladene Wurstpakete
- erfasst. Zum anderen wird dadurch sichergestellt, dass die eigene Option
- \Option{Aufschnitt} bereits umdefiniert wurde. Dadurch wird eine endlose
- Rekursion vermieden.%
-\end{Example}%
-
-Für\ChangedAt{v3.27}{\Package{scrbase}} die Option Namens
-\Option{@else@}\important{\Option{@else}} existiert ähnlich wie bei Anweisung
-\DescRef{\LabelBase.cmd.FamilyExecuteOptions} eine Sonderbehandlung. Ist eine
-solche für ein Mitglied definiert, so wird sie immer dann ausgeführt, wenn das
-Mitglied eine angegebene Option nicht kennt. Ist für die Familie selbst eine
-Option \Option{@else@} definiert, so wird sie nur aufgerufen, wenn weder die
-Familie noch eines ihrer Mitglieder eine angegebene Option vollständig
-verarbeiten konnte und mit \DescRef{\LabelBase.cmd.FamilyKeyStateProcessed}
-quitiert hat.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyOption}\Parameter{Familie}%
- \Parameter{Option}\Parameter{Werteliste}%
-\end{Declaration}
-Neben Optionen, die sich gegenseitig ausschließende Werte besitzen, kann es
-auch Optionen geben, die gleichzeitig mehrere Werte annehmen können. Für diese
-wäre es bei Verwendung von \DescRef{\LabelBase.cmd.FamilyOptions} notwendig,
-der Option mehrfach einen Wert zuzuweisen und dabei die Option selbst mehrfach
-anzugeben. Stattdessen kann man einfach mit \Macro{FamilyOption} einer
-einzigen \PName{Option} eine ganze \PName{Werteliste} zuweisen. Die
-\PName{Werteliste} ist dabei eine durch Komma separierte Liste von Werten:
-%\begin{flushleft}\begin{tabular}{l}
- \PName{Wert}\texttt{,}\PName{Wert} \dots{}
-%\end{tabular}\end{flushleft}
-In diesem Zusammenhang sei darauf hingewiesen, dass die Verwendung eines
-Kommas in einem Wert möglich ist, wenn man den Wert in geschweifte Klammern
-setzt. Die weitere Funktionsweise ist der vorhergehenden Erklärung zu
-\DescRef{\LabelBase.cmd.FamilyOptions} zu entnehmen.
-\begin{Example}
- Das Paket \Package{Wurstsalat} soll eine Option bekommen, über die man
- weitere Zutaten bestimmen kann. Für jede Zutat wird dabei wieder ein
- Schalter gesetzt.
-\begin{lstcode}
- \newif\if@salatmit@Zwiebeln
- \newif\if@salatmit@Gurken
- \newif\if@salatmit@Peperoni
- \DefineFamilyKey{Fleischermeister}{SalatZusatz}{%
- \csname @salatmit@#1true\endcsname
- }
-\end{lstcode}
- Es wurden hier die drei Zutaten »Zwiebeln«, »Gurken« und »Peperoni«
- definiert. Eine Fehlerbehandlung für den Fall, dass der Anwender unbekannte
- Zutaten fordert, existiert nicht.
-
- Für einen Salat mit Zwiebeln und Gurken kann der Anwender
-\begin{lstcode}
- \FamilyOptions{Fleischermeister}{%
- SalatZusatz=Zwiebeln,SalatZusatz=Gurken}
-\end{lstcode}
- oder einfach
-\begin{lstcode}
- \FamilyOption{Fleischermeister}%
- {SalatZusatz}{Zwiebeln,Gurken}
-\end{lstcode}
- verwenden.
-\end{Example}
-
-\iffalse% Umbruchkorrektur
-Die\ChangedAt{v3.27}{\Package{scrbase}} Verarbeitung einer Option
-\Option{@else@} findet in derselben Weise statt wie bei
-\DescRef{\LabelBase.cmd.FamilyOptions}.%
-\else%
-Intern basiert \Macro{FamilyOption} auf
-\DescRef{\LabelBase.cmd.FamilyOptions}.
-Die\ChangedAt{v3.27}{\Package{scrbase}} Verarbeitung einer Option
-\Option{@else@} findet daher in gleicher Weise statt.%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{AtEndOfFamilyOptions}\Parameter{Aktion}%
- \Macro{AtEndOfFamilyOptions*}\Parameter{Aktion}%
-\end{Declaration}
-Manchmal\ChangedAt{v3.12}{\Package{scrbase}} ist es vorteilhafter, wenn nicht
-jede Wertzuweisung an eine Option unmittelbar eine \PName{Aktion} auslöst,
-sondern dies erst geschieht, wenn alle Wertzuweisungen innerhalb eines Aufrufs
-von
-\DescRef{\LabelBase.cmd.FamilyProcessOptions}\IndexCmd{FamilyProcessOptions}
-oder
-\DescRef{\LabelBase.cmd.FamilyExecuteOptions}\IndexCmd{FamilyExecuteOptions}
-respektive \DescRef{\LabelBase.cmd.FamilyOptions}\IndexCmd{FamilyOptions} oder
-\DescRef{\LabelBase.cmd.FamilyOption}\IndexCmd{FamilyOptions} abgeschlossen
-sind. Genau das ist mit Hilfe von \Macro{AtEndOfFamilyOptions} und der
-zugehörigen Sternvariante\ChangedAt{v3.23}{\Package{scrbase}} möglich. Die
-Rückmeldung von Fehlerzuständen ist über die Anweisungen jedoch ebenso wenig
-möglich wie die Verwendung der Anweisungen außerhalb der Ausführung von
-Optionen.
-
-Die beiden Varianten unterscheiden sich im Falle von verschachtelt definierten
-Optionen, wenn also die Ausführung einer Option den Aufruf einer oder mehrerer
-anderer Optionen bedingt. In diesem Fall werden alle per
-\Macro{AtEndOfFamilyOptions} festgelegten Aktionen ausgeführt, sobald der
-innerste Optionenaufruf endet. Dagegen werden die per
-\Macro{AtEndOfFamilyOptions*} festgelegten Aktionen erst mit dem Ende des
-äußersten Optionenaufrufs ausgeführt. Die Reihenfolge\textnote{Achtung!} der
-Aktionen ist dabei jedoch ausdrücklich unbestimmt! Weder ist sichergestellt,
-dass zuerst angeforderte Aktionen auch zuerst ausgeführt werden, noch die
-umgekehrte Reihenfolge.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyBoolKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Schaltername}
- \Macro{FamilySetBool}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Schaltername}
- \Parameter{Wert}
-\end{Declaration}
-In den vorherigen Beispielen wurden schon mehrfach Schalter gesetzt. Im
-Beispiel der Option \Option{Aufschnitt} war es dabei notwendig, dass der
-Anwender als Wert \PValue{true} oder \PValue{false} angibt. Es existierte
-keine Fehlerbehandlung, falls der Anwender einen falschen Wert verwendet. Da
-solche booleschen Schalter ein häufiger Anwendungsfall sind, kann man sie bei
-\Package{scrbase} einfach mit \Macro{FamilyBoolKey} definieren. Dabei sind die
-Argumente \PName{Mitglied}, \PName{Familie} und \PName{Schlüssel} die gleichen
-wie bei \DescRef{\LabelBase.cmd.DefineFamilyKey} (siehe
-\DescPageRef{scrbase.cmd.DefineFamilyKey}). Das Argument \PName{Schaltername}
-ist der Name eines Schalter ohne den Präfix \Macro{if}. Existiert dieser
-Schalter noch nicht, so wird er automatisch definiert und mit \PName{false}
-voreingestellt. Intern verwendet \Macro{FamilyBoolKey} dann
-\Macro{FamilySetBool} als \PName{Aktion} für
-\DescRef{\LabelBase.cmd.DefineFamilyKey}. Der Säumniswert für eine solche
-Option ist immer \PValue{true}.
-
-\Macro{FamilySetBool} wiederum versteht als \PName{Wert} neben \PValue{true}
-auch die Werte \PValue{on} und \PValue{yes} zum Einschalten und neben
-\PValue{false} auch die Werte \PValue{off} und \PValue{no} zum
-Ausschalten. Wird ein unbekannter Wert übergeben, so wird die auf
-\DescPageRef{\LabelBase.cmd.FamilyUnknownKeyValue} erklärte Anweisung
-\DescRef{\LabelBase.cmd.FamilyUnknownKeyValue} aufgerufen und so
-\DescRef{\LabelBase.cmd.FamilyKeyState} (siehe
-\DescPageRef{\LabelBase.cmd.FamilyKeyState}) entsprechend gesetzt. Dadurch
-kann dann gegebenenfalls eine Meldung über eine unbekannte Wertzuweisung
-ausgegeben werden.%
-\begin{Example}
- Der Schlüssel \Option{Aufschnitt} soll in den Wurstpaketen etwas robuster
- definiert werden, so dass Fehleingaben erkannt und behandelt
- werden. Außerdem sollen alle Wurstpakete denselben Schalter
- verwenden, so dass entweder alle Wurstpakete Aufschnitt produzieren oder
- keines.
-\begin{lstcode}
- \FamilyBoolKey{Fleischermeister}{Aufschnitt}%
- {@Aufschnitt}
-\end{lstcode}
- Ein Test, ob Aufschnitt produziert wird, sähe dann so aus:
-\begin{lstcode}
- \if@Aufschnitt
- ...
- \else
- ...
- \fi
-\end{lstcode}
- Dies wäre in allen drei Wurstpaketen identisch. Damit könnte man
- prinzipiell die Eigenschaft »Aufschnitt« auch als Eigenschaft der Familie
- definieren:
-\begin{lstcode}[moretexcs={define@key}]
- \@ifundefined{if@Aufschnitt}{%
- \expandafter\newif
- \csname if@Aufschnitt\endcsname
- }{}%
- \DefineFamilyKey[]{Fleischermeister}%
- {Aufschnitt}[true]{%
- \FamilySetBool{Fleischermeister}%
- {Aufschnitt}%
- {@Aufschnitt}%
- {#1}%
- }
-\end{lstcode}
- oder einfacher
-\begin{lstcode}
- \FamilyBoolKey[]{Fleischermeister}%
- {Aufschnitt}%
- {@Aufschnitt}
-\end{lstcode}
- unter Ausnutzung des Hinweises bezüglich leerer Mitglieder
- \iftrue% Umbruchkorrekturtext
- im Gegensatz zum Weglassen des optionalen Arguments
- \fi%
- auf \autopageref{explain:scrbase.macro.DefineFamilyKey}, der nicht nur für
- \DescRef{\LabelBase.cmd.DefineFamilyKey}, sondern entsprechend auch für
- \Macro{FamilyBoolKey} gilt.
-
- Da \DescRef{\LabelBase.cmd.FamilyKeyState} bereits von \Macro{FamilySetBool}
- gesetzt wird, kann innerhalb der Definition der Option mit Hilfe von
- \DescRef{\LabelBase.cmd.DefineFamilyKey} der Status gegebenenfalls auch
- abgefragt werden. So könnte man im ersten Fall beispielsweise nach
- \Macro{FamilySetBool} einen Test der Art:
-\begin{lstcode}
- \ifx\FamilyKeyState\FamilyKeyStateProcessed
- ...
- \else
- ...
- \fi
-\end{lstcode}
- ergänzen, um zusätzliche Aktionen in Abhängigkeit davon, ob
- \Macro{FamilySetBool} erfolgreich war oder nicht,
- auszuführen. Es\textnote{Achtung!} ist zu beachten, dass an dieser Stelle
- unbedingt ein Test mit Hilfe von \Macro{ifx} vorzunehmen ist. Expandierende
- Tests wie \DescRef{\LabelBase.cmd.Ifstr} sind hier zu vermeiden. Sie können
- abhängig vom aktuellen Status und dem Vergleichszustand zu unterschiedlichen
- Fehlermeldungen und auch zu falschen Ergebnissen führen.%
-\end{Example}%
-\EndIndexGroup
-\ExampleEndFix
-
-
-\begin{Declaration}
- \Macro{FamilyInverseBoolKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Schaltername}
- \Macro{FamilySetInverseBool}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Schaltername}
- \Parameter{Wert}
-\end{Declaration}%
-Diese\ChangedAt{v3.27}{\Package{scrbase}} beiden Anweisungen unterscheiden
-sich von \DescRef{\LabelBase.cmd.FamilyBoolKey} beziehungsweise
-\DescRef{\LabelBase.cmd.FamilySetBool} nur dadurch, dass die Logik invertiert
-wird. Das heißt, dass die Werte \PValue{true}, \PValue{yes} und \PValue{on}
-den durch \PName{Schaltername} angegebenen Schalter auf \Macro{iffalse} setzen
-und damit deaktivieren, während \PValue{false}, \PValue{no} und \PValue{off}
-ihn zu \Macro{iftrue} werden lassen, also aktivieren.%
-\EndIndexGroup
-
-\begin{Declaration}
- \Macro{FamilyNumericalKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Makroname}%
- \Parameter{Werteliste}
- \Macro{FamilySetNumerical}\Parameter{Familie}\Parameter{Schlüssel}
- \Parameter{Makroname}\Parameter{Werteliste}%
- \Parameter{Wert}
-\end{Declaration}
-Während Schalter nur zwei Werte annehmen können, gibt es auch Schlüssel, die
-mehrere Werte kennen. So kann beispielsweise eine Ausrichtung nicht nur
-entweder links oder nicht links, sondern auch links, mittig oder rechts
-sein. Intern unterscheidet man solche Einstellungen dann gerne mit Hilfe von
-\Macro{ifcase}\IndexCmd{ifcase}. Diese \TeX-Anweisung erwartet wiederum einen
-numerischen Wert. Daher heißt bei \Package{scrbase} die Anweisung, mit der
-man via \PName{Schlüssel} einem Makro eine Definition zuweisen kann,
-entsprechend \Macro{FamilyNumericalKey}.
-
-Die \PName{Werteliste} hat dabei die Form:
-%\begin{flushleft}\vskip\dp\strutbox\begin{tabular}{l}
- \Parameter{Wert}\Parameter{Definition}\texttt{,}\linebreak[1]%
- \Parameter{Wert}\Parameter{Definition}~\dots{}
-%\end{tabular}\vskip\dp\strutbox\end{flushleft}
-Über diese \PName{Werteliste} werden so nicht nur die erlaubten Werte für den
-\PName{Schlüssel} angegeben. Für jeden erlaubten \PName{Wert} wird auch
-gleich angegeben, wie bei Verwendung desselben das Makro
-\Macro{\PName{Makroname}} definiert werden soll. Üblicherweise werden als
-\PName{Definition} schlicht Zahlenwerte angegeben. Es sind zwar auch andere
-Angaben möglich, derzeit gibt es aber die Einschränkung, dass
-\PName{Definition} voll expandierbar sein muss und bei der Zuweisung auch
-expandiert wird.
-\begin{Example}
- Die Wurst für den Wurstsalat kann unterschiedlich geschnitten werden. So
- wäre es denkbar, dass der Aufschnitt einfach ungeschnitten bleibt oder in
- grobe oder feine Streifen geschnitten werden soll. Diese Information soll in
- der Anweisung \Macro{Schnitt} gespeichert werden.
-\begin{lstcode}
- \FamilyNumericalKey{Fleischermeister}%
- {SalatSchnitt}{Schnitt}{%
- {Kein}{Kein},{Nein}{Kein},%
- {Grob}{Grob},%
- {Fein}{Fein}%
- }
-\end{lstcode}
- Dass nicht geschnitten werden soll, kann in diesem Fall vom Anwender sowohl
- mit
-\begin{lstcode}
- \FamilyOptions{Fleischermeister}{SalatSchnitt=Kein}
-\end{lstcode}
- als auch mit
-\begin{lstcode}
- \FamilyOptions{Fleischermeister}{SalatSchnitt=Nein}
-\end{lstcode}
- angegeben werden. In beiden Fällen würde \Macro{Schnitt} mit dem Inhalt
- \PValue{Kein} definiert. Es kann durchaus sinnvoll sein, dem Anwender wie in
- diesem Beispiel mehrere Werte für denselben Zweck anzubieten.
-
- Nun ist es sehr wahrscheinlich, dass die Schnittart nicht ausgegeben,
- sondern später ausgewertet werden soll. In diesem Fall sind die textuellen
- Definitionen aber eher unpraktisch. Definiert man den Schlüssel hingegen als
-\begin{lstcode}
- \FamilyNumericalKey{Fleischermeister}%
- {SalatSchnitt}{Schnitt}{%
- {Kein}{0},{Nein}{0},%
- {Grob}{1},%
- {Fein}{2}%
- }
-\end{lstcode}
- so kann später einfach in der Form
-\begin{lstcode}
- \ifcase\Schnitt
- % ungeschnitten
- \or
- % grob geschnitten
- \else
- % fein geschnitten
- \fi
-\end{lstcode}
- unterschieden werden.
-\end{Example}
-
-Intern wird von \Macro{FamilyNumericalKey} dann
-\DescRef{\LabelBase.cmd.DefineFamilyKey} mit der Anweisung
-\Macro{FamilySetNumerical} verwendet. Wird an einen solchen Schlüssel ein
-unbekannter Wert übergeben, so wird von \Macro{FamilySetNumerical} Anweisung
-\DescRef{\LabelBase.cmd.FamilyUnknownKeyValue} (siehe
-\DescPageRef{\LabelBase.cmd.FamilyUnknownKeyValue}) aufgerufen. Dies führt zu
-einer Fehlersignalisierung, indem \DescRef{\LabelBase.cmd.FamilyKeyState} den
-Status \DescRef{\LabelBase.cmd.FamilyKeyStateUnknownValue} annimmt (siehe
-\DescPageRef{\LabelBase.cmd.FamilyKeyStateUnknownValue}). Daraus resultiert
-beispielsweise bei der Verwendung als lokale Option dann eine
-Fehlermeldung. Ebenso wird beim Aufruf von \Macro{FamilySetNumerical} auch der
-Erfolg via \DescRef{\LabelBase.cmd.FamilyKeyStateProcessed} in
-\DescRef{\LabelBase.cmd.FamilyKeyState} signalisiert.%
-%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyCounterKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{\LaTeX-Zähler}
- \Macro{FamilySetCounter}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{\LaTeX-Zähler}
- \Parameter{Wert}
-\end{Declaration}
-Während\ChangedAt{v3.12}{\Package{scrbase}} bei
-\DescRef{\LabelBase.cmd.FamilyNumericalKey} ein Makro aufgrund eines
-symbolischen Wertes auf einen korrespondierenden numerischen Wert
-gesetzt wurde, gibt es natürlich auch Fälle, in denen ein \PName{Schlüssel}
-direkt einen \PName{\LaTeX-Zähler} repräsentiert, dem unmittelbar ein
-numerischer \PName{Wert} zugewiesen werden soll. Dazu dient die Anweisung
-\Macro{FamilyCounterKey}, von der intern dann \Macro{FamilySetCounter}
-aufgerufen wird. Dabei finden einige grundlegende Prüfungen des
-\PName{Wert}-Arguments statt um festzustellen, ob dieses Argument für eine
-Zuweisung an einen Zähler in Frage kommt. Die Zuweisung findet nur statt, wenn
-diese Prüfungen gelingen. Allerdings können hier nicht alle Fehler erkannt
-werden, so dass eine falsche Zuweisung auch zu einer Fehlermeldung von \TeX{}
-selbst führen kann. Erkannte Fehler werden hingegen über
-\DescRef{\LabelBase.cmd.FamilyKeyStateUnknownValue} signalisiert.
-
-Wurde\ChangedAt{v3.15}{\Package{scrbase}} kein Wert übergeben, so wird
-stattdessen der \PName{Säumniswert} eingesetzt. Falls kein \PName{Säumniswert}
-angegeben wird, kann später der \PName{Schlüssel} nur mit Wertübergabe
-verwendet werden.%
-\iffalse% Umbruchkorrekturtext
-\ Anderenfalls wir mit
-\DescRef{\LabelBase.cmd.FamilyKeyStateNeedValue} ein entsprechender Fehler
-signalisiert und beispielsweise innerhalb \Macro{FamilyOptions} auch als
-solcher gemeldet.%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyCounterMacroKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Makro}
- \Macro{FamilySetCounterMacro}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Makro}
- \Parameter{Wert}
-\end{Declaration}
-Diese\ChangedAt{v3.12}{\Package{scrbase}} beiden Anweisungen unterscheiden
-sich von den zuvor erklärten \DescRef{\LabelBase.cmd.FamilyCounterKey} und
-\DescRef{\LabelBase.cmd.FamilySetCounter} nur dadurch, dass nicht ein
-\LaTeX-Zähler auf einen Wert gesetzt wird, sondern ein \PName{Makro} mit
-diesem Wert definiert wird. Auch dabei wird \PName{Wert} lokal einem Zähler
-zugewiesen und dann dessen expandierter Wert verwendet. Es gilt daher der Wert
-zum Zeitpunkt des Aufrufs der Option.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyLengthKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Länge}
- \Macro{FamilySetLength}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Länge}
- \Parameter{Wert}
- \Macro{FamilyLengthMacroKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Makro}
- \Macro{FamilySetLengthMacro}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Makro}
- \Parameter{Wert}
- \Macro{FamilyUseLengthMacroKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Makro}
- \Macro{FamilySetUseLengthMacro}\Parameter{Familie}
- \Parameter{Schlüssel}\Parameter{Makro}
- \Parameter{Wert}
-\end{Declaration}
-Über\ChangedAt{v3.12}{\Package{scrbase}} \Macro{FamilyLengthKey} kann ein
-\PName{Schlüssel} definiert werden, der eine \PName{Länge}
-repräsentiert. Dabei spielt es keine Rolle, ob eine \LaTeX-Länge, ein
-\TeX-Abstand oder eine \TeX-Ausdehnung als \PName{Länge} verwendet
-wird. Intern wird die \PName{Länge} über \Macro{FamilySetLength} gesetzt.
-Dabei finden einige grundlegende Prüfungen des \PName{Wert}-Arguments statt um
-festzustellen, ob dieses Argument für eine Zuweisung an eine \PName{Länge} in
-Frage kommt. Die Zuweisung findet nur statt, wenn diese Prüfungen
-gelingen. Allerdings können hier nicht alle Fehler erkannt werden, so dass
-eine falsche Zuweisung auch zu einer Fehlermeldung von \TeX{} selbst führen
-kann. Erkannte Fehler werden hingegen über
-\DescRef{\LabelBase.cmd.FamilyKeyStateUnknownValue} signalisiert.
-
-Wurde\ChangedAt{v3.15}{\Package{scrbase}} kein Wert übergeben, so wird
-stattdessen der \PName{Säumniswert} eingesetzt. Falls kein \PName{Säumniswert}
-angegeben wird, kann später der \PName{Schlüssel} nur mit Wertübergabe
-verwendet werden.
-
-\Macro{FamilyLengthMacroKey} und \Macro{FamilySetLengthMacroKey} sowie
-\Macro{FamilyUseLengthMacro} und \Macro{FamilySetUseLengthMacro} verwenden für
-die Speicherung des Wertes keine \PName{Länge}, sondern ein \PName{Makro}. Bei
-\Macro{FamilyLengthMacroKey} und \Macro{FamilySetLengthMacro} wird wie im
-Falle einer \PName{Länge} der aktuelle \PName{Wert} zum Zeitpunkt der
-Verwendung des Schlüssels beziehungsweise der Anweisung in \PName{Makro}
-gespeichert. Dagegen wird bei
-\Macro{FamilyUseLengthMacroKey}\ChangedAt{v3.20}{\Package{scrbase}} und
-\Macro{FamilySetUseLengthMacro} \PName{Wert} selbst gespeichert. Damit wird
-\PName{Wert} dann bei jeder Verwendung von \PName{Makro} neu ausgewertet.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyStringKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Makro}
- \Macro{FamilyCSKey}\OParameter{Mitglied}\Parameter{Familie}
- \Parameter{Schlüssel}
- \OParameter{Säumniswert}\Parameter{Makroname}
-\end{Declaration}
-Hier wird nun\ChangedAt{v3.08}{\Package{scrbase}} ein Schlüssel definiert, der
-jeden beliebigen Wert annehmen kann. Der Wert wird in dem angegebenen
-\PName{Makro} gespeichert. Wird das optionale Argument für den
-\PName{Säumniswert} weggelassen, so entspricht \Macro{FamilyStringKey}:
-\begin{lstcode}[escapeinside=><]
- \DefineFamilyKey[>\PName{Mitglied}<]{>\PName{Familie}<}{>\PName{Schlüssel}<}
- {\def>\PName{Makro}<{#1}}
-\end{lstcode}
-Existiert
-das optionale Argument für den \PName{Säumniswert} so entspricht die Anweisung:
-\begin{lstcode}[escapeinside=><]
- \DefineFamilyKey[>\PName{Mitglied}<]{>\PName{Familie}<}{>\PName{Schlüssel}<}
- [>\PName{Säumniswert}<]
- {\def>\PName{Makro}<{#1}\FamilyKeyStateProcessed}
-\end{lstcode}
-
-\begin{Example}
- In der Voreinstellung sollen 250\,g Wurstsalat erzeugt werden. Die Menge
- soll jedoch einfach per Option geändert werden können. Dazu wird die zu
- erstellende Menge im Makro \Macro{Salatgewicht} gespeichert. Die Option,
- über die das Gewicht geändert werden kann, soll \iffalse ebenfalls \fi
- \PValue{Salatgewicht} heißen:
-\begin{lstcode}
- \newcommand*{\Salatgewicht}{250g}
- \FamilyStringKey{Fleischermeister}%
- {Salatgewicht}[250g]%
- {\Salatgewicht}
-\end{lstcode}
- Soll nach einer Änderung
- \iftrue% Umbruchkorrekturtext
- wie
-\begin{lstcode}
- \FamilyOptions{Fleichermeister}{Salatgewicht=100g}
-\end{lstcode}
- \fi%
- wieder die Standardmenge hergestellt
- werden, so kann der Anwender die Option einfach ohne Gewichtsangabe
- aufrufen:
-\begin{lstcode}
- \FamilyOptions{Fleischermeister}{Salatgewicht}
-\end{lstcode}
- Das ist möglich, weil die Standardmenge bei der Definition auch als
- Säumniswert angegeben wurde.
-\end{Example}
-Da alle Werte unmittelbar für eine Makrodefinition verwendet werden, gibt es
-keine unbekannten Werte. In der Wertzuweisung an den \PName{Schlüssel} dürfen
-jedoch keine Absätze enthalten sein.
-
-Im\ChangedAt{v3.25}{\Package{scrbase}} Unterschied zu \Macro{FamilyStringKey}
-erwartet \Macro{FamilyCSKey} kein Makro als letztes Argument, sondern
-lediglich den Namen eines Makros, also beispielsweise nicht
-\PParameter{\Macro{Salatgewicht}}, sondern \PParameter{Salatgewicht}.%
-%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{FamilyUnknownKeyValue}\Parameter{Familie}\Parameter{Schlüssel}
- \Parameter{Wert}\Parameter{Werteliste}
-\end{Declaration}
-Diese Anweisung signalisiert über \DescRef{\LabelBase.cmd.FamilyKeyState}
-einen Fehler aufgrund eines unbekannten oder unerlaubten Wertes. Dabei wird
-als \PName{Werteliste} eine durch Komma separierte Liste von erlaubten Werten
-der Form:
-%\begin{flushleft}\vskip\dp\strutbox\begin{tabular}{l}
- `\PName{Wert}'\texttt{,} `\PName{Wert}' \dots{}
-%\end{tabular}\vskip\dp\strutbox\end{flushleft}
-erwartet. Allerdings\ChangedAt{v3.12}{\Package{scrbase}} wird die
-\PName{Werteliste} derzeit nicht ausgewertet.
-
-\begin{Example}
- Für den Aufschnitt soll nun zusätzlich wählbar sein, ob er grob oder
- fein geschnitten werden soll. Dabei ist grob die Voreinstellung, die auch
- dann verwendet werden soll, wenn nicht angegeben wird, wie der Aufschnitt zu
- schneiden ist.
-\begin{lstcode}
- \@ifundefined{if@Feinschnitt}{%
- \expandafter
- \newif\csname if@Feinschnitt\endcsname}{}%
- \@ifundefined{if@Aufschnitt}{%
- \expandafter
- \newif\csname if@Aufschnitt\endcsname}{}
- \DefineFamilyKey{Fleischermeister}%
- {Aufschnitt}[true]{%
- \FamilySetBool{Fleischermeister}{Aufschnitt}%
- {@Aufschnitt}%
- {#1}%
- \ifx\FamilyKeyState\FamilyKeyStateProcessed
- \@Feinschnittfalse
- \else
- \Ifstr{#1}{fein}{%
- \@Aufschnitttrue
- \@Feinschnittrue
- \FamilyKeyStateProcessed
- }{%
- \FamilyUnknownKeyValue{Fleichermeister}%
- {Aufschnitt}%
- {#1}{%
- `true', `on', `yes',
- `false`, `off`, `no',
- `fein'%
- }%
- }%
- \fi
- }%
-\end{lstcode}
- Zunächst wird versucht, den booleschen Schalter für Aufschnitt über
- \DescRef{\LabelBase.cmd.FamilySetBool} zu setzen. Gelingt dies, wurde also
- \DescRef{\LabelBase.cmd.FamilyKeyState} zu
- \DescRef{\LabelBase.cmd.FamilyKeyStateProcessed} definiert, wird
- der Feinschnitt abgeschaltet. Anderenfalls wird überprüft, ob anstelle
- eines gültigen Wertes für einen booleschen Schalter %der Wert
- \PValue{fein} übergeben wurde. In diesem Fall wird sowohl der Feinschnitt,
- als auch Aufschnitt aktiviert und mit Hilfe von
- \DescRef{\LabelBase.cmd.FamilyKeyStateProcessed} der Erfolgs-Status
- gesetzt. Ist auch das nicht der Fall, wird der von
- \DescRef{\LabelBase.cmd.FamilySetBool} signalisierte Fehler-Zustand
- neu auf \DescRef{\LabelBase.cmd.FamilyKeyStateUnknownValue} gesetzt. Die
- Liste der üblichen erlaubten Werte von
- \DescRef{\LabelBase.cmd.FamilySetBool} wird dabei um \PValue{fein}
- ergänzt. Da diese Liste jedoch inzwischen nicht mehr verwendet wird, hätte
- man auf den Aufruf von \Macro{FamilyUnknownKeyValue} im Beispiel auch
- einfach verzichten und damit den Fehlerstatus von
- \DescRef{\LabelBase.cmd.FamilySetBool} übernehmen können.
-
- Die bei den Tests verwendete Anweisung
- \DescRef{\LabelBase.cmd.Ifstr}\IndexCmd{Ifstr} ist auf
- \DescPageRef{scrbase.cmd.Ifstr} in \autoref{sec:scrbase.if} erklärt.
-\end{Example}
-%
-\EndIndexGroup
-\ExampleEndFix
-
-
-\section{Verzweigungen}
-\seclabel{if}
-
-Das Paket \Package{scrbase} stellt diverse Verzweigungsanweisungen zur
-Verfügung. Dabei wird überwiegend die \LaTeX-Syntax mit Argumenten eingesetzt,
-die man von Anweisungen wie \Macro{IfFileExists}\iffalse % Umbruchkorrektur
-, \Macro{@ifundefined}, \Macro{@ifpackageloaded} und vielen weiteren\fi %
-\ kennt.
-
-\begin{Declaration}
- \Macro{Ifundefinedorrelax}
- \Parameter{Name}\Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Diese\ChangedAt{v3.28}{\Package{scrbase}} Anweisung funktioniert
-prinzipiell wie \Macro{@ifundefined} aus dem \LaTeX-Kern (siehe
-\cite{latex:source2e}). Es wird also der \PName{Dann-Teil} ausgeführt, wenn
-\PName{Name} der Name einer undefinierten Anweisung oder \Macro{\PName{Name}}
-derzeit \Macro{relax} ist. Im Unterschied zu \Macro{@ifundefined} wird auch
-bei älteren \LaTeX-Versionen %
-\iftrue% Umbruchvarianten
-weder Hash-Speicher belegt noch \Macro{\PName{Name}} %
-\else%
-\Macro{\PName{Name}} nicht %
-\fi%
-zu \Macro{relax}, wenn \Macro{\PName{Name}} zuvor undefiniert
-war.
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifnotundefined}\Parameter{Name}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Ist\ChangedAt{v3.28}{\Package{scrbase}} die Anweisung mit dem angegebenen
-Namen bereits definiert wird der \PName{Dann-Teil} ausgeführt, anderenfalls
-der \PName{Sonst-Teil}.\iftrue % Umbruchkorrektur
-\ Da es bereits ein Paket mit einer inkompatiblen
-Anweisung \Macro{Ifdefined} gibt, musste leider diese etwas unhandliche
-Bezeichnung gewählt werden.%
-\iffalse%
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifstr}\Parameter{Zeichenfolge}\Parameter{Zeichenfolge}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Die\ChangedAt{v3.28}{\Package{scrbase}} beiden Argumente \PName{Zeichenfolge}
-werden expandiert und dann verglichen. Sind sie gleich, so wird der
-\PName{Dann-Teil} ausgeführt, anderenfalls der \PName{Sonst-Teil}.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifstrstart}\Parameter{Zeichenfolge}\Parameter{Zeichenfolge}
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Die\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-beiden Argumente \PName{Zeichenfolge} werden expandiert und dann
-verglichen. Beginnt die erste Zeichenfolge, von Leerzeichen abgesehen, mit der
-zweiten Zeichenfolge, so wird der \PName{Dann-Teil} ausgeführt, anderenfalls
-der \PName{Sonst-Teil}.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{IfArgIsEmpty}\Parameter{Argument}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Ist\ChangedAt{v3.19}{\Package{scrbase}} das \PName{Argument} leer, so wird der
-\PName{Dann-Teil} ausgeführt, anderenfalls der \PName{Sonst-Teil}. Bereits ein
-Leerzeichen gilt als nicht leer. Da das \PName{Argument} nicht expandiert
-wird, gelten Makros, die zu einem leeren Ergebnis expandieren, ebenfalls als
-nicht leeres \PName{Argument}. Dasselbe gilt für \Macro{relax} oder nicht
-definierte Makros.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifpdfoutput}
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wird\ChangedAt{v3.28}{\Package{scrbase}} eine PDF-Datei erzeugt, wird der
-\PName{Dann-Teil} ausgeführt, anderenfalls der \PName{Sonst-Teil}. Dabei ist
-es unerheblich, ob die PDF-Datei mit Hilfe von lua\TeX{}, pdf\TeX{}, V\TeX{}
-oder \XeTeX{} erzeugt wird.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifpsoutput}
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wird\ChangedAt{v3.28}{\Package{scrbase}} eine PostScript-Datei erzeugt, wird
-der \PName{Dann-Teil} ausgeführt, anderenfalls der \PName{Sonst-Teil}. V\TeX{}
-kann PostScript direkt erzeugen, was hier erkannt wird. Wird hingegen kein
-V\TeX{} verwendet, ist aber ein Schalter \Macro{if@dvips} definiert, so wird
-die Entscheidung darüber getroffen. \KOMAScript{} stellt \Macro{if@dvips} in
-\hyperref[cha:typearea]{\Package{typearea}}\IndexPackage{typearea}%
-\IndexCmd{if@dvips} bereit.%
-\EndIndexGroup
-
-
-\begin{Declaration}[0]
- \Macro{Ifdvioutput}
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wird \ChangedAt{v3.28}{\Package{scrbase}}eine DVI-Datei erzeugt, so wird der
-\PName{Dann-Teil} ausgeführt, anderenfalls der \PName{Sonst-Teil}. Es wird
-immer dann davon \iffree{}{\pagebreak}% Umbruchkorrektur
-ausgegangen, dass eine DVI-Datei erzeugt wird, wenn keine
-direkte Ausgabe einer PDF- oder Postscript-Datei erkannt werden kann.%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisdimen}\Parameter{Code}\Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in einem \Macro{dimen}, also einem
-\TeX-Längenregister, resultiert, wird der \PName{Dann-Teil} ausgeführt,
-anderenfalls der \PName{Sonst-Teil}. Die Anweisung ist nicht voll
-expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisdimension}\Parameter{Code}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in etwas resultiert, das syntaktisch dem Wert
-einer Länge entspricht, wird der \PName{Dann-Teil} ausgeführt, anderenfalls
-der \PName{Sonst-Teil}. Es ist zu beachten,\textnote{Achtung!} dass derzeit
-unbekannte Einheiten zu einer Fehlermeldung führen. Die Anweisung ist nicht
-voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifdimen}\Parameter{Zeichenfolge}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Der\ChangedAt{v3.28}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-\PName{Dann-Teil} wird ausgeführt, wenn die einfache Expansion der
-\PName{Zeichenfolge} eine gültige Länge mit einer gültigen Längeneinheit
-ergibt. Anderenfalls wird der \PName{Sonst-Teil} verwendet.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisdimexpr}\Parameter{Code}
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in einer \Macro{dimexpr}\IndexCmd{dimexpr},
-also einem \eTeX-Längenausdruck resultiert, wird der \PName{Dann-Teil}
-ausgeführt, anderenfalls der \PName{Sonst-Teil}. Es ist zu
-beachten,\textnote{Achtung!} dass fehlerhafte Ausdrücke zu Fehlermeldungen
-führen. Die Anweisung ist nicht voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisskip}\Parameter{Code}\Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in einem \Macro{skip}, also einem \TeX-Abstand,
-resultiert, wird der \PName{Dann-Teil} ausgeführt, anderenfalls der
-\PName{Sonst-Teil}. Die Anweisung ist nicht voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisglue}\Parameter{Code}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in etwas resultiert, das syntaktisch dem Wert
-eines Abstandes entspricht, wird der \PName{Dann-Teil} ausgeführt,
-anderenfalls der \PName{Sonst-Teil}. Es ist zu beachten,\textnote{Achtung!}
-dass derzeit unbekannte Einheiten zu einer Fehlermeldung führen. Die Anweisung
-ist nicht voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\iffree{\begin{Declaration}}{\begin{Declaration}[0]}% Umbruchkorrektur
- \Macro{Ifisglueexpr}\Parameter{Code}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in einer \Macro{glueexpr}\IndexCmd{glueexpr},
-also einem \mbox{\eTeX}-Abstandsausdruck resultiert, wird der
-\PName{Dann-Teil} ausgeführt, \iffree{}{\pagebreak}% Umbruchkorrektur
-anderenfalls der \PName{Sonst-Teil}. Es ist zu beachten,\textnote{Achtung!}
-dass fehlerhafte Ausdrücke zu Fehlermeldungen führen. Die Anweisung ist nicht
-voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifiscounter}\Parameter{Zähler}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-\PName{Zähler} ein definierter \LaTeX-Zähler ist, wird der \PName{Dann-Teil}
-ausgeführt, anderenfalls der \PName{Sonst-Teil}. Die Anweisung ist nicht voll
-expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifiscount}\Parameter{Code}\Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in einem \Macro{count}, also einem \TeX-Zähler,
-resultiert, wird der \PName{Dann-Teil} ausgeführt, anderenfalls der
-\PName{Sonst-Teil}. Die Anweisung ist nicht voll expandierbar. Für einen Test
-auf einen \LaTeX-Zähler siehe \DescRef{\LabelBase.cmd.Ifiscounter}.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisinteger}\Parameter{Code}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in etwas resultiert, das syntaktisch dem Wert
-eines Zählers entspricht, also eine negative oder positive ganze Zahl ist,
-wird der \PName{Dann-Teil} ausgeführt, anderenfalls der
-\PName{Sonst-Teil}. Die Anweisung ist nicht voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifnumber}\Parameter{Zeichenfolge}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Der\ChangedAt{v3.28}{\Package{scrbase}} \PName{Dann-Teil} wird ausgeführt,
-wenn die einfache Expansion der \PName{Zeichenfolge} nur aus Ziffern
-besteht. In allen anderen Fällen wird der \PName{Sonst-Teil} verwendet.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{Ifisnumexpr}\Parameter{Code}%
- \Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Wenn\ChangedAt{v3.12}{\Package{scrbase}}\ChangedAt{v3.28}{\Package{scrbase}}
-die Expansion von \PName{Code} in einer \Macro{numexpr}\IndexCmd{numexpr},
-also einem \eTeX-Zahlenausdruck resultiert, wird der \PName{Dann-Teil}
-ausgeführt, anderenfalls der \PName{Sonst-Teil}. Es ist zu
-beachten,\textnote{Achtung!} dass fehlerhafte Ausdrücke zu Fehlermeldungen
-führen. Die Anweisung ist nicht voll expandierbar.%
-\iffalse% Umbruchkorrektur
-\iftrue% Umbruchvarianten
-\ Von dieser Anweisung gibt es keine interne Variante.%
-\else%
-\ Es gibt keine interne Variante.%
-\fi%
-\fi%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{IfActiveMkBoth}\Parameter{Dann-Teil}\Parameter{Sonst-Teil}
-\end{Declaration}
-Bei\ChangedAt{v3.27}{\Package{scrbase}} der Umschaltung zwischen automatischen
-und manuellen Kolumnentiteln, verwendet der \LaTeX-Kern die Anweisung
-\DescRef{scrlayer.cmd.@mkboth}\important{\Macro{@mkboth}}\IndexCmd{@mkboth}.
-Im Falle automatischer Kolumnentitel setzt diese normalerweise sowohl den
-linken als auch rechten Markenanteil. Im Falle manueller Kolumnentiteln setzt
-sie keine Marke. Will man wissen, ob \DescRef{scrlayer.cmd.@mkboth} Marken
-setzt oder nicht, so verwenden viele Pakete einen Vergleich entweder mit
-\DescRef{maincls.cmd.markboth}\IndexCmd{markboth} oder
-\Macro{@gobbletwo}. Dies deckt aber nicht alle Fälle von möglichen
-Umdefinierungen von \DescRef{scrlayer.cmd.@mkboth} ab. Daher testet
-\Macro{IfActiveMkBoth}, ob \DescRef{scrlayer.cmd.@mkboth} tatsächlich zum
-Setzen einer Marke führen würde und deckt dabei sogar die Verwendung von
-\Macro{marks} für die Definition von \DescRef{scrlayer.cmd.@mkboth} ab. Wird
-ein solches aktives \DescRef{scrlayer.cmd.@mkboth} entdeckt, so wird der
-\PName{Dann-Teil} ausgeführt. In allen anderen Fällen wird der
-\PName{Sonst-Teil} ausgeführt.%
-\begin{Example}
- Angenommen, Sie wollen in einem Paket im Fall der Verwendung automatischer
- Kolumnentitel, wie sie beispielsweise der Seitenstil
- \PageStyle{headings}\IndexPagestyle{headings} aktiviert, nur die rechte
- Marke setzen und die linke unverändert lassen, wohingegen bei Verwendung
- manueller Kolumentitel die Marken unverändert bleiben sollen. In einem
- ersten Ansatz verwenden Sie dafür:
-\begin{lstcode}
- \ifx\@mkboth\markboth \markright{Kolumnentitel}\fi
-\end{lstcode}
- Etwas später entdecken Sie, dass irgendein Paket nicht wie gewohnt
-\begin{lstcode}
- \let\@mkboth\markboth
-\end{lstcode}
- sondern
-\begin{lstcode}
- \renewcommand{\@mkboth}{\markboth}
-\end{lstcode}
- verwendet hat, um automatische Kolumnentitel zu aktivieren. Daher ruft Ihr
- Vergleich niemals die \DescRef{maincls.cmd.markright}-Anweisung auf. Daher
- ändern Sie den Vergleich oben zu
-\begin{lstcode}
- \ifx\@mkboth\@gobbletwo
- \else \markright{Kolumnentitel}\fi
-\end{lstcode}
- Leider wird nun \DescRef{maincls.cmd.markright} auch bei manuellen
- Kolumentiteln aufgerufen, weil irgend jemand für diesen Fall
-\begin{lstcode}
- \renewcommand{\@mkboth}[2]{%
- \typeout{DEBUG: ignoring running head setting}%
- }
-\end{lstcode}
- definiert hat.
-
- Beide Probleme sind jedoch mit Hilfe von \Package{scrbase} einfach zu lösen:
-\begin{lstcode}
- \IfActiveMkBoth{\markright{Kolumnentitel}}{}
-\end{lstcode}%
-\end{Example}
-Noch einfacher lässt sich das Problem aus dem Beispiel %
-\iffalse übrigens \fi % Umbruchkorrektur
-mit Hilfe von \DescRef{scrlayer.cmd.@mkright} aus Paket
-\hyperref[cha:scrlayer]{\Package{scrlayer}} lösen (siehe
-\autoref{sec:scrlayer.pagestyle.content},
-\DescPageRef{scrlayer.cmd.@mkright}).%
-\EndIndexGroup
-
-
-\begin{Declaration}[0]
- \Macro{if@atdocument}\ \PName{Dann-Teil}\ %
- \textMacro{else}\ \PName{Sonst-Teil} \textMacro{fi}
-\end{Declaration}
-\iftrue% Umbruchvarianten
-Diese Verzweigung in \TeX-Syntax existiert bewusst nur als interne
-Anweisung. In der Dokumentpräambel ist \Macro{if@atdocument}
-\Macro{iffalse}, nach \Macro{begin}\PParameter{document} entspricht
-\Macro{if@atdocument} dann \Macro{iftrue}. Klassen- und Paketautoren
-können dieses Anweisung manchmal sinnvoll nutzen, %
-\else%
-In der Dokumentpräambel enspricht \Macro{if@atdocument} \iftrue dem Schalter
-\fi \Macro{iffalse}, nach \Macro{begin}\PParameter{document} hingegen
-\Macro{iftrue}. Klassen- und Paketautoren können dieses Anweisung nutzen, %
-\fi%
-wenn sich Anweisungen in der Dokumentpräambel anders verhalten sollen als
-innerhalb des Dokuments. Es\textnote{Achtung!} ist zu beachten, dass es sich
-bei dieser Anweisung um eine Verzweigung in \TeX-Syntax und nicht in
-\LaTeX-Syntax handelt.%
-\EndIndexGroup
-
-
-\section{Definition sprachabhängiger Bezeichner}
-\seclabel{languageSupport}
-\BeginIndexGroup
-\BeginIndex{}{Sprachdefinition}
-
-\iffalse% Umbruchkorrektur
-Anfänger haben häufig Probleme damit, sprachabhängige Begriffe wie
-\Macro{listfigurename}\IndexCmd{listfigurename}, in der Voreinstellung meist
-»List of Figures« beziehungsweise in Deutsch: »Abbildungsverzeichnis«, zu
-ändern. Werden diese beispielsweise einfach mit \Macro{renewcommand} in der
-Dokumentpräambel umdefiniert, so überleben sie eine spätere Umschaltung der
-Sprache nicht. Bei Verwendung von \Package{babel}\IndexCmd{babel} wird die
-Umdefinierung in der Dokumentpräambel bereits von
-\Macro{begin}\PParameter{document} wieder überschrieben.
-\fi
-
-Normalerweise muss man zur Definition oder zur Änderung sprachabhängiger
-Begriffe Anweisungen wie \Macro{captionsngerman} so umdefinieren, dass
-zusätzlich zu den bisherigen Begriffen auch die neuen oder geänderten
-definiert werden. Erschwert wird dieses Vorhaben dadurch, dass beim Laden
-eines Pakets wie \Package{babel}\IndexPackage{babel} oder
-\Package{polyglossia}\IndexPackage{polyglossia} diese Anweisungen von den
-Paketen erneut definiert werden. Bei den genannten Paketen geschieht dies,
-indem alle zuvor gemachten Änderungen überschrieben werden. Aus diesem Grund
-ist es sinnvoll, eigene Änderungen bis nach dem Laden entsprechender Pakete
-oder mit Hilfe von \Macro{AtBeginDocument} bis
-\Macro{begin}\PParameter{document} zu verzögern.
-
-Darüber hinaus kommt erschwerend hinzu, dass einige Pakete zusätzliche,
-sprachabhängige Begriffe in \Macro{captions\PName{Sprache}} definieren,
-während andere dafür \Macro{extras\PName{Sprache}} verwenden. So muss der
-Anwender sich schon sehr genau auskennen, um die richtige Anweisung auf die
-richtige Weise zu ergänzen.
-
-Das Paket \Package{scrbase} bietet dem Anwender daher für die Definition und
-Änderung selbst einige zusätzliche Anweisungen, die ihn von vielen dieser
-Überlegungen befreit. Gleichzeitig erlauben die Befehle, die
-sprachabhängigen Begriffe mehrerer Dialekte oder Ausprägungen einer Sprache
-gleichzeitig zu definieren oder zu ändern.
-
-\begin{Declaration}
- \Macro{defcaptionname}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{providecaptionname}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{newcaptionname}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{renewcaptionname}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{defcaptionname*}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{providecaptionname*}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{newcaptionname*}
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
- \Macro{renewcaptionname*}%
- \Parameter{Sprachliste}\Parameter{Begriff}\Parameter{Inhalt}
-\end{Declaration}
-Mit Hilfe dieser Anweisungen ist es möglich, einem \PName{Begriff} in
-Abhängigkeit der Sprache einen \PName{Inhalt} zuzuweisen. Mehrere Sprachen
-können durch Komma voneinander getrennt als
-\PName{Sprachliste}\ChangedAt{v3.12}{\Package{scrbase}} angegeben werden.
-Der \PName{Begriff} ist immer ein Makro. Die Arbeitsweise der Anweisungen
-unterscheidet sich je nachdem, ob eine Sprache und ein \PName{Begriff}
-innerhalb der Sprache zum Zeitpunkt des Aufrufs bereits definiert ist.
-
-Ist eine Sprache nicht definiert, vermerkt \Macro{providecaptionname} das
-lediglich in \File{log}-Datei. Dabei wird für jede Sprache nur einmal eine
-entsprechende Information in die \File{log}-Datei geschrieben. Ist die Sprache
-definiert, enthält aber bisher keinen entsprechenden \PName{Begriff}, so wird
-er mit dem angegebenen \PName{Inhalt} definiert. Ist der \PName{Begriff}
-hingegen in der Sprache bereits definiert, so wird er nicht umdefiniert,
-sondern ebenfalls ein entsprechender Hinweis in die \File{log}-Datei
-geschrieben.
-
-Ist dagegen bei \Macro{newcaptionname}
-eine Sprache nicht definiert, dann wird diese neu definiert, indem eine
-entsprechende Anweisung definiert wird. Für die Sprache
-\PValue{ngerman} wäre das beispielsweise \Macro{captionsngerman}. Außerdem
-wird darüber auch in der \File{log}-Datei informiert. Ist die Sprache
-definiert, der \PName{Begriff} in dieser Sprache aber noch nicht
-vorhanden, so wird er mit dem gewünschten \PName{Inhalt} definiert. Ist der
-\PName{Begriff} in der Sprache bereits vorhanden, so wird eine
-Fehlermeldung ausgegeben.
-
-Ist bei Anweisung \Macro{renewcaptionname} eine Sprache nicht definiert, so
-wird eine Fehlermeldung ausgegeben. Ist die Sprache definiert, der
-\PName{Begriff} in dieser Sprache jedoch nicht, so wird ebenfalls eine
-Fehlermeldung ausgegeben. Ist der \PName{Begriff} in der Sprache definiert, so
-wird er auf den gewünschten \PName{Inhalt} umdefiniert.
-
-Die\ChangedAt{v3.12}{\Package{scrbase}} Anweisung \Macro{defcaptionname}
-definiert einen \PName{Begriff} immer, überschreibt also eventuell vorhandene
-Definitionen. Wie bei \Macro{providecaptionname} braucht eine angegebene
-Sprache nicht definiert zu sein.
-
-\KOMAScript{} selbst verwendet \Macro{providecaptionname} um beispielsweise
-die Begriffe aus \autoref{sec:scrlttr2-experts.languages},
-\DescPageRef{scrlttr2-experts.cmd.yourrefname} zu definieren.
-
-\begin{Example}
- Möchten Sie »Abb.« statt »Abbildung« in den Abbildungsunterschriften, so
- erreichen Sie dies mit:
-\begin{lstcode}
- \renewcaptionname{ngerman}{\figurename}{Abb.}
-\end{lstcode}
-
- Soll dieselbe Änderung nicht nur für \PValue{ngerman}, sondern
- auch für die Sprachen \PValue{naustrian} und \PValue{nswissgerman}, also für
- Österreichisch und Schweizer Deutsch gelten, so ist
- es nicht notwendig zwei weitere Anweisungen:
-\begin{lstcode}
- \renewcaptionname{naustrian}{\figurename}{Abb.}
- \renewcaptionname{nswissgerman}{\figurename}{Abb.}
-\end{lstcode}
- hinzuzufügen. Stattdessen kann einfach, die \PName{Sprachliste} erweitert
- werden:
-\begin{lstcode}
- \renewcaptionname{ngerman,naustrian,nswissgerman}%
- {\figurename}{Abb.}
-\end{lstcode}
- In gleicher Weise können auch \PValue{german}, \PValue{austrian} und
- \PValue{swissgerman}, also Deutsch, Österreichisch und Schweizer Deutsch
- nach der veralteten Rechtschreibung, hinzugefügt werden.
-\end{Example}
-\iffalse % Das ist 6 Jahre her und damit nicht mehr von Belang!
-\begin{Explain}
- Die Sprachen \PValue{swissgerman} und \PValue{nswissgerman} werden übrigens
- von älteren Versionen von \Package{babel} noch nicht unterstützt. Sie sind
- erst seit Dezember~2013 Bestandteil des deutschen Sprachpakets für
- \Package{babel}. Für die Anweisungen \Macro{defcaptionname},
- \Macro{newcaptionname} und \Macro{providecaptionname} spielt dies kaum eine
- Rolle, da diese auch Begriffe für nicht existierende Sprachen definieren
- können. Da mit \Macro{renewcaptionname} jedoch nur existierende Begriffe von
- existierenden Sprachen umdefiniert werden können, resultiert die
- Umdefinierung für \Option{nswissgerman} und \Option{swissgerman} bei
- Verwendung einer älteren Version von \Package{babel} in einer entsprechenden
- Fehlermeldung.
-\end{Explain}%
-\fi
-
-Es\ChangedAt{v3.12}{\Package{scrbase}} ist nicht erforderlich, die Definierung
-oder Umdefinierung via \Macro{AtBeginDocument} bis
-\Macro{begin}\PParameter{document} zu verzögern. Stattdessen erledigt
-\Package{scrbase} das selbst, falls die Anweisungen in der Dokumentpräambel
-aufgerufen werden. Außerdem prüft \Package{scrbase} auch, ob ein
-umzudefinierender Begriff statt in \Macro{captions\PName{Sprache}} in
-\Macro{extras\PName{Sprache}} zu definieren ist. Die Sternvarianten der
-Befehle verwenden grundsätzlich \Macro{extras\PName{Sprache}}, da dessen
-Definitionen in der Regel nach \Macro{captions\PName{Sprache}} Anwendung
-finden. Damit funktioniert auch das Umdefinieren von sprachabhängigen
-Bezeichnern von Paketen\iffalse\ wie \Package{hyperref}\fi, die dafür
-\Macro{extras\PName{Sprache}} verwenden.
-
-In \autoref{tab:scrbase.commonNames} ist ein Überblick über die üblicherweise
-von Klassen und Sprachpaketen definierten Begriffe und deren Verwendung zu
-finden.\iffree{}{ \KOMAScript{} selbst definiert noch einige weitere
- Begriffe. Siehe dazu \autoref{sec:scrlttr2-experts.languages} ab
- \DescPageRef{scrlttr2-experts.cmd.yourrefname}.}
-%
-%\iffree{}{\enlargethispage{4pt}}% Umbruchkorrektur
-\begin{desclist}
- \renewcommand*{\abovecaptionskipcorrection}{-\normalbaselineskip}%
- \desccaption[{%
- Überblick über übliche sprachabhängige Begriffe%
- }]{%
- Überblick über sprachabhängige Begriffe in den üblichen
- Sprachpaketen\label{tab:scrbase.commonNames}%
- }{%
- Überblick über übliche sprachabhängige Begriffe
- (\emph{Fortsetzung})%
- }%
- \entry{\Macro{abstractname}}{%
- Überschrift für die Zusammenfassung%
- \IndexCmd{abstractname}%
- }%
- \entry{\Macro{alsoname}}{%
- »siehe auch« bei ergänzenden Verweisen im Stichwortverzeichnis%
- \IndexCmd{alsoname}%
- }%
- \entry{\Macro{appendixname}}{%
- »Anhang« in der Kapitelüberschrift eines Anhangs%
- \IndexCmd{appendixname}%
- }%
- \entry{\Macro{bibname}}{%
- Überschrift für das Literaturverzeichnis%
- \IndexCmd{bibname}%
- }%
- \entry{\Macro{ccname}}{%
- Spitzmarke für den Verteiler in Briefen%
- \IndexCmd{ccname}%
- }%
- \entry{\Macro{chaptername}}{%
- »Kapitel« in der Kapitelüberschrift%
- \IndexCmd{chaptername}%
- }%
- \entry{\Macro{contentsname}}{%
- Überschrift für das Inhaltsverzeichnis%
- \IndexCmd{contentsname}%
- }%
- \entry{\Macro{enclname}}{%
- Spitzmarke für die Anlagen bei Briefen%
- \IndexCmd{enclname}%
- }%
- \entry{\Macro{figurename}}{%
- Spitzmarke in der Abbildungsunterschrift%
- \IndexCmd{figurename}%
- }%
- \entry{\Macro{glossaryname}}{%
- Überschrift für das Glossar%
- \IndexCmd{glossaryname}%
- }%
- \entry{\Macro{headtoname}}{%
- »An« im Briefkopf%
- \IndexCmd{headtoname}%
- }%
- \entry{\Macro{indexname}}{%
- Überschrift für das Stichwortverzeichnis%
- \IndexCmd{indexname}%
- }%
- \entry{\Macro{listfigurename}}{%
- Überschrift für das Abbildungsverzeichnis%
- \IndexCmd{listfigurename}%
- }%
- \entry{\Macro{listtablename}}{%
- Überschrift für das Tabellenverzeichnis%
- \IndexCmd{listtablename}%
- }%
- \entry{\Macro{pagename}}{%
- »Seite« in der Seitennummer von Briefen%
- \IndexCmd{pagename}%
- }%
- \entry{\Macro{partname}}{%
- »Teil« in der Teileüberschrift%
- \IndexCmd{partname}%
- }%
- \entry{\Macro{prefacename}}{%
- Überschrift für das Vorwort%
- \IndexCmd{prefacename}%
- }%
- \entry{\Macro{proofname}}{%
- Spitzmarke bei Beweisen%
- \IndexCmd{proofname}%
- }%
- \entry{\Macro{refname}}{%
- Überschrift für das Quellenverzeichnis%
- \IndexCmd{refname}%
- }%
- \entry{\Macro{seename}}{%
- »siehe« bei Verweisen im Stichwortverzeichnis%
- \IndexCmd{seename}%
- }%
- \entry{\Macro{tablename}}{%
- Spitzmarke in der Tabellenunter- bzw. "~überschrift%
- \IndexCmd{tablename}%
- }%
-\end{desclist}
-%
-\EndIndexGroup
-%
-\EndIndexGroup
-
-
-\section{Identifikation von \KOMAScript}
-\seclabel{identify}
-
-Obwohl -- oder gerade weil -- \Package{scrbase} ganz allgemein als Paket für
-Klassen- und Paketautoren konzipiert ist, wird es natürlich von den
-\KOMAScript-Klassen und den meisten \KOMAScript-Paketen verwendet. Es enthält
-daher auch eine Anweisung, die in allen \KOMAScript-Klassen und allen
-grundlegenden \KOMAScript-Paketen vorhanden ist.
-
-
-\begin{Declaration}
- \Macro{KOMAScriptVersion}
-\end{Declaration}
-Bei \KOMAScript{} ist in dieser Anweisung die Hauptversion von \KOMAScript{}
-in der Form »\PName{Datum} \PName{Version} \texttt{KOMA-Script}«
-abgelegt. Diese Hauptversion ist für alle \KOMAScript-Klassen und alle
-\KOMAScript-Pakete, die von den Klassen verwendet werden, gleich. Daher kann
-sie auch nach dem Laden von \Package{scrbase} abgefragt werden. Diese
-Anleitung wurde beispielsweise mit der \KOMAScript-Version
-»\KOMAScriptVersion« erstellt. Das Vorhandensein der Anweisung ist ein
-starkes Indiz dafür, dass zumindest ein \KOMAScript-Paket verwendet wird.%
-\EndIndexGroup
-
-
-\section{Erweiterungen des \LaTeX-Kerns}
-\seclabel{latexkernel}
-
-In einigen Fällen stellt der \LaTeX-Kern selbst Anweisungen zur Verfügung,
-lässt aber ganz ähnliche Anweisungen, die ebenfalls häufiger benötigt werden
-oder eigentlich nahe liegen, vermissen. Einige wenige solcher Anweisungen
-für Klassen- und Paketautoren stellt \Package{scrbase} zur Verfügung.
-
-\begin{Declaration}
- \Macro{ClassInfoNoLine}\Parameter{Klassenname}\Parameter{Information}
- \Macro{PackageInfoNoLine}\Parameter{Paketname}\Parameter{Information}
-\end{Declaration}%
-Der \LaTeX-Kern bietet dem Klassen- und Paketautor zwar Anweisungen wie
-\Macro{PackageInfo} und \Macro{ClassInfo}, um Informationen mit aktueller
-Zeilennummer in die Log-Datei zu schreiben. Er bietet neben
-\Macro{PackageWarning} und \Macro{ClassWarning}, die Warnungen mit aktueller
-Zeilennummer ausgeben, auch die beiden Anweisungen
-\Macro{PackageWarningNoLine} und \Macro{ClassWarningNoLine}, um Warnungen ohne
-Zeilennummer auszugeben. Die naheliegenden Anweisungen
-\Macro{ClassInfoNoLine} und \Macro{PackageInfoNoLine}, um auch Informationen
-ohne Zeilennummer in die Log-Datei zu schreiben, fehlen jedoch. Diese werden
-von \Package{scrbase} bereitgestellt.
-%
-\EndIndexGroup
-
-
-\begin{Declaration}
- \Macro{l@addto@macro}\Parameter{Anweisung}\Parameter{Erweiterung}%
-\end{Declaration}%
-Der \LaTeX-Kern bietet mit \Macro{g@addto@macro} eine interne Anweisung, um
-die Definition eines Makro \PName{Anweisung} global um den Code
-\PName{Erweiterung} zu erweitern. Das funktioniert in dieser Form nur für
-Makros ohne Argumente. Dennoch könnte man die Anweisung in einigen Fällen
-auch in einer Form benötigen, die lokal zur aktuellen Gruppe arbeitet. Diese
-wird mit \Macro{l@addto@macro} von \Package{scrbase} bereitgestellt. Eine
-Alternative stellt hier die Verwendung des Pakets
-\Package{etoolbox}\IndexPackage{etoolbox} oder
-\Package{xpatch}\IndexPackage{xpatch} dar, die eine ganze Reihe solcher
-Anweisungen für unterschiedliche Zwecke bieten (siehe
-\cite{package:etoolbox} oder \cite{package:xpatch}).
-%
-\EndIndexGroup
-
-
-\section{Erweiterungen der mathematischen Fähigkeiten von \eTeX}
-\seclabel{etex}
-
-Das für \LaTeX{} inzwischen verwendete und von \KOMAScript{} vorausgesetzte
-\eTeX{} besitzt mit \Macro{numexpr}\IndexCmd{numexpr} erweiterte Möglichkeiten
-zur Berechnung einfacher Ausdrücke mit \TeX-Zählern und ganzen Zahlen. Als
-Operationen werden dabei die vier Grundrechenarten und Klammern
-unterstützt. Bei der Division wird korrekt gerundet.
-\iffalse Manchmal sind weitere Operationen nützlich.\fi% Umbruchkorrektur
-
-\begin{Declaration}
- \Macro{XdivY}\Parameter{Dividend}\Parameter{Divisor}
- \Macro{XmodY}\Parameter{Dividend}\Parameter{Divisor}
-\end{Declaration}%
-\BeginIndex{Cmd}{XdivY}%
-\BeginIndex{Cmd}{XmodY}%
-Die\ChangedAt{v3.05a}{\Package{scrbase}} Anweisung \Macro{XdivY} liefert den
-Wert des ganzzahligen Quotienten, die Anweisung \Macro{XmodY} den Wert des
-Rests der Division mit Rest. Diese Art der Division ist nach der Gleichung
-\[
-\textit{Dividend} = \textit{Divisor} \cdot
-\textit{Quotient} + \textit{Rest}
-\]
-%
-definiert, wobei \textit{Dividend}, \textit{Divisor} und \textit{Rest} ganze
-Zahlen und \textit{Rest} außerdem größer oder gleich 0 und kleiner als
-\textit{Divisor} ist. Der \textit{Divisor} ist eine natürliche Zahl (ohne die
-0).
-
-Der Wert kann jeweils zur Zuweisung an einen Zähler oder direkt innerhalb
-eines Ausdrucks mit \Macro{numexpr}\IndexCmd{numexpr} verwendet werden. Zur
-Ausgabe als arabische Zahl ist \Macro{the} voranzustellen.%
-%
-\EndIndexGroup
-
-
-\section[{Mechanismus für mehrstufige Haken}]
-{Mechanismus für mehrstufige
- Haken\ChangedAt{v3.27}{\Package{scrbase}}}
-\seclabel{hooks}
-
-\BeginIndexGroup
-\BeginIndex{}{Haken}
-Der \LaTeX-Kern bietet selbst bereits einige wenige Stellen in der
-Verarbeitung eines Dokuments, an denen die Ausführung zusätzlichen Codes
-\emph{eingehakt} werden kann. Klassen- und Paketautoren dürften
-\Macro{AtBeginDocument} und \Macro{AtEndDocument} bestens bekannt
-sein. \KOMAScript{} bietet an einigen Stellen vergleichbares, beispielsweise
-um Code in die Ausführung von
-\hyperref[sec:maincls.structure]{Gliederungsbefehlen} einzuhaken. Über die
-Jahre zeigten sich dabei zwei Probleme:
-\begin{itemize}
-\item Es gibt nie genug Haken.
-\item Es gibt sowohl Code, der nur einmal ausgeführt werden soll, also quasi
- bei seiner Ausführung wieder vom Haken fällt, als auch Code, der bei jedem
- Durchlaufen des Hakens auszuführen ist, also dauerhaft auf dem Haken bleibt.
-\end{itemize}
-Üblicherweise muss man zur Definition eines einzelnen Hakens eine Anweisung
-definieren, mit der Code für den jeweiligen Haken aufgesammelt wird. Der Code
-wird dazu in einem weiteren internen Makro abgelegt, das man an der Stelle
-einfügen muss, an der der aufgesammelte Code auszuführen ist. Je mehr Haken
-man einfügt, desto mehr solcher Anweisungen gibt es. Um sowohl Einmalcode als
-auch dauerhaften Code zu ermöglichen, bedarf es sogar zweier Haken und damit
-der doppelten Anzahl an zu definierenden Anweisungen.
-
-Das Beispiel der Gliederungsbefehle zeigt, dass sich das erste Problem
-an einem einzigen Codeausführungspunkt noch verschärfen kann. Der
-eine Paketautor benötigt nur eine Möglichkeit, für alle
-Gliederungsbefehle denselben Code auszuführen. Ein anderer Paketautor hätte
-lieber, dass er bei bestimmten Gliederungsbefehlen unterschiedlichen Code
-ausführen kann. Es würde also sowohl ein allgemeiner Haken als auch ein Haken
-je Gliederungsbefehl benötigt. Das ganze dann wieder wegen des zweiten
-Problems verdoppelt.
-
-\KOMAScript{} bietet in \Package{scrbase} daher einen verallgemeinerten
-Hakenmechanismus, der mehrstufige Haken sowohl für Einmalcode als auch für
-dauerhaften Code bereitstellt. Diese Haken haben aufgrund der Implementierung
-den Namen \emph{do-hook} erhalten. Davon leitet sich auch der Name der
-Anweisungen ab, mit denen sie gesteuert werden.
-
-\begin{Declaration}
- \Macro{ExecuteDoHook}\Parameter{Spezifikator}
-\end{Declaration}
-Über\ChangedAt[2019/01]{v3.27}{\Package{scrbase}} diese Anweisung werden Haken
-implementiert. Dabei bestimmt der \PName{Spezifikator} den Namen des oder
-genauer der Haken. Der \PName{Spezifikator} wird zur Analyse immer vollständig
-expandiert.
-
-Der \PName{Spezifikator} besteht allgemein aus durch Querstrichen,
-»\texttt{/}«, voneinander getrennten Zeichenfolgen. Von \Macro{ExecuteDoHook}
-wird zunächst die Zeichenfolge vor dem ersten Querstrich abgetrennt. Diese ist
-der Name. Der verbleibende Rest ohne den führenden Querstrich ist das
-Argument. Dann wird der Code für den Haken mit diesem Namen
-ausgeführt. Anschließend wird erneut die vordere Zeichenfolge vom Rest
-abgetrennt und mit einem Querstrich hinten an den Namen angefügt und der Code
-für den so neu gebildeten Namen ausgeführt. Das geht so lange, bis der Code
-für den Haken mit dem Namen \PName{Spezifikator} und leerem Argument
-ausgeführt wurde.
-
-Im einfachsten Fall besteht der \PName{Spezifikator} aus einem einzelnen
-Namen. In diesem Fall wird zunächst der dauerhafte Code für genau einen durch
-diesen Namen festgelegten Haken mit leerem Argument ausgeführt.
-
-In jeder Stufe der Ausführung wird nach dem dauerhaften Code für einen Haken
-zusätzlich Einmalcode ausgeführt, bevor der Einmalcode global vom Haken
-genommen wird.
-
-\begin{Example}
- Mit \DescRef{\LabelBase.cmd.ExecuteDoHook}%
- \PParameter{heading/begingroup/\PName{Name}} in der Ausführung jedes
- durch \DescRef{maincls-experts.cmd.DeclareSectionCommand} definierten
- Gliederungbefehls wurden in den \KOMAScript-Klassen letztlich sechs Haken an
- diesem Codepunkt eingefügt, die in dieser Reihenfolge ausgeführt werden:
- \begin{enumerate}
- \item \PValue{heading} mit Argument \PValue{begingroup/}\PName{Name} für
- dauerhaften Code,
- \item \PValue{heading} mit Argument \PValue{begingroup/}\PName{Name} für
- Einmalcode,
- \item \PValue{heading/begingroup} mit Argument \PName{Name} für
- dauerhaften Code,
- \item \PValue{heading/begingroup} mit Argument \PName{Name} für
- Einmalcode,
- \item \PValue{heading/begingroup/}\PName{Name} mit leerem Argument für
- dauerhaften Code,
- \item \PValue{heading/begingroup/}\PName{Name} mit leerem Argument für
- Einmalcode.
- \end{enumerate}
- Der Platzhalter \PName{Name} ist dabei identisch mit dem bei
- \DescRef{maincls-experts.cmd.DeclareSectionCommand},
- \DescRef{maincls-experts.cmd.DeclareNewSectionCommand} oder
- \DescRef{maincls-experts.cmd.ProvideSectionCommand}
- angegebenen Namen
- der Gliederungsebene beziehungsweise des dadurch bestimmten
- Gliederungsbefehls, also beispielsweise \PValue{subparagraph} oder
- \PValue{chapter}. Betrachtet man obige Auf"|listung unter
- Berücksichtigung der Vielzahl an Gliederungsbefehlen,
- wird klar, dass die Haken \PValue{heading} und \PValue{heading/begingroup}
- mehrfach, nämlich für jeden Gliederungsbefehl existieren.%
-\end{Example}%
-%
-\EndIndexGroup
-\ExampleEndFix
-
-
-\begin{Declaration}
- \Macro{AddtoDoHook}\Parameter{Name}\Parameter{Befehl}
- \Macro{AddtoOneTimeDoHook}\Parameter{Name}\Parameter{Befehl}
-\end{Declaration}
-Mit\ChangedAt[2019/01]{v3.27}{\Package{scrbase}} \Macro{AddtoDoHook} wird an
-dem Haken mit dem Namen \PName{Name} dauerhafter\textnote{dauerhaft} Code
-aufgehängt. Als Code dient dabei der \PName{Befehl}, dem das in der Erklärung
-zu \DescRef{\LabelBase.cmd.ExecuteDoHook} erwähnte Argument als Parameter
-angehängt wird.
-\begin{Example}
- Angenommen, es soll innerhalb von \Macro{section} mitgezählt werden, wie oft
- diese Anweisung ausgeführt wird. Dies wäre in Fortführung des obigen
- Beispiels mit
-\begin{lstcode}
- \newcounter{sectionZaehler}
- \AddtoDoHook{heading/begingroup/section}
- {\stepcounter{sectionZaehler}}
-\end{lstcode}
- sehr einfach möglich. Allerdings würde dann in Wirklichkeit
- \Macro{stepcounter}\PParameter{sectionZaehler}\PParameter{} ausgeführt. Wir
- erinnern uns daran, dass immer ein Argument als Parameter angehängt wird.
- Im Falle des Hakens mit dem Namen \PValue{heading/begingroup/section} ist
- dieses Argument leer. Da ein solcher leerer Parameter hier zu einer leeren
- Gruppe wird, ist es besser, diesen leeren Parameter quasi aufzubrauchen:
-\begin{lstcode}
- \newcommand*{\stepcountergobble}[2]{%
- \stepcounter{#1}%
- }
- \AddtoDoHook{heading/begingroup/section}
- {\stepcountergobble{sectionZaehler}}
-\end{lstcode}
- Somit wird der angehängte, leere Parameter von der neuen Anweisung
- \Macro{stepcountergobble} gelesen, aber nicht verwendet.
-
- Sollen nun statt \Macro{section} alle Gliederungsbefehle gezählt werden, so
- muss nur ein anderer Hakenname eingesetzt werden:
-\begin{lstcode}
- \AddtoDoHook{heading/begingroup}
- {\stepcountergobble{sectionZaehler}}
-\end{lstcode}
- Hier ist übrigens der angehängte Parameter nicht leer, sondern enthält den
- Namen der Gliederungsebene oder des Gliederungsbefehls. Wollte man die
- Gliederungsbefehle einzeln zählen, so könnte man genau dies ausnützen:
-\begin{lstcode}
- \newcommand*{\stepZaehler}[1]{%
- \stepcounter{#1Zaehler}%
- }
- \AddtoDoHook{heading/begingroup}
- {\stepZaehler}
-\end{lstcode}
- Natürlich müssten dann auch die Zähler \Counter{partZaehler},
- \Counter{chapterZaehler} bis hinunter zu \Counter{subparagraphZaehler}
- definiert werden.
-\end{Example}
-
-Die Anweisung \Macro{AddtoOneTimeDoHook}\textnote{einmalig} arbeitet
-vergleichbar, fügt den \PName{Befehl} aber dem Einmalcode hinzu. Dieser Code
-wird dann nach der ersten Ausführung global vom Haken genommen.%
-\EndIndexGroup
-
-\begin{Declaration}
- \Macro{ForDoHook}\Parameter{Spezifikator}\Parameter{Befehl}
-\end{Declaration}
-Während\ChangedAt[2019/01]{v3.27}{\Package{scrbase}}
-\DescRef{\LabelBase.cmd.ExecuteDoHook} dazu gedacht ist, die Befehle
-auszuführen, die zuvor mit \DescRef{\LabelBase.cmd.AddtoDoHook} oder
-\DescRef{\LabelBase.cmd.AddtoOneTimeDoHook} für die durch den
-\PName{Spezifikator} bestimmten Haken gespeichert wurden, führt diese Anweisung
-den unmittelbar angegebenen \PName{Befehl} aus. Dabei werden an \PName{Befehl}
-sogar zwei Parameter angefügt. Der erste Parameter ist der Name des Haken, der
-zweite das Argument des Hakens.
-
-Diese Anweisung ist ein Abfallprodukt der Implementierung von
-\DescRef{\LabelBase.cmd.ExecuteDoHook}. Normalerweise sollten weder Anwender
-noch Paketautoren diese Anweisung benötigen.%
-\EndIndexGroup
-
-\begin{Declaration}
- \Macro{SplitDoHook}\Parameter{Spezifikator}\Parameter{Kopf-Makro}
- \Parameter{Rest-Makro}
-\end{Declaration}
-Wie\ChangedAt[2019/01]{v3.27}{\Package{scrbase}} aus den vorangegangenen
-Erklärungen deutlich wird, kann der Parameter eines mit
-\DescRef{\LabelBase.cmd.AddtoDoHook} oder
-\DescRef{\LabelBase.cmd.AddtoOneTimeDoHook} hinzugefügten \PName{Befehls}
-ebenfalls ein mehrteiliger \PName{Spezifikator} sein. Mit \Macro{SplitDoHook}
-kann so ein \PName{Spezifikator} in das vordere Element und den Rest
-aufgeteilt werden. Das \PName{Kopf-Makro} wird dabei als das vordere Element
-definiert. Das \PName{Rest-Makro} wird als der Rest definiert. Im Falle, dass
-kein Rest bleibt, wird das \PName{Rest-Makro} leer definiert. Falls bereits der
-\PName{Spezifikator} leer war, wird eine Warnung ausgegeben und sowohl
-\PName{Kopf-Makro} als auch \PName{Rest-Makro} leer definiert.
-
-\begin{Example}
- Wollte man am Anfang der Gruppe, in der die Überschrift ausgegeben wird,
- einen Zähler erhöhen, diesen am Ende aber wieder verringern, so könnte man
- dies über zwei Haken tun:
-\begin{lstcode}
- \AddtoDoHook{heading/begingroup}
- {\stepZaehler}
- \newcommand*{\restepZaehler}[1]{%
- \addtocounter{#1Zaehler}{-1}%
- }
- \AddtoDoHook{heading/endgroup}
- {\restepcounter}
-\end{lstcode}
- Man könnte aber auch mit einem einzigen Haken arbeiten und dessen Parameter
- zerlegen:
-\begin{lstcode}
- \newcommand*{\changeZaehler}[1]{%
- \SplitDoHook{#1}{\Gruppe}{\Ebene}%
- \Ifstr{\Gruppe}{begingroup}{%
- \stepcounter{\Ebene Zaehler}%
- }{%
- \Ifstr{\Gruppe}{endgroup}{%
- \addtocounter{\Ebene Zaehler}{-1}%
- }{}%
- }%
- }
- \AddtoDoHook{heading}
- {\changeZaehler}
-\end{lstcode}
- Wie zu sehen ist, ist die erste Lösung um einiges einfacher. Dazu kommt,
- dass man die zweite Fallunterscheidung in der zweiten Lösung gerne
- vergisst. Das wäre allerdings fatal, da es weitere Haken mit Namen
- \PValue{heading} aber abweichendem Argument geben kann.
-\end{Example}
-
-Genau genommen ist diese Anweisung ein Abfallprodukt der Implementierung
-von \DescRef{\LabelBase.cmd.ForDoHook}.%
-\EndIndexGroup
-%
-\EndIndexGroup
-
-\section{Obsolete Optionen und Anweisungen}
-\seclabel{obsolete}
-
-Frühere Versionen von \Package{scrbase} verfügten über Optionen und
-Anweisungen, die inzwischen entfernt oder ersetzt wurden. Diese sind hier nur
-aus Gründen der Vollständigkeit aufgeführt und sollten nicht mehr verwendet
-werden.
-
-\LoadNonFree{scrbase}{0}%
-\EndIndexGroup
-
-\endinput
-
-%%% Local Variables:
-%%% mode: latex
-%%% coding: utf-8
-%%% eval: (flyspell-mode 1)
-%%% ispell-local-dictionary: "de_DE"
-%%% TeX-master: "../guide.tex"
-%%% End:
-
-% LocalWords: Paketoptionen Familienmitglieder Familienmitglieds Säumniswert
-% LocalWords: Fleischermeister FamilyProcessOptions ProcessOption keyval Cmd
-% LocalWords: documentclass ProcessOptions FamilyExecuteOptions currname
-% LocalWords: Optionenliste ExecuteOptions DeclareOption currext Wurstsalat
-% LocalWords: FamilyOptions FamilyKeyState Wurstpakete nonsense package true
-% LocalWords: Wurstpaket FamilyOption salatmit SalatZusatz scrbase false
-% LocalWords: AtEndOfFamilyOptions FamilyBoolKey FamilySetBool Schaltername
-% LocalWords: FamilyLengthKey FamilySetLength FamilyLengthMacroKey
-% LocalWords: FamilySetLengthMacro Wertübergabe Gliederungsbefehlen
-% LocalWords: Sternvariante Anwenderanweisungen Signalisierung Paketautoren
-% LocalWords: Familienschlüssel Mitgliederschlüssels Vergleichszustand
-% LocalWords: Benutzeräquivalent Dokumentpräambel voranzustellen