Sie sind hier

Die Hauptdatei thesis.tex

Bild von Markus Kohm

Wie bereits erwähnt ist thesis.tex die Hauptdatei. Darin fällt auf den ersten Blick positiv auf, dass sie nicht – wie leider sonst häufig zu finden – mit überlangen Zeilen und einer unübersichtlichen Mischung aus Präambelcode und irgendwann dem eigentlichen Dokumentteil verwirrt. Stattdessen wurde die Datei mit auffälligen Kommentaren durchaus logisch in Segmente unterteilt. Bei den Kommentaren wurde dabei auch darauf geachtet, dass die Zeilen bei normaler Darstellung nicht umbrochen werden. Zeilenumbrüche in Kommentaren sind immer besonders lästig. Deshalb dafür ein großes Lob.

Leider sind einige Quelltextzeilen aber doch überlang. Dies führt dann im Zweifelsfall zu missverständlicher Darstellung im Editor. Ich werde darauf noch zurück kommen.

thesis.tex:

\documentclass{thesisclass}
% Based on thesisclass.cls of Timo Rohrberg, 2009
% ----------------------------------------------------------------
% Thesis - Main document
% ----------------------------------------------------------------

Die Datei beginnt tatsächlich mit dem Laden der Klasse. Hier fällt auf, dass der Kommentar, der angibt, dass es sich hier um das Hauptdokument handelt erst danach und nach einem weiteren Kommentar folgt. Üblich und auch sinnvoll ist stattdessen, dass man jede Datei mit einem Kopfkommentar beginnt, in dem nicht nur kurz angegeben ist, worum es sich bei der Datei handelt, sondern darüber hinaus Urheber und Rechte geklärt werden.
Vor allem bei Dateien, die man weitergibt, sollten in einem Kopfkommentar immer die Rechte erwähnt sein und auch der Original-Dateiname und eine Kurzbeschreibung sollten ganz am Anfang stehen!

thesis.tex:

%% -------------------------------
%% |  Information for PDF file   |
%% -------------------------------
\hypersetup{
 pdfauthor={Not set},
 pdftitle={Not set},
 pdfsubject={Not set},
 pdfkeywords={Not set}
}

Hier wurde nun korrekt erst ein auffälliger Kommentar über das Segement platziert und dann die Einstellungen, die zu diesem Segment gehären vorgenommen. Allerdings wurden die Kommentare hier mit zwei %% eingeleitet, während der eigentlich wichtigere Kommentar zu Beginn nur mit einem % beginnt. Optisch wirken aber die doppelten Prozentzeichen mächtiger, wichtiger und damit als übergeordnete Ebene. hier würde ich empfehlen, für die Segmente ebenfalls nur ein Prozentzeichen zu verwenden und ggf. sogar für den Kopfkommentar stattdessen zwei. So könnte vermieden werden, dass die optische Wirkung die Bedeutung konterkariert. Darüber hinaus birgt der Abschlussstrich in der zweiten Zeile dieses Kommentars das Risiko, dass er bei ungünstiger Fontwahl im Editor nicht an der richtigen Position steht. Zwar empfiehlt es sich durchaus im Editor eine Dichtengleiche – aka Monotype, Terminal, Typewriter – zu verwenden, Anfänger missachten dies aber auch immer wieder.
Die Markierung von Kommentaren sollte in ihrer optischen Wirkung ihrer hierarchischen Bedeutung entsprechen.
Wenn Kommentare eine besondere Schrift voraussetzen, sollte es bei Vorlagen für Anfänger eine README-Datei geben, in der das erwähnt ist.

Was genau der Anwender hier setzt, wird nicht erwähnt. Es ist nicht einmal ein Verweis auf die entsprechende Anleitung zu finden. Auch ist nicht erwähnt, dass man die geschweiften Klammern um die einzelnen Werte tunlichst beibehalten sollte. So könnte auch die Vermutung entstehen, dass diese schlicht den Platzhaltercharakter von »{Not set}« hervorheben sollen.
Bei einer Vorlage für Anfänger sollte man verwendete Anweisungen, die über die Einführung l2kurz hinaus gehen, entweder mit Kurzkommentaren versehen oder zumindest mit einem Verweis auf die entsprechende Anleitung.

thesis.tex:

%% ---------------------------------
%% | Information about the thesis  |
%% ---------------------------------
 
\newcommand{\myname}{Name}
\newcommand{\mytitle}{Title of thesis\\ 
											Second title line}
\newcommand{\myinstitute}{Institute for Program Structures\\
													and Data Organization (IPD)}
 
