Sie sind hier

Anhangverzeichnis mit eigenem Abbildungs-, Tabellenverzeichnis

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.

Bild von Markus Kohm

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 wie listof=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 Besitzer float, also denselben Besitzer, den auch die Verzeichnisse der Gleitumgebungen figure und table haben. Für die Gleitumgebungsverzeichnisse im Anhang kann dieser also einfach beibehalten werden:

\DeclareNewTOC[%
  listname={Abbildungen im Anhang},% Titel des Verzeichnisses
]{alof}% Dateierweiterung (a=appendix, lof=list of figures)
\DeclareNewTOC[%
  listname={Tabellen im Anhang},% Titel des Verzeichnisses
]{alot}% Dateierweiterung (a=appendix, lot=list of tables)

Für das neue Inhaltsverzeichnis ist es hingegen sinnvoll, einen anderen Besitzer zu wählen. Ich verwende hier willkürlich den Besitzer \jobname:

\DeclareNewTOC[%
  owner=\jobname,
  listname={Inhalt des Anhangs},% Titel des Verzeichnisses
]{atoc}% Dateierweiterung (a=appendix, toc=table of contents)

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:

\newcommand*{\useappendixtocs}{%
  \renewcommand*{\ext@toc}{atoc}%
  \renewcommand*{\ext@figure}{alof}%
  \renewcommand*{\ext@table}{alot}%
}

Wer mag, kann auch eine Anweisung für den Weg zurück definieren:

\newcommand*{\usestandardtocs}{%
  \renewcommand*{\ext@toc}{toc}%
  \renewcommand*{\ext@figure}{lof}%
  \renewcommand*{\ext@table}{lot}%
}

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.

\documentclass[listof=totoc,index=totoc]{scrbook}[2017/02/23]
\usepackage{ifxetex,ifluatex}
\ifcase \ifxetex 1\else\ifluatex 1\else 0\fi\fi\usepackage[utf8]{inputenc}\fi
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
 
\usepackage{makeidx}\makeindex% Nur als Beispiel
 
\usepackage{mwe}
\usepackage{hyperref}% Weil es so in der Frage enthalten war.
\usepackage{bookmark}% Weil das hyperref deutlich verbesser.
 
\DeclareNewTOC[%
  owner=\jobname,
  listname={Inhalt des Anhangs},% Titel des Verzeichnisses
]{atoc}% Dateierweiterung (a=appendix, toc=table of contents)
\DeclareNewTOC[%
  listname={Abbildungen im Anhang},% Titel des Verzeichnisses
]{alof}% Dateierweiterung (a=appendix, lof=list of figures)
\DeclareNewTOC[%
  listname={Tabellen im Anhang},% Titel des Verzeichnisses
]{alot}% Dateierweiterung (a=appendix, lot=list of tables)
 
\makeatletter
\newcommand*{\useappendixtocs}{%
  \renewcommand*{\ext@toc}{atoc}%
  \scr@ifundefinedorrelax{hypersetup}{}{% damit es auch ohne hyperref funktioniert
    \hypersetup{bookmarkstype=atoc}%
  }%
  \renewcommand*{\ext@figure}{alof}%
  \renewcommand*{\ext@table}{alot}%
}
\newcommand*{\usestandardtocs}{%
  \renewcommand*{\ext@toc}{toc}%
  \scr@ifundefinedorrelax{hypersetup}{}{% damit es auch ohne hyperref funktioniert
    \hypersetup{bookmarkstype=toc}%
  }%
  \renewcommand*{\ext@figure}{lof}%
  \renewcommand*{\ext@table}{lot}%
}
\scr@ifundefinedorrelax{ext@toc}{%
  \newcommand*{\ext@toc}{toc}
  \renewcommand{\addtocentrydefault}[3]{%
    \expandafter\tocbasic@addxcontentsline\expandafter{\ext@toc}{#1}{#2}{#3}%
  }
}{}
\makeatother
 
\usepackage{xpatch}
\xapptocmd\appendix{%
  \addpart{\appendixname}
  \useappendixtocs
  \listofatocs
  \listofalofs
  \listofalots
}{}{}
 
 
\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\index{main}}
  \noindent
  \centering
    \begin{tabular}{|c|c|}
      \hline
      a & b\tabularnewline
      \hline\hline
      1 & 2\tabularnewline
      \hline
    \end{tabular}
