Hallo,
seit einiger Zeit versuche ich verzweifelt, eine "eigene" Klasse auf Basis der Komascript-Klasse scrbook zu erstellen.
Sinn der Übung ist die Verwendung eines vorgegebenen CI's, allein durch die Wahl der Dokumentenklasse zu ermöglichen.
m.a. Worten: bei der späteren Verwendung soll vor dem
\begin{document}
lediglich noch die gewünschte Dokumentenklasse mit ein paar Optionen gesetzt werden.
Zu diesem Zweck habe ich mir eine Klasse mit dem Namen "cibook.cls" im Projektverzeichnis erstellt, die alle benötigten Anweisungen enthalten soll, um das Layout den Anforderungen des CI anzupassen. Im Sinne des Minimalbeispiels sieht die gekürzte Fassung zur Verdeutlichung der Fehler wiefolgt aus:
\NeedsTeXFormat{LaTeX2e} \ProvidesClass{cibook}[2011/11/18 v 0.1 CI-Klasse für Dokumentationen] \LoadClass[headinclude]{scrbook} \DeclareOption{cihead}{ \AtBeginDocument{ \setheadwidth{textwithmarginpar} %gibt einen Fehler \setheadtopline[head]{1pt} %gibt einen Fehler } } \DeclareOption*{\typeout{Unbekannte Klassenoption: "\CurrentOption"}} \ProcessOptions\relax
Diese Klasse wird dann von meiner Hauptdatei namens "main.tex" in folgender Weise verwendet:
\documentclass[cihead]{cibook} \begin{document} \chapter{Minimalbeispiel} Lorem ipsum dolor sit amet, consectetur, adipisci velit … \end{document}
Da ich irgendwo einen grundlegenden Denkfehler beim Erstellen der Klasse habe, schlägt das Kompilieren des Dokumentes mit Fehlermeldungen bei den Komascript Anweisungen fehl.
! Undefined control sequence. \@begindocumenthook ...on \caption \setheadwidth {textwithmarginpar} \sethe...
Wo liegt mein Denkfehler bei der Erstellung der Klasse?
Wie muss die Klasse "cibook" prinzipiell aussehen, damit die Anweisungen der geladenen Klasse "scrbook" zur Verfügung stehen und verwendet werden können?
Klasse != Paket
Wenn Du Befehle eines Pakets verwendest, das von den KOMA-Script-Klassen nicht automatisch geladen wird, dann musst Du das selbst laden:
Außerdem ist
headinclude
keine Option der Klasse, sondern eine Option des Pakets typearea. Optionen von\LoadClass
sind im Gegensatz zu Optionen von\documentclass
keine globalen Optionen, sondern lokale Optionen nur für die geladene Klasse.Falls übriges die Optionen von
\documentclass
an scrbook weitergereicht werden sollen, muss\LoadClassWithOptions
verwendet werden. Alles ein wenig kompliziert und manchmal auch ein wenig nervig, aber so ist es von den LaTeX-Autoren vorgesehen.Die Fehlerbehandlung für unbekannte Optionen kannst Du Dir übrigens schenken. Damit würden beispielsweise Paket-Optionen, die man nicht bei mehreren Paketen angeben will und deshalb bei
\documentclass
angibt, als unbekannte Klassenoption gemeldet. Darüber hinaus solltest Du Dir mal die Anweisungen\ClassInfo, \ClassWarning, \ClassError
etc. im clsguide anschauen.Besten Dank :-)
Damit komme ich nun schon ein gutes Stück weiter. Besten Dank für die ausführliche Hilfe.