\newcommand{\reviewerone}{?}
\newcommand{\reviewertwo}{?}
\newcommand{\advisor}{?}
\newcommand{\advisortwo}{?}
 
\newcommand{\timestart}{XX. Monat 20XX}
\newcommand{\timeend}{XX. Monat 20XX}
\newcommand{\submissiontime}{DD. MM. 20XX}

Hier stellt sich natürlich die Frage, warum für den Namen des Autors nicht die Standardanweisung \author und für den Titel nicht die Standardanweisung \title verwendet wird. Daraus ergibt sich dann auch die Frage, warum diese Elemente mit \newcommand direkt als Makro definiert werden müssen, statt dass wie üblich Befehle zur Festlegung der entsprechenden Elemente zur Verfügung gestellt werden. Die Definition entsprechender Befehle ist nicht sehr aufwändig und birgt darüber hinaus die Möglichkeit Warnungen für vergessene Elemente einzubauen.
Für Anfänger ist es wichtig, Dinge, die sie aus Einführungen gewohnt sind, möglichst auch auf diese Weise lösen zu können.

Ein weiterer Nachteil dieser Definitionen ist, dass sie als Makrodefinition tatsächlich in die Präambel gehört. Wenn allerdings beispielsweise babel mit ins Spiel kommt, ist zu beachten, dass dabei die shorthands, an die man sich eventuell im Dokument gewohnt hat, in der Präambel nicht ohne weiteres verwendet werden können. Daher ist eigentlich empfehlenswert textuelle Einstellungen für den Satz erst nach der Präambel am Anfangt des Dokuments vorzunehmen.
Damit der Anwender Textelemente für den Satz ohne besondere Beachtung der Präambelsitutation einstellen kann, sollten dafür entsprechende Anweisungen – vergleichbar zu \title oder \author – zur Verfügung gestellt werden.

Ob hier zusätzliche Kommentare über die Verwendung oder Bedeutung der Makros notwendig sind, ist schwer zu sagen. Wirklich zwingend erscheint mir das nicht. Allerdings stellt sich bei näherer Betrachtung der gesamten Vorlage heraus, dass \submissiontime tatsächlich überhaupt nicht verwendet wird. Der Sinn der Definition stellt sich in diesem Fall also durchaus. Vor allem wird ein aufmerksamer Anwender sich später wundern, wo denn nun dieses Element bleibt, und sich eventuell auch fragen, ob die Nichtverwendung an einem Fehler von ihm selbst liegt.
Man sollte Anwender nicht dadurch verwirren, dass in der Dokumentpräambel Dinge definiert werden, die später nie verwendet werden.

Bei der Definition von \mytitle befinden sich außerdem am Anfang der zweiten Zeile 11 Tabulartorzeichen. Zwar ignoriert LaTeX selbst Tabulatorzeichen normalerweise, der Editor jedoch nicht. Welchen Einzug er je Tabulator verwendet, ist nicht eindeutig definiert. In der Voreinstellung werden bei mir bei Textdokumenten eine Tabulatorweite von acht Leerzeichen verwendet. Da ich mit einer üblichen Zeilenlänge von 80 Zeichen in der Editordarstellung arbeite, werden aus den 11 Tabulatoren bei mir also 88 Leerzeichen, was in der Darstellung zu einer Leerzeile gefolgt von einer (scheinbar) um 8 Zeichen eingezogenen Zeile führt. Wir haben also eine undefiniert und im Zweifelsfall überlange Zeile, die sehr leicht zu einer ungünstigen Darstellung im Editor führen kann.
Man sollte Tabulatoren in LaTeX-Dokumenten vermeiden.
Bei Verwendung von Tabulatoren sollte beispielsweise in einer README-Datei die Tabulatorweite klar definiert sein.
Im Quelltext sind Zeilenlängen über einer Darstellungsbreite von 80 Zeichen bei Dateien, die man weitergibt, nach Möglichkeit zu vermeiden. Besser ist eine Begrenzung auf 76–78 Zeichen.

Für die Definition von \myinstitute gilt entsprechendes.

thesis.tex:

%% ---------------------------------
%% | ToDo Marker - only for draft! |
%% ---------------------------------
% Remove this section for final version!
\setlength{\marginparwidth}{20mm}
 
\newcommand{\margtodo}
{\marginpar{\textbf{\textcolor{red}{ToDo}}}{}}
 