\end{table}
 
\appendix
\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}
 
\usestandardtocs
\bookmarksetup{startatroot}% siehe bookmark-Anleitung
\printindex% nur als Beispiel
 
\end{document}

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:

  \hypersetup{bookmarkstype=…}%

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

\scr@ifundefinedorrelax{ext@toc}{%
  \newcommand*{\ext@toc}{toc}
  \renewcommand{\addtocentrydefault}[3]{%
    \expandafter\tocbasic@addxcontentsline\expandafter{\ext@toc}{#1}{#2}{#3}%
  }
}{}

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:

\usepackage{longtable}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\LT@c@ption}{%
  \addcontentsline{lot}%
}{%
  \addcontentsline{\ext@table}%
}{}{}
\makeatother

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 !

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 auch listof=flat. Anders als zunächst vermutet, erstreckt sich die Wirkung von listof=flatnicht nur auf Listen von Gleitumgebungen, also Listen mit owner=float, sondern auch auf alle anderen Listen unter Kontrolle des Pakets tocbasic. Einzige Ausnahme ist das Inhaltsverzeichnis mit Endung toc.

Das führt dazu, dass mit listof=entyprefix und dem standardmäßigen toc=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:

\documentclass[listof=totoc,index=totoc,listof=entryprefix]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
 
\usepackage{mwe}
\usepackage{hyperref}
\usepackage{bookmark}
 
\DeclareNewTOC[%
  owner=\jobname,
  listname={Inhalt des Anhangs},
]{atoc}
\DeclareNewTOC[%
  listname={Abbildungen im Anhang},
]{alof}
\DeclareNewTOC[%
  listname={Tabellen im Anhang},
]{alot}
 
\def\listofalofentryname{\listoflofentryname}% gleicher Präfix für Abbildungen im Anhangs-LoF wie im LoF
\def\listofalotentryname{\listoflotentryname}% gleicher Präfix für Tabellen im Anhangs-LoT wie im LoT
 
\makeatletter
\AfterTOCHead[atoc]{\let\if@dynlist\if@tocleft}% <- gleiches Verhalten (gratuated oder flat) wie toc 
\newcommand*{\useappendixtocs}{%
  \renewcommand*{\ext@toc}{atoc}%
  \scr@ifundefinedorrelax{hypersetup}{}{%
    \hypersetup{bookmarkstype=atoc}%
  }%
  \renewcommand*{\ext@figure}{alof}%
  \renewcommand*{\ext@table}{alot}%
}
\newcommand*{\usestandardtocs}{%
  \renewcommand*{\ext@toc}{toc}%
  \scr@ifundefinedorrelax{hypersetup}{}{%
    \hypersetup{bookmarkstype=toc}%
  }%
  \renewcommand*{\ext@figure}{lof}%
  \renewcommand*{\ext@table}{lot}%
}
\scr@ifundefinedorrelax{ext@toc}{%
  \newcommand*{\ext@toc}{toc}
  \renewcommand{\addtocentrydefault}[3]{%
    \expandafter\tocbasic@addxcontentsline\expandafter{\ext@toc}{#1}{#2}{#3}%
  }
}{}
\makeatother
 
\usepackage{xpatch}
\xapptocmd\appendix{%
  \addpart{\appendixname}
  \useappendixtocs
  \listofatocs
  \listofalofs
  \listofalots
}{}{}
 
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\blinddocument
 
\begin{figure}[!h]
\centering
\rule{5cm}{2cm}
\caption{test-fig-main}
\end{figure}
 
\begin{table}[h]
  \caption{test-tab-main\index{main}}
  \noindent
  \centering
    \begin{tabular}{|c|c|}
      \hline
      a & b\tabularnewline
      \hline\hline
      1 & 2\tabularnewline
      \hline
    \end{tabular}
\end{table}
 
\appendix
\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}
 
\usestandardtocs
\bookmarksetup{startatroot}
\end{document}

Alternativ kann man auch mit listof=gratuated das implizite listof=flat wieder aufheben und anschließend die Einträge für Abbildungen und Tabellen entsprechend anpassen:

\KOMAoptions{listof=graduated}% <- aufheben von listof=flat 
\DeclareTOCStyleEntries[ 
  indent=0pt,% <- kein Einzug 
  dynnumwidth% <- automatische Anpassung der benötigten Breite für die Eintragsnummern 
]{default}{figure,table}

Beispiel:

\documentclass[listof=totoc,index=totoc,listof=entryprefix]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
 
\usepackage{mwe}
\usepackage{hyperref}
\usepackage{bookmark}
 
\DeclareNewTOC[%
  owner=\jobname,
  listname={Inhalt des Anhangs},
]{atoc}
\DeclareNewTOC[%
  listname={Abbildungen im Anhang},
]{alof}
\DeclareNewTOC[%
  listname={Tabellen im Anhang},
]{alot}
 
\def\listofalofentryname{\listoflofentryname}% gleicher Präfix für Abbildungen im Anhangs-LoF wie im LoF
\def\listofalotentryname{\listoflotentryname}% gleicher Präfix für Tabellen im Anhangs-LoT wie im LoT
 
\KOMAoptions{listof=graduated}% <- aufheben von listof=flat 
\DeclareTOCStyleEntries[ 
  indent=0pt,% <- kein Einzug 
  dynnumwidth% <- automatische Anpassung der benötigten Breite für die Eintragsnummern 
]{default}{figure,table}
 
\makeatletter
\newcommand*{\useappendixtocs}{%
  \renewcommand*{\ext@toc}{atoc}%
  \scr@ifundefinedorrelax{hypersetup}{}{%
    \hypersetup{bookmarkstype=atoc}%
  }%
  \renewcommand*{\ext@figure}{alof}%
  \renewcommand*{\ext@table}{alot}%
}
\newcommand*{\usestandardtocs}{%
  \renewcommand*{\ext@toc}{toc}%
  \scr@ifundefinedorrelax{hypersetup}{}{%
    \hypersetup{bookmarkstype=toc}%
  }%
  \renewcommand*{\ext@figure}{lof}%
  \renewcommand*{\ext@table}{lot}%
}
\scr@ifundefinedorrelax{ext@toc}{%
  \newcommand*{\ext@toc}{toc}
  \renewcommand{\addtocentrydefault}[3]{%
    \expandafter\tocbasic@addxcontentsline\expandafter{\ext@toc}{#1}{#2}{#3}%
  }
}{}
\makeatother
 
\usepackage{xpatch}
\xapptocmd\appendix{%
  \addpart{\appendixname}
  \useappendixtocs
  \listofatocs
  \listofalofs
  \listofalots
}{}{}
 
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\blinddocument
 
\begin{figure}[!h]
\centering
\rule{5cm}{2cm}
\caption{test-fig-main}
\end{figure}
 
\begin{table}[h]
  \caption{test-tab-main\index{main}}
  \noindent
  \centering
    \begin{tabular}{|c|c|}
      \hline
      a & b\tabularnewline
      \hline\hline
      1 & 2\tabularnewline
      \hline
    \end{tabular}
\end{table}
 
\appendix
\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}
 
\usestandardtocs
\bookmarksetup{startatroot}
\end{document}
Bild von Markus Kohm

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.

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?

\documentclass[listof=totoc,index=totoc,listof=entryprefix]{scrbook}
 
\usepackage{ifxetex,ifluatex}
\ifcase \ifxetex 1\else\ifluatex 1\else 0\fi\fi\usepackage[utf8]{inputenc}\fi
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
 
\usepackage{makeidx}\makeindex% Nur als Beispiel
 
\usepackage{mwe}
\usepackage{hyperref}% Weil es so in der Frage enthalten war.
\usepackage{bookmark}% Weil das hyperref deutlich verbesser.
 
\DeclareNewTOC[%
  owner=\jobname,
  listname={Inhalt des Anhangs},% Titel des Verzeichnisses
]{atoc}% Dateierweiterung (a=appendix, toc=table of contents)
\DeclareNewTOC[%
  listname={Abbildungen im Anhang},% Titel des Verzeichnisses
]{alof}% Dateierweiterung (a=appendix, lof=list of figures)
\DeclareNewTOC[%
  listname={Tabellen im Anhang},% Titel des Verzeichnisses
]{alot}% Dateierweiterung (a=appendix, lot=list of tables)
 
\makeatletter
\newcommand*{\useappendixtocs}{%
  \renewcommand*{\ext@toc}{atoc}%
  \scr@ifundefinedorrelax{hypersetup}{}{% damit es auch ohne hyperref funktioniert
    \hypersetup{bookmarkstype=atoc}%
  }%
  \renewcommand*{\ext@figure}{alof}%
  \renewcommand*{\ext@table}{alot}%
}
\newcommand*{\usestandardtocs}{%
  \renewcommand*{\ext@toc}{toc}%
  \scr@ifundefinedorrelax{hypersetup}{}{% damit es auch ohne hyperref funktioniert
    \hypersetup{bookmarkstype=toc}%
  }%
  \renewcommand*{\ext@figure}{lof}%
  \renewcommand*{\ext@table}{lot}%
}
\scr@ifundefinedorrelax{ext@toc}{%
  \newcommand*{\ext@toc}{toc}
  \renewcommand{\addtocentrydefault}[3]{%
    \expandafter\tocbasic@addxcontentsline\expandafter{\ext@toc}{#1}{#2}{#3}%
  }
}{}
\makeatother
 
\usepackage{xpatch}
\xapptocmd\appendix{%
  \addpart{\appendixname}
  \useappendixtocs
  \listofatocs
  \listofalofs
  \listofalots
}{}{}
 
\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\index{main}}
  \noindent
  \centering
    \begin{tabular}{|c|c|}
      \hline
      a & b\tabularnewline
      \hline\hline
      1 & 2\tabularnewline
      \hline
    \end{tabular}
\end{table}
 
\appendix
\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}
 
\usestandardtocs
\bookmarksetup{startatroot}% siehe bookmark-Anleitung
\printindex% nur als Beispiel
 
\end{document} 

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 ist name. Wird diese Option nicht explizit angegeben, dann wird dafür der Wert der Option type genutzt. Wird dieser auch nicht vorgegeben, dann wird die Dateierweiterung genommen. Im Beispiel werden also alof bzw. alot jeweils auch für die fehlenden Optionen type und name verwendet. Deshalb liefert \listofalofentryname den Präfix "Alof".

Ändern lässt sich das beispielsweise mit

\def\listofalofentryname{\listoflofentryname}
\def\listofalotentryname{\listoflotentryname}

in der Präambel. Aber es lassen sich natürlich auch eigene sprachabhängige Präfixe definieren:

\providecaptionname{ngerman}{\listofalofentryname}{Abb. im Anhang}
\providecaptionname{ngerman}{\listofalotentryname}{Tab. im Anhang}

Alternativ könnte man auch die Option name für die neuen Verzeichnisse setzen:

\DeclareNewTOC[%
  owner=\jobname,
  listname={Inhalt des Anhangs},% Titel des Verzeichnisses
]{atoc}% Dateierweiterung (a=appendix, toc=table of contents)
\DeclareNewTOC[%
  listname={Abbildungen im Anhang},% Titel des Verzeichnisses
  name=\noexpand\listoflofentryname% Präfix der Verzeichniseinträge
]{alof}% Dateierweiterung (a=appendix, lof=list of figures)
\DeclareNewTOC[%
  listname={Tabellen im Anhang},% Titel des Verzeichnisses
  name=\noexpand\listoflotentryname% Präfix der Verzeichniseinträge
]{alot}% Dateierweiterung (a=appendix, lot=list of tables)

Die Option type sollte dagegen nicht geändert werden, da type Bestandteil weiterer Befehlsnamen ist, die im Zusammenhang mit \DeclareNewTOC definiert werden.

Vielen Dank. Funktioniert einwandfrei.

Comments for "Anhangverzeichnis mit eigenem Abbildungs-, Tabellenverzeichnis" abonnieren