Hallo,
beim Versuch ein Dokument mit separaten Verzeichnissen für den Anhang zu erstellen, bin ich auf diesen Beitrag gestoßen, in dem das Problem eines eigenen TOC für den Anhang gelöst wird:
http://www.komascript.de/node/458#comment-5575
Nun möchte ich zusätzlich, dass die Abbildungen und Tabellen, für Hauptdokument (main) und Anhang (appendix), in eigenen Verzeichnissen aufgeführt sind, und diese im jeweiligen TOC erscheinen.
Markus schrieb:
Vermutlich würde ich das aber nicht auf diesem Weg machen, sondern einfach neue Verzeichnisse mit \DeclareNewTOC
definieren und in \appendix
die Makros \ext@figure
und \ext@table
entsprechend umdefinieren. Den Verzeichniseintrag gibt es dann quasi als Zugabe von listof=totoc
automatisch.
Dafür reichen meine Fähigkeiten noch nicht aus. Ich bitte um Hilfe.
Das folgende Beispiel ist dem o. g. Beitrag entnommen und wurde um Beispiele (fig/tab) ergänzt.
In meinem Dokument verwende ich liststotoc
als \documentclass
Option um Abbildungs- und Tabellenverzeichnis im Inhaltsverzeichnis aufzuführen. Im Beispiel-Code wird mit dieser Option nach jedem Verzeichnis zusätzlich eine Seite mit dem Verzeichnisnamen beschriftet, desshalb hier ohne.
% Dieses Beispiel wurde abgeleitet von `appendixtocexample.tex'. % Copyright der Originaldatei: (c) Markus Kohm, 2010-2013 % Die Original-Datei steht unter LPPL und ist zu finden unter % <https://komascript.de/comment/3447#comment-3447>. % Zu den rechtlichen Bedingungen der Weitergabe dieser Datei % siehe die dortigen Hinweise. \documentclass{scrbook}% bliebige Standard- oder KOMA-Script-Klasse \usepackage[ngerman]{babel} \usepackage{blindtext, hyperref} % [Admin-Note: Zu frühes Laden von appendixtoc entfernt.] % Wir wollen das Anhangsverzeichnis im Inhaltsverzeichnis, also sorgen wir % dafür, dass das Paket tocbasic geladen ist (auch, wenn keine % KOMA-Script-Klasse verwendet wird). Das muss unbedingt _vor_ dem Laden von % appendixtoc passieren! \usepackage{tocbasic} % [Admin-Note: Paketcode des Originals entfernt.] \usepackage{appendixtoc}% siehe <https://komascript.de/comment/3447#comment-3447> \setuptoc{appendix}{totoc}% dank tocbasic geht das jetzt so einfach \begin{document} \tableofcontents \listoffigures \listoftables \blinddocument % Es folgen Modifikationen des Originalcodes: \begin{figure}[!h] \centering \rule{5cm}{2cm} \caption{test-fig-main} \end{figure} \begin{table}[h] \caption{test-tab-main} \noindent \centering \begin{tabular}{|c|c|} \hline a & b\tabularnewline \hline\hline 1 & 2\tabularnewline \hline \end{tabular} \end{table} \appendix \listoffigures \listoftables \blinddocument \begin{figure}[!h] \centering \rule{5cm}{2cm} \caption{test-fig-appendix} \end{figure} \begin{table}[h] \caption{test-tab-appendix} \noindent \centering \begin{tabular}{|c|c|} \hline a & b\tabularnewline \hline\hline 1 & 2\tabularnewline \hline \end{tabular} \end{table} \postappendix \makeatletter \@ifundefined{addchap}{% \@ifundefined{addsec}{% \@ifundefined{chapter}{% \section*{Testabschnitt halbwegs nach dem Anhang}% \addcontentsline{toc}{section}{Testabschnitt halbwegs nach dem Anhang}% }{% \chapter*{Testkapitel halbwegs nach dem Anhang} \addcontentsline{toc}{chapter}{Testkapitel halbwegs nach dem Anhang}% }% }{% \addsec{Testabschnitt halbwegs nach dem Anhang}% }% }{% \addchap{Testkapitel halbwegs nach dem Anhang}% } \makeatother \blindtext \end{document}
mfG
[Admin-Edit:] Der unter Verstoß gegen die Lizenz angegebene Code wurde abgeändert, um Übereinstimmung mit der Lizenz zu erreichen.
Mit einem aktuellen KOMA-Script geht alles viel einfacher
Gleich vorab sei erwähnt, dass Option
liststotoc
veraltet ist und nicht mehr verwendet werden sollte. Außerdem sollte ein vollständiges Minimalbeispiel, das sich mit einem Verzeichnisproblem befasst, natürlich wichtige Optionen wielistof=totoc
, die Verzeichniseinträge betreffen, auch enthalten.Das grundsätzliche Vorgehen wurde übrigens bereits in meiner Antwort zur Frage »Inhaltsverzeichnis aufsplitten« gezeigt. Ausführlich behandelt wird die hier gezeigte Lösung auch in meinem DTK-Artikel »Verzeichnisse ohne neue Umgebung« in Ausgabe 3/2017.
Seit der KOMA-Script Pre-Release v3.23.2600 kann man nicht nur die Endung der Hilfsdateien für Abbildungen und Tabellen, sondern auch die Endung der Hilfsdatei für das Inhaltsverzeichnis einfach ändern. Für Abbildungen ist diese bekanntlich im Makro
\ext@figure
gespeichert, für Tabellen in\ext@table
. Für das Inhaltsverzeichnis wurde der Makroname\ext@toc
gewählt.Das Paket tocbasic, das von allen KOMA-Script-Klassen verwendet wird, bietet mit
\DeclareNewTOC
die Möglichkeit, neue Verzeichnisse zu definieren. Diese haben in der Voreinstellung den Besitzerfloat
, also denselben Besitzer, den auch die Verzeichnisse der Gleitumgebungenfigure
undtable
haben. Für die Gleitumgebungsverzeichnisse im Anhang kann dieser also einfach beibehalten werden:Für das neue Inhaltsverzeichnis ist es hingegen sinnvoll, einen anderen Besitzer zu wählen. Ich verwende hier willkürlich den Besitzer
\jobname
:Die Dateierweiterungen in obigen Beispielen wurden übrigens willkürlich gewählt. Die Kommentare geben lediglich an, was ich mir dabei gedacht habe.
Es fehlt nun min. eine Anweisung, mit der von den normalen Endungen toc, lof und lot auf die Anhangsendungen umgeschaltet werden kann:
Wer mag, kann auch eine Anweisung für den Weg zurück definieren:
Jetzt kann man bereits zwischen den Hauptverzeichnissen und den Anhangsverzeichnissen hin- und her schalten und die neuen Verzeichnisse auch direkt ausgeben. In welcher Form die Verzeichnisse ausgegeben werden, kann über Option
listof
(nur für die Gleitumgebungsverzeichnisse) oder über\setuptoc
und\unsettoc
jederzeit bestimmt werden. Näheres zu der Option und den beiden Anweisungen ist der KOMA-Script-Anleitung zu entnehmen. An dieser Stelle sei außerdem empfohlen, die oben verwendeten KOMA-Script-Anweisungen in der Anleitung nachzulesen. Über das Index sind sie nicht schwer zu finden.Bevor ich ein vollständiges Beispiel mit obigem Code zeige, sei noch darauf hingewiesen, dass dies alles ohne das Paket appendixtoc und natürlich auch ohne das nie offiziell unterstützte Alpha-Paket tocstyle funktioniert.
Wer den Code aufmerksam liest, dem wird auffallen, dass ich gegenüber der Erklärung oben noch zwei Erweiterungen vorgenommen habe. Da ist zum einen zweimal eine Zeile der Art:
Das Paket hyperref bzw. dessen Erweiterung bookmark verwendet normalerweise die Einträge in die Hilfsdatei mit der Endung toc für die Bookmarks (aka Outlines, aka Lesezeichen, aka PDF-Inhaltsverzeichnis, aka Jeder-nennt-das-anders). Sobald wir auf die Endung atoc umschalten, werden für die Einträge in das Anhangsinhaltsverzeichnis also keine Bookmarks mehr erzeugt (Links im Anhangsinhaltsverzeichnis gibt es natürlich trotzdem). Über Option
bookmarkstype
kann man hyperref aber mitzuteilen, dass nun die Einträge in die Hilfsdatei mit der angegeben Endung für die Bookmarks verwendet werden. Wer also nicht will, dass die Einträge in das Anhangsverzeichnis in den Bookmarks auftauchen, der löscht diese beiden Zeilen.Außerdem habe ich noch die Zeilen
eingefügt. Diese patchen in frühere Versionen von KOMA-Script wenigstens teilweise die Verwendung von
\ext@toc
. Besser ist jedoch die Warnung ernst zu nehmen, die man erhält, wenn man eine KOMA-Script-Klasse verwendet, die noch nicht auf die Verwendung von\ext@toc
vorbereitet ist.Abschließend sei noch erwähnt, dass nur solche Inhaltsverzeichniseinträge im Anhangsinhaltsverzeichnis landen, die nicht an KOMA-Script (vor allem tocbasic) vorbei vorgenommen wurden. Mit direkten Aufrufen von
\addcontentsline{toc}{…}{…}
schreibt man natürlich auch im Anhang weiterhin in das Hauptinhaltsverzeichnis. Ebenso werden nur solche Gleitumgebungseinträge in das entsprechende Anhangsverzeichnis geschrieben, die korrekt die von LaTeX vorgesehenen Makros\ext@figure
und\ext@table
verwenden. Enthält ein Paket ein hart codiertes\addcontentsline{lot}{table}{…}
an Stelle eines\addcontentsline{\ext@table}{table}{…}
wie das beim beliebten longtable der Fall ist, so geht das natürlich ebenfalls in die Hose. Solche Bugs sollte man ggf. an den Autor des jeweiligen Pakets melden. Bis das Problem bei longtable behoben ist, kann man einfach zusätzlich caption laden, damit dessen Code für den Verzeichniseintrag verwendet wird, oder zu folgendem Patch greifen:Vielen Dank
Mit einem aktuellen KOMA-Script geht alles viel einfacher
sieht deutlich eleganter aus.
\addpart{\appendixname}
entsprechend der obersten verwendeten Gliederungsebene angepasst, z. B.\addchap{\appendixname}
, und dann stimmt die Schriftgröße im TOC auch von allein mit dem Rest überein.Wobei das einleitende Blatt für den Anhang mit
\addpart
durch die Zentrierung natürlich besser aussieht.Vielen Dank für ausführliche Hilfe und Erklärung !
Weiteres Problem bei Verwendung von listof=entryprefix
Durch die Frage Anhangsverzeichnis nicht eingerückt auf golatex.de bin ich auf ein weiteres Problem fürs Anhangsverzeichnis bei Verwendung von
listof=entryprefix
gestoßen:Die Option
listof=entryprefix
setzt ja automatisch auchlistof=flat
. Anders als zunächst vermutet, erstreckt sich die Wirkung vonlistof=flat
nicht nur auf Listen von Gleitumgebungen, also Listen mitowner=float
, sondern auch auf alle anderen Listen unter Kontrolle des Paketstocbasic
. Einzige Ausnahme ist das Inhaltsverzeichnis mit Endung toc.Das führt dazu, dass mit
listof=entyprefix
und dem standardmäßigentoc=graduated
das eigentliche Inhaltsverzeichnis eine hierarchische Form erhält, aber das Anhangsinhaltsverzeichnis dagegen eine tabellarische.Soll das Anhangsinhaltsverzeichnis die gleiche Formatierung erhalten wie das Inhaltsverzeichnis, lässt sich das mit
\AfterTOCHead[atoc]{\let\if@dynlist\if@tocleft}% <- gleiches Verhalten (gratuated oder flat) wie toc
erreichen.
Beispiel:
Alternativ kann man auch mit
listof=gratuated
das implizitelistof=flat
wieder aufheben und anschließend die Einträge für Abbildungen und Tabellen entsprechend anpassen:Beispiel:
Bug?
Dass die Klassen bei
listof=flat
\if@dynlist
direkt ändern und das nicht auf Verzeichnisse des Besitzer float beschränken ist durchaus kritisch zu sehen. Das werde ich möglicherweise als Bug einstufen und entsprechend ändern. Wobei eigentlich nicht die Änderung von\if@dynlist
das Problem ist, sondern dass der Hook, der diesen Schalter verarbeitet für alle tocbasic-Verzeichnisse angewendet wird.Eigentlich ist es inzwischen auch eher unpraktisch, bei den Verzeichnissen von einem "Besitzer" zu sprechen. Ich hätte das eher Klasse, Kategorie o. ä. nennen sollen und dann das Inhaltsverzeichnis der Kategorie ToC zuordnen. toc=graduated|flat sollte dann ebenfalls auf dieser Kategorie arbeiten. Dann könnte man auch das Anhangsverzeichnis ganz einfach dieser Kategorie zuordnen, wenn man ein einheitliches Verhalten von Inhalts- und Anhangsverzeichnis will. Nachträglich owner in category umzuwidmen wäre nicht das Problem. Den diesbezüglichen, tatsächlichen Wert für das Inhaltsverzeichnis zu ändern, wäre hingegen inkompatibel. Ich weiß leider nicht, ob das irgendwo draußen in der Welt zu einem Problem führen würde.
Das Anhangsverzeichnis verfolgt mich jetzt schon seit Jahrzehnten und wird mich so schnell wohl nicht loslassen, zumal da jeder etwas anderes will und die Anforderungen nicht selten sehr abstrus sind. Ich finde es übrigens noch immer generell eher unpraktisch. Der Leser muss so nämlich wissen, ob etwas im Anhang oder im Hauptteil steht. Sonst sucht er womöglich im falschen Verzeichnis und findet es deshalb nicht.
Problem mit globaler Option listof=entryprefix
Mir ist ein kleiner aber unschöner Fehler bei der Verwendung der besseren Version zusammen mit der KOMA-Option listof=entryprefix aufgefallen. Im Abb.- und Tab.-Verzeichnis des Anhangs erscheint ein Alot, statt den gewollten Bezeichnungen Tabelle bzw. Abbildung. Wie kann man das beheben?
Dokumentiertes Verhalten
Das entspricht dem dokumentierten Verhalten, ist aber leicht änderbar.
Der Befehl
\DeclareNewTOC
kennt noch eine ganze Reihe weiterer Optionen. Zuständig für die Präfixe der Listeneinträge istname
. Wird diese Option nicht explizit angegeben, dann wird dafür der Wert der Optiontype
genutzt. Wird dieser auch nicht vorgegeben, dann wird die Dateierweiterung genommen. Im Beispiel werden alsoalof
bzw.alot
jeweils auch für die fehlenden Optionentype
undname
verwendet. Deshalb liefert\listofalofentryname
den Präfix "Alof".Ändern lässt sich das beispielsweise mit
in der Präambel. Aber es lassen sich natürlich auch eigene sprachabhängige Präfixe definieren:
Alternativ könnte man auch die Option
name
für die neuen Verzeichnisse setzen:Die Option
type
sollte dagegen nicht geändert werden, datype
Bestandteil weiterer Befehlsnamen ist, die im Zusammenhang mit\DeclareNewTOC
definiert werden.Vielen Dank. Funktioniert
Vielen Dank. Funktioniert einwandfrei.