\newcommand{\todo}[1]
{{\textbf{\textcolor{red}{(\margtodo{}#1)}}}{}}

Hier haben wir sehr schöne Beispiele dafür, wie Anwender sinnvoll eigene Befehle definieren können. Für beide Befehle gibt es zweifellos sinnvolle Anwendungen. Leider fehlen – auch in den übrigen Dokumentdateien – jegliche Beispiele für die Anwendung.
Neu definierte Befehle sollten in Vorlagen kurz erklärt werden. Eine Erkärung kann auch in Form eines Beispiels erfolgen. In diesem Fall sollte bei der Definition auf das Beispiel verwiesen werden.

Auffällig ist, dass hier die Länge \marginparwidth explizit verändert wird. Der Grund dafür erschließt sich zunächst nicht. Wenn man ohne diese Änderung testet, fällt jedoch auf, dass auf geraden Seiten die Markierung dann teilweise außerhalb der Seite liegt. Dies lässt darauf schließen, dass in der Klasse thesisclass \marginparwidth falsch eingestellt wird. Tatsächlich wird dort das beispielsweise in l2tabu als eher zu vermeidende Paket vmargin verwendet, das zwar Ränder, Satzspiegel und Bogenoffset – übrigens vollkommen unnötig und nicht empfehlenswert – einstellt, aber die Breite der Randspalte sträflich vernachlässigt. Trotzdem gehört die Korrektur dieses Versäumnisses von vmargin nicht hierher.
Fehler von Paketen, die in der Wrapper-Klasse geladen werden, gehören in der Wrapper-Klasse selbst korrigiert.

Darüber hinaus ist nur schwer zu verstehen, warum man diese Definitionen im finalen Dokument löschen soll. Löschen von Definitionen birgt immer ein gewisses Risiko. Da die Anweisungen grundsätzlich sinnvoll sind, stellt sich auch die Frage, ob man diese nicht besser in die Wrapper-Klasse verlagern sollte. Dort könnte man dann beispielsweise auch über die Optionen draft und final steuern, dass die Anweisungen im finalen Dokument auf vergessene TODO-Anweisungen hinweisen – sei es mit einer Warnung oder einer Fehlermeldung.

Die Änderung von \marginparwidth sollte man jedenfalls keinesfalls löschen. Falls nämlich \marginpar auch anderweitig verwendet wird, würde das zu besagter fehlerhaften Darstellung führen.
Allgemein notwendige, korrekte Einstellungen gehören in die Wrapper-Klasse und sollten weder von ihrem ergänzenden Umfeld, noch davon abhängig gemacht werden, ob eine Dokument ein Entwurf oder die finale Version ist.

thesis.tex:

%% --------------------------------
%% | Old Marker - only for draft! |
%% --------------------------------
% Remove this section for final version!
\newenvironment{deprecated}
{\begin{color}{gray}}
{\end{color}}

Erneut eine nützliche Definition, wenn auch der einleitende Kommentar aussagekräftiger sein könnte. Auch hier fehlt wieder die Erklärung zur Verwendung. Auch hier stellt sich die Frage, ob das nicht in die Wrapper-Klasse gehört und ob Löschen wirklich eine gute Idee ist. Auskommentieren als mögliche Alternative wäre zeitweilig zu erwägen.

Entscheidender ist nach meiner Auffassung jedoch, dass hier eine Anweisung, nämlich \color als Umgebung missbraucht wird. In einigen, seltenen Fällen, mag ein solcher Missbrauch vielleicht nützlich sein, hier ist er es nicht. Der Missbraucht von Anweisungen als Umgebungen birgt auch immer ein Risiko. Einige Entwickler sind sogar der Auffassung, dass es ein großer Fehler beim Entwurf von LaTeX war, dass Umgebungen so definiert sind, dass dieser Missbrauch überhaupt so einfach möglich ist. Im konkreten Beispiel hat das u. a. den Nachteil, dass Anwenderfehler zu unklaren Fehlermeldungen führen können. So würde beispielsweise

\begin{deprecated}
Don't use this, but note the following mistake:
\end{detacerped}

zu der auf den ersten Blick verwirrenden Fehlermeldung führen: »\begin{color} ended by \end{detacerped}«. Mit der wesentlich einfacheren Definition:

\newenvironment{deprecated}{%
  \color{gray}\ignorespaces
}{}

gäbe es dieses Problem nicht. Nebenbei wurde hier mit \ignorespaces auch noch dafür gesorgt, dass Leerzeichen – und damit beispielsweise auch ein Zeilenumbruch – nach dem Anfang der Umgebung nicht zu einem Wortabstand in der Ausgabe führen. Bei anderen häufigen, missbräuchlichen Verwendungen von Anweisungen als Umgebungen sind weitere häufige Probleme bekannt, beispielsweise bei den Größenumschaltbefehlen oder bei \appendix.
Anweisungen sollten in der Regel nicht als Umgebungen missbraucht werden.

Ob es besser wäre, diese Umgebung noch um ein \par am Anfang des \begin-Teils und am Ende des \end-Teils zu erweitern kann ich nicht beurteilen, da es weder eine Anleitung noch ein Beispiel für die vorgesehene Verwendung gibt. Einen Merksatz zu diesem Thema haben wir oben bereits.

thesis.tex:

%% --------------------------------
%% | Settings for word separation |
%% --------------------------------
% Help for separation:
% In german package the following hints are additionally available:
% "- = Additional separation
% "| = Suppress ligation and possible separation (e.g. Schaf"|fell)
% "~ = Hyphenation without separation (e.g. bergauf und "~ab)
% "= = Hyphenation with separation before and after
% "" = Separation without a hyphenation (e.g. und/""oder)
 
% Describe separation hints here:
\hyphenation{
% Pro-to-koll-in-stan-zen
% Ma-na-ge-ment  Netz-werk-ele-men-ten
% Netz-werk Netz-werk-re-ser-vie-rung
% Netz-werk-adap-ter Fein-ju-stier-ung
% Da-ten-strom-spe-zi-fi-ka-tion Pa-ket-rumpf
% Kon-troll-in-stanz
}

Hier zeigt sich, dass sich die Vorlage tatsächlich an Anfänger richtet. In diesem Fall ist es auch durchaus sinnvoll und lobenswert, dass auf nützliche Funktionen verwendeter Pakete hingewiesen wird. Dass hier auf das german-Paket verwiesen wird, statt auf das in der Wrapper-Klasse tatsächlich verwendete ngerman-Paket, und was von der Verwendung dieses Pakets zu halten ist, werde ich zu gegebener Zeit behandeln. Verwirren könnte jedoch, dass später explizit auf Englisch umgeschaltet wird und das gesamte Beispiel auch auf die Verwendung von Englisch voreingestellt ist. Tatsächlich funktionieren obige shorthands bei Verwendung des Pakets german unabhängig von der gewählten Sprache und bereits in der Präambel. Letzteres ist allerdings einer der Kritikpunkte an dem Paket und wie sich bei der Behandlung der Wrapper-Klasse noch zeigen wird, ist das auch nur die halbe Wahrheit.

Schwerer wiegt jedoch, dass die gelieferten Erklärungen sehr ungenau sind. So ist "= keine Trennung, bei dem vor und nach dem Trennstrich umbrochen werden darf, sondern ein Bindestrich, bei dem nach dem dem Bindestrich ohne Trennstrich umbrochen werden darf und in dem Teilwort vor und nach dem Bindestrich nach den jeweiligen Trennregeln getrennt werden darf. Die Erklärungen aus Abschnitt 22 der babel-Anleitung sind hier deutlich klarer. Gerade für den Fall, dass eine solche Kurzerklärungen Fragen aufwirft, ist es nützlich, wenn der Anfänger erfährt, wo er weitere Informationen erhalten kann.
Werden Erklärungen aus Anleitungen verkürzt oder übersetzt wieder gegeben, ist es sinnvoll gleichzeitig auf die Original-Anleitung zu verweisen.

Die Trennmuster, die anschließend angegeben sind, können ebenfalls als sehr nützliches Beispiel betrachtet werden. Als Verbesserung sei hier lediglich angemerkt, dass man noch darauf hinweisen könnte, dass lediglich Ausnahmen, die von den eingebauten Trennmustern nicht erfasst werden, angegeben werden müssen, dann jedoch ggf. auch verwendete Beugungsformen mit aufzunehmen sind. TeX kann Trennmuster weder deklinieren noch konjugieren. Es findet nur ein dummer Vergleich statt. Ob die angegebenen Muster tatsächlich notwendig sind, oder bereits von den deutschen Trennmustern erfasst werden, habe ich nicht geprüft. Da es sich lediglich um – zudem auskommentierte – Beispiele handelt, spielt das nach meiner Auffassung auch keine Rolle.

thesis.tex:

%% ------------------------
%% |    Including files   |
%% ------------------------
% Only files listed here will be included!
% Userful command for partially translating the document (for bug-fixing e.g.)
\includeonly{%
titlepage,
declaration,
introduction,
content,
evaluation,
conclusion,
appendix
}

Während bei den meisten oder zumindest sehr vielen Vorlagen zwar sehr gerne \include verwendet wird, fehlt meist jegliche Motivation dafür. In dieser Vorlage wird endlich einmal – wenn auch sehr kurz – eine solche Motivation geliefert. Wünschenswert würde ich es allerdings finden, wenn die Formatierung einen Einzug von 2–4 Zeichen innerhalb des Arguments verwenden würde. Eine solche Einrückung des Arguments hilft beim Überblick.

Verwirrend könnte auch der Kommentar über diesem Segment sein. Tatsächlich werden hier noch keine Dateien eingebunden, sondern die Einbindung mit \include beschränkt. Also etwas wie »Restriction of including files«. Aber das ist letztlich Haarspalterei. Im ergänzenden Kommentar wird das durchaus hinreichend erklärt und die Segmentüberschriften sollen ganz klar Schlagwortcharakter besitzen.

Leider hat sich hier auch eine echte Unsauberkeit eingeschlichen. Die Datei appendix.tex wird später im Dokument nämlich gar nicht mit \include, sondern mit \input geladen. Sie hier in \includeonly aufzunehmen oder wegzulassen ist also wirkungslos. Der Anwender könnte also verwirrt werden, wenn er die vorletzte Zeile auskommentiert und appendix.tex trotzdem noch geladen wird.
Um den Anfänger nicht zu verwirren sollten nur Dateien in \includeonly aufgeführt werden, die auch tatsächlich per \include geladen werden.

thesis.tex:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Here, main documents begins %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
 
% Remove the following line for German text
\selectlanguage{english}

Im Support erhalte ich sehr oft Dateien, bei denen ich nach \begin{document} erst suchen muss, weil diese Zeile im Wust an Präambelcode oftmals unter geht. Deshalb begrüße ich es sehr, dass das Ende der Präambel und der Anfang des Dokumentinhalts hier deutlich hervorgehoben wird. Allerdings sei mir die Spitzfindigkeit erlaubt, dass das Haupt-Dokument nicht erst hier beginnt, vielmehr beginnt hier der Körper oder meinetwegen der eigentliche Inhalt.

Bezüglich der Umschaltung der Sprache drängt sich mir allerdings die Frage auf, warum die erst hier erfolgt. Sollte die Sprache nicht bereits umgeschaltet sein, wenn die ersten Textfestlegungen erfolgen? Dies geschieht aber – wie bereits erwähnt – in dieser Vorlage noch in der Präambel. Für mich ist dies ein weiteres Indiz, dass es besser wäre obige Textdefinitionen über passende Befehle zu ermöglichen und hinter die Sprachumschaltung zu verschieben.
Textfestlegungen, sei es als Definition oder als Argument eines anderen Befehls sollten immer in der tatsächlichen Sprache erfolgen. Für Text, die nicht in der Hauptsprache verfasst sind, ist die Sprache entsprechend umzuschalten.

Hier könnte man auch überlegen, ob man der Klasse nicht einfach Optionen zur Auswahl der gewünschten Hauptsprache spendiert. Da ohnehin nur zwei Sprachen unterstützt werden, wäre das einfach zu lösen. Außerdem könnte man so auch darauf reagieren, wenn der Anwender etwa vergisst, die Sprache klar vorzugeben.

thesis.tex:

\frontmatter
\pagenumbering{roman}

Es wird also wieder einmal mit unterschiedlicher Nummerierung für den Vorspann und den Rest des Dokuments gearbeitet. Bei vielen Anwendern hält sich ja hartnäckig das Gerücht, dass das schicker wäre oder irgendwelche Vorteile böte. Nach meiner Meinung ist das nicht der Fall. Der Ursprung dieser getrennten Nummerierung liegt ohnehin in den Problemen, die beim manuellen Paginieren, Referenzieren und Erstellen von Verzeichnissen entstehen, wenn man die Länge des Vorspanns nicht vorab genau kennt. Also gibt es heute kaum noch einen sinnvollen Grund dafür. Während die getrennte Nummerierung im englischen Satz trotzdem noch sehr weit verbreitet ist, ist sie im deutschen Satz inzwischen eher unüblich.

Dessen ungeachtet hat sich hier aber auch wieder eine Unsauberkeit eingeschlichen. Die Umschaltung der Seitennummerierung auf kleine römische Zahlen erfolgt bei der Basisklasse scrbook bereits mit der Anweisung \frontmatter. Unmittelbar danach eine weitere Umschaltung auf den bereits erreichten, neuen Ist-Zustand vorzunehmen, ist damit überflüssig.
\pagenumbering unmittelbar nach \frontmatter sollte überflüssig sein.
Überflüssige Anweisungen verwirren den Anfänger, bergen ein Fehlerpotential und sollten deshalb vermieden werden.

thesis.tex:

\include{titlepage}
\include{declaration}

Genau so macht man das – vorausgesetzt die per \include geladenen Dokumentteile sollen mit einer neuen Seite beginnen und auch mit einer neuen Seite abschließen. Dies dürfte hier auch der Fall sein.

thesis.tex:

\blankpage
 
%% -------------------
%% |   Directories   |
%% -------------------
\tableofcontents

Die Anweisung \blankpage stammt aus der Wrapper-Klasse, thesisclass. An dieser Stelle ist nur von Bedeutung, dass sie letztlich dasselbe macht wie \cleardoubleemptypage aus der Basisklasse, scrbook. In der Voreinstellung ist das auch genau die Funktion von \cleardoublepage. Man könnte \blankpage an dieser Stelle also einfach durch \cleardoublepage ersetzen. Ein solches \cleardoublepage wird aber von der Basisklasse, scrbook, auch automatisch vor der Ausgabe der Überschrift des Inhaltsverzeichnisses mit \tableofcontents ausgeführt. Die Anweisung ist damit überflüssig. Sollte die Wrapperklasse hier eine Änderung vorgenommen haben, diese aber gar nicht erwünscht sein, so gehört das Problem in der Wrapperklasse beseitigt.
Anweisungen zum Einfügen einer Vakatseite vor Kapitelanfängen oder Verzeichnissen sollten überflüssig sein und weggelassen werden.

thesis.tex:

\blankpage
 
%% -----------------
%% |   Main part   |
%% -----------------
\mainmatter
\pagenumbering{arabic}
\include{introduction}
\include{content}
\include{evaluation}
\include{conclusion}

Bezüglich der Anweisung \blankpage gilt im Zusammenspiel mit \mainmatter dasselbe, was oben bereits für das Zusammenspiel mit \tableofcontents erklärt wurde.
Anweisungen zum Einfügen einer Vakatseite vor der Umschaltung auf den Hauptteil sollten überflüssig sein und weggelassen werden.

Außerdem schaltet die Anweisung \mainmatter auch bereits auf den Seitennummerierungsstil arabic.
\pagenumbering unmittelbar nach \mainmatter sollte überflüssig sein und weggelassen werden.

thesis.tex:

%% --------------------
%% |   Bibliography   |
%% --------------------
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\bibname}
 
\iflanguage{english}
{\bibliographystyle{IEEEtranSA}}	% english style
{\bibliographystyle{babalpha-fl}}	% german style
 
% Use IEEEtran for numeric references
%\bibliographystyle{IEEEtranSA})
 
\bibliography{thesis}

Die ersten drei Zeilen dieses Segments sind genau das, was man bei einer Standardklasse tun würde, um für das Literaturverzeichnis einen korrekten Eintrag im Inhaltsverzeichnis mit einem korrekten hyperref-Anker zu erhalten. Nun wird aber in thesisclass als Basisklasse keine Standardklasse, sondern eine KOMA-Script-Klasse verwendet. KOMA-Script-Klassen bieten Optionen, um Verzeichnisse ins Inhaltsverzeichnis aufzunehmen. Für das Literaturverzeichnis wäre das beispielsweise bibliography=totoc. Diese Lösung wäre sicher sauberer, eleganter und könnte und sollte auch gleich in der Wrapper-Klasse eingebaut werden. Will ein Anwender das dann doch nicht, kann er die erwünschte Voreinstellung ändern.
Einstellmöglichkeiten der Basisklasse sollten genutzt werde und Vorrang vor irgendwelchen Notlösungen haben.
Der Normalfall sollte nach Möglichkeit (in der Wrapper-Klasse) voreingestellt sein.

Ganz ähnlich ist es mit dem Literaturstil, der verwendet werden soll. Zunächst einmal muss ich ein wenig auf die Analyse von thesis.cls vorgreifen. Dort wird nämlich das Paket babelbib geladen. Teil der babelbib-Sammlung sind auch verschiedene Literaturstile. babalpha-fl ist einer dieser babelbib-Literaturstile. Der Stil IEEEtranSA ist hingegen kein babelbib-Literaturstil. Er passt also eigentlich überhaupt nicht zu babelbib und unterstützt auch nicht die Erweiterungen durch babelbib. Dagegen kann babalpha-fl mit unterschiedlichen Sprachen umgehen. Es gibt also eigentlich gar keine Notwendigkeit auf den rein englisch-sprachigen Stil IEEEtranSA auszuweichen. Die Sprachunterscheidung wäre an dieser Stelle also überflüssig. Notwendig wäre allerdings, nicht nur die Sprache für babel, sondern auch für babelbib umzuschalten. Ein Argument mehr, die Hauptsprache als Option der Wrapper-Klasse zu definieren, statt mit \selectlanguage zu hantieren.
Literaturstil und Literaturpaket sollten zusammengehören oder zumindest kompatibel sein.

Es könnte sogar darüber nachgedacht werden, ob die \bibliographystyle-Anweisung dann nicht gleich in die Wrapper-Klasse verlagert werden sollte. Bei einer spezialisierten Klasse, bei der gar nicht unterschiedliche Literaturstile zur Anwendung kommen sollen, wäre das vernünftig.

Das zusätzliche, auskommentierte, erneute Laden von IEEEtranSA einschließlich des zugehörigen Kommentars dürfte ohne weitere Erklärung für die meisten Anwender unverständlich sein. Für mich selbst gibt es auch keine Begründung dafür.
Eine Vorlage sollte nicht ohne Erklärung widersprüchliche Anweisungen enthalten.

Das Laden der Literatur mit \bibliography ist dann wiederum vollkommen korrekt. Lediglich bei Verwendung von biblatex an Stelle von babelbib müsste hier anders verfahren werden. Ich erwähne das nur der Vollständigkeit halber.

thesis.tex:

%% ----------------
%% |   Appendix   |
%% ----------------
\cleardoublepage
 
\input{appendix}

Zunächst scheinen wir hier zwei vollkommen harmlose Zeilen Code zu haben. Ein wenig erstaunlich, dass hier \cleardoublepage an Stelle der überflüssigen Eigenkreation \blankpage verwendet wird, aber das ist auf den ersten Blick eher ein Fortschritt.

Auffällig ist, dass hier \input und nicht mehr \include verwendet wird. Daraus hat sich dann allerdings eine kleine Unsauberkeit ergeben. Während bei \include unbedingt der Dateiname ohne Endung anzugeben ist, erwartet \input eigentlich den kompletten Dateinamen einschließlich Endung. Dass das Laden von appendix.tex trotzdem gelingt, liegt daran, dass aktuelle TeX-Implementierungen in dem Fall, dass sie eine Datei nicht zum Lesen öffnen können, intern einen zweiten Versuch starten, bei dem sie ».tex« an den Dateinamen anhängen. Trotzdem empfehle ich dringend, bei \input korrekt den vollständigen Dateinamen mit Endung anzugeben.
Verwenden \input immer mit vollständigem Dateinamen mit Endung. Lasse jedoch bei \include die Dateiendung ».tex» immer weg.

Das bereits erwähnte \cleardoublepage ist eventuell überhaupt erst deshalb in den Code gelangt, weil eben nicht \include, sondern \input verwendet wird. Bekanntlich beginnt \include immer eine neue Seite, während \input darauf verzichtet. Allerdings beginnt der Satz in der Datei appendix.tex mit einer \addchap-Anweisung. Diese führt implizit ebenfalls ein \cleardoublepage aus. Die explizite Anweisung in thesis.tex ist also überflüssig.
\cleardoublepage vor \addchap ist überflüssig und sollte entfallen, auch wenn addchap in einer Unterdatei verborgen wird.

Darüber hinaus wird appendix weiter oben auch bei \includeonly aufgeführt. \includeonly hat aber keinerlei Auswirkungen auf Dateien, die mit \input geladen werden. Es drängt sich also der Vorschlag auf, an dieser Stelle ebenfalls \include zu verwenden. Bei der verwendeten Konstellation mit \appendix innerhalb der geladenen, einzigen Anhangsdatei wäre das jedenfalls möglich.

thesis.tex:

\end{document}

Das Ende des Dokuments. Notwendig und zugleich hinreichend. Selbst ich habe daran nichts zu meckern.

Damit bin ich am Ende der Hauptdatei thesis.tex angelangt – was das Zerlegen der Datei angeht. Wie ich mir eine Alternative vorstellen könnte, beabsichtige ich zu einem späteren Zeitpunkt nachzureichen. Genau genommen dürfte bekannt sein, dass ich eigentlich lieber keine Vorlagen liefern würde. In diesem Fall beabsichtige ich jedoch eine Ausnahme zu machen. Ich bitte deshalb auch darum, bei etwaigen Kommentaren noch nicht zu versuchen, Alternativen aus mir herauszukitzeln.

Kommentare

Hallo Markus, da ich gerade an einer eigenen Vorlage arbeite, die sich an Personen mit wenig LaTeX-Erfahrungen richtet, habe ich mich sehr über Deine Analyse gefreut. Also erst einmal vielen Dank für diese Arbeit. Super!

Beim Lesen und berücksichtigen Deiner Anmerkungen in meiner Vorlage, ist mir folgender Fall aufgefallen. Wenn ich, wie von Dir vorgeschlagen, bei \frontmatter und \mainmatter den Befehl \pagenumbering entferne, funktioniert zwar alles weiterhin, aber ich erhalte eine Reihe von Warnungen, die darauf verweisen, dass die Seitennummerierung nicht mehr unique ist.

 destination with the same identifier (name{page.1}) has been already used, duplicate ignored

Lösen lässt sich das Ganze, indem man genau dieses \pagenumbering wieder einführt. Das habe ich nun getan, aber nun habe ich komplizierte Kommentare beigefügt, die erläutern, warum pagenumbering genutzt wurde.

Mmh, hast Du da vielleicht noch eine alternative Idee, wie man die Vorlage so simpel wir möglich und ohne Warnungen aufbauen kann? Danke.

Bild von Markus Kohm

Nur, um das klar zu stellen: Ich hatte nicht vorgeschlagen \pagenumbering aus der Definition von \frontmatter und \mainmatter zu entfernen, sondern die dortigen Anweisungen ggf. auf den gewünschten Nummerierungsstil zu ändern, so dass (unmittelbar) nach \frontmatter und \mainmatter keine zusätzlichen \pagenumbering-Anweisungen mehr notwendig sind.

Die von Dir genannte pdfTeX-Warnung entsteht dann, wenn man gleich nummerierte Seiten in seinem Dokument hat. Das ist aber normalerweise bei der ganz normalen Verwendung von \frontmatter etc. nicht der Fall:

\documentclass[ngerman]{scrbook}
\usepackage{babel,blindtext,hyperref}
\begin{document}
\frontmatter
\blinddocument
\mainmatter
\blinddocument
\backmatter
\blinddocument
\end{document}

Auch wenn man \pagenumbering aus den Definitionen entfernen würde, wäre das nicht so, da dann noch immer keine gleich nummerierten Seiten auftauchen:

\documentclass[ngerman]{scrbook}
\makeatletter
% Originaldefinitionen aus scrbook geklaut und \pagenumbering entfernt:
\renewcommand*\frontmatter{%
  \if@twoside\cleardoubleoddpage\else\clearpage\fi
  \@mainmatterfalse%\pagenumbering{roman}%
}
\renewcommand*\mainmatter{%
  \if@twoside\cleardoubleoddpage\else\clearpage\fi
  \@mainmattertrue%\pagenumbering{arabic}%
}
\makeatother
 
\usepackage{babel,blindtext,hyperref}
\begin{document}
\frontmatter
\blinddocument
\mainmatter
\blinddocument
\backmatter
\blinddocument
\end{document}

Es stellt sich also tatsächlich die Frage, was Du genau gemacht hast, um das Problem auszulösen. Hier ist meine Kristallkugel schlicht überfordert.

Bild von Admin

clmb, bitte beachte künftig, dass bei Fragen grundsätzlich vollständige Minimalbeispiele anzugeben sind, die das Problem verdeutlichen. Das ist auch in »Was kann ich tun, damit meine Probleme schnell eine Lösung finden?« so angegeben.

AFAIR bekommt jeder neue Benutzer einen entsprechenden Hinweis auch mit der Anmeldebestätigung. Auf jeden Fall wirst Du hiermit gebeten, beide von mir verlinkten Beiträge inklusive der dort enthaltenen weiterführenden Links zukünftig zu beachten.

Im konkreten Fall sollte außerdem erwogen werden, einen eigenen Forenbeitrag für das Problem zu eröffnen, da es sich wohl nicht um einen direkten Kommentar zum hier erörterten Dokument handelt, sondern nur indirekt daran angelehnt ist.

Administratorentscheidungen sind grundsätzlich nicht im Forum zu diskutieren. Für Fragen an die Administratoren ist die bekannte Administrator-E-Mail-Adresse oder das Forum Site zu verwenden.

Comments for "Die Hauptdatei thesis.tex" abonnieren