Anhangsverzeichnis?

Hallo Welt;

ich stecke gerade in meiner Diplomarbeit und lerne mit wachsender Begeisterung die Features von Komascript zu schätzen; nichtsdestotrotz gibt es eine Funktionalität, deren Realisierbarkeit mir noch nicht so recht klar ist:

Unsere Form-Vorgaben erfordern, daß die Anhänge im "Inhaltsverzeichnis" nur als "Anhang" referenziert werden und der Teil "Anhang" mit einem separaten Verzeichnis aller existenten Anhänge beginnt.

Kann man sowas realisieren, ohne dafür allzu große Verrenkungen machen zu müssen? Hat jemand derartiges schon einmal versucht / gebraucht?

Danke schon im Voraus und bis dann,
Kristian

Darstellungsoptionen

Wählen Sie hier Ihre bevorzugte Anzeigeart für Kommentare und klicken Sie auf „Einstellungen speichern“ um die Änderungen zu übernehmen.

Danke Markus!

Danke Markus! Ganz naheliegend war es für mich als Einsteiger nicht, aber mit deinem Hinweis ist der Groschen gefallen. :)
So funktioniert's: \settocconditional{appendix}{true}\tableofcontents

Viele Grüße,
Michael

Anhänge zusätzlich im TOC aufführen?

Hallo Markus,

gibt es eine simple Möglichkeit, die Anhänge sowohl im Anhangs- als auch im regulären Inhaltsverzeichnis aufzuführen?

Viele Grüße,
Michael

Ich verstehe die Frage

Ich verstehe die Frage vermutlich nicht. Was hindert Dich daran mit \settocconditional vor \tableofcontents zusätzlich zum Abschnitt main auch noch den Abschnitt appendix zu aktivieren? Die (inzwischen mehrfach erweiterten) Kommentar zu meinem Beispielcode sollten diesbezüglich eigentlich genügend Erklärung bieten.

Funktioniert super. Danke!

Funktioniert super.

Vielen, vielen Dank und beste Grüße!
Michael

Anhangsverzeichnis verallgemeinert mit tocstyle

Da es immer wieder Nachfragen zu dem Anhangsverzeichnis gab, habe ich mich heute hingesetzt und eine Version gebastelt, die flexibler ist. Diese Version basiert auf tocstyle. Theoretisch könnte man die Verzeichnisverdopplung auch mit dem \@fileswfalse-Trick aus dem ursprünglichen Code erreichen. Das eigentlich neue an der neuen Version ist, dass man nach dem Anhang auch wieder Kapitel wie das Literaturverzeichnis oder den Index dem Hauptverzeichnis zuordnen kann, statt sie dem Anhangsverzeichnis zuzuordnen. Und hier kommt das Minimalbeispiel mit dem Code:

%
% Dies ist Datei `appendixtocexample.tex'
% Copyright (c) Markus Kohm, 2010-
% Diese Datei steht unter LPPL 1.3c.
% Wird diese Datei abgeändert, so handelt es sich um ein abgeleitetes Werk
% im Sinne der LPPL. Dies bedeutet u. a. dass in diesem Fall darauf
% hinzuweisen ist, dass der hier im Copyright-Vermerk angegebene Autor,
% Markus Kohm, für den Inhalt nicht verantwortlich und für keinerlei
% Support oder Auskünfte heranzuziehen ist!
%
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{tocstyle}
\usetocstyle{KOMAlike}
 
\makeatletter
% Die folgende Anweisung wird vermutlich irgendwann in scrlfile.sty eingebaut.
% Bis dahin ist es notwendig, sie selbst zu definieren, damit man innerhalb
% von \BeforeClosingMainAux \addtocontents verwenden kann:
\providecommand{\protected@immediate@write}[3]{%
  \begingroup
    \let\thepage\relax
    #2%
    \let\protect\@unexpandable@protect
    \edef\reserved@a{\immediate\write#1{#3}}%
    \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
 
% Die folgende Umgebung wird verwendet, um innerhalb der toc-Datei einzelne
% Bereiche ein- und ausschalten zu können. In die toc-Datei wird die Umgebung
% dabei jeweils als \begin{tocconditional}{BEREICH}...\end{tocconditional}
% eingefügt.
\newenvironment*{tocconditional}[1]{%
  \expandafter\ifx\csname if@toccond@#1\expandafter\endcsname
                  \csname iftrue\endcsname
  \else
    \value{tocdepth}=-10000\relax
  \fi
  \typeout{tocdepth in `#1': \the\c@tocdepth}%
}{%
}
 
% Gleich nach dem Öffnen der toc-Datei beginnen wir den Haupt-Bereich "main":
\AtBeginDocument{%
  \addtocontents{toc}{\string\begin{tocconditional}{main}}
}
% Und der letzte Bereich endet am Ende der toc-Datei.
\BeforeClosingMainAux{%
  \begingroup
    \let\protected@write\protected@immediate@write
    \addtocontents{toc}{\string\end{tocconditional}}%
  \endgroup
}
 
% Hier können nun neue Bereiche definiert (wie man das
% macht zeigen wir gleich im Anschluss) ...
\newcommand*{\newtocconditional}[2][false]{%
  \expandafter\newif\csname if@toccond@#2\endcsname
  \csname @toccond@#2#1\endcsname
}
% ... und ein- oder ausgeschaltet werden.
% (Beispiele für die Verwendung von \settocconditional sind
% weiter unten bei der Definition von \appendixtableofcontents
% zu finden.)
\newcommand*{\settocconditional}[2]{%
  \csname @toccond@#1#2\endcsname
}
 
% Neben dem (bereits aktivierten) Hauptbereich ...
\newtocconditional[true]{main}
% ... definieren wir noch einen (noch nicht aktivierten)
% Bereich für den Anhang.
\newtocconditional{appendix}
 
% Mit dem Anhang geben wir einerseits das Anhangsverzeichnis aus,
% andererseits beenden wir den aktuellen Bereich in der toc-Datei und beginnen
% den neuen Bereich "appendix". Damit im Haupt-Inhaltsverzeichnis ein Eintrag
% für das Anhangsverzeichnis erscheint, verwenden wir \addchap und zwar noch
% bevor der letzte Bereich geschlossen wird. Wenn wir es ganz sicher machen
% wollten, müssten wir die auskommentierten Zeilen noch aktivieren. So
% verlassen wir uns einfach darauf, dass vor dem appendix-Bereich der
% main-Bereich lag.
\g@addto@macro\appendix{%
%  \addtocontents{toc}{\string\end{tocconditional}^^J
%    \string\begin{tocconditional}{main}}%
  \addchap{Anhangsverzeichnis}%
  \addtocontents{toc}{\string\end{tocconditional}^^J
    \string\begin{tocconditional}{appendix}}%
  \appendixtableofcontents
}
 
% Jetzt definieren wir das Anhangsverzeichnis selbst als Alias für die
% toc-Datei. Dabei wird aber der Hauptbereich "main" deaktiviert und der
% Anhangsbereich "appendix" aktiviert.
\newcommand*{\appendixtableofcontents}{%
  \showtoc[{ %
    \aliastoc{\tocstyleTOC}{toc}%
    \settocconditional{main}{false}%
    \settocconditional{appendix}{true}%
  }]{toc}%
}
 
% Auch wenn man einen Anhang normalerweise nicht beenden kann, so ist es
% ggf. erwünscht, dass Literaturverzeichnis, Index etc. zwar nach den Kapiteln
% des Anhangs kommen, aber dem Hauptverzeichnis zugeordnet werden sollen. Also
% benötigen wir eine Anweisung, um in der toc-Datei den aktuellen Bereich zu
% beenden und wieder einen Hauptbereich einzuschalten:
\newcommand*{\postappendix}{%
  \addtocontents{toc}{\string\end{tocconditional}^^J%
      \string\begin{tocconditional}{main}}%
  \clearpage
}
 
\makeatother
 
\begin{document}
\tableofcontents
\blinddocument
 
\appendix
\blinddocument
 
\postappendix
\addchap{Testkapitel halbwegs nach dem Anhang}
 
\end{document}
Ich denke, die Kommentare genügen für's erste zur Dokumentation. Achja: Die \typeout-Anweisungen dienen derzeit noch dem Debugging. Man kann die natürlich auch weglassen. Wenn etwas nicht funktioniert, können sie aber nützliche Anhaltspunkte liefern.

TOC: Punkte auf chapter-Ebene

Hallo Markus,
dein Codeschnipsel für das Anhangverzeichnis funktioniert einfach wunderbar, danke dafür!

Nun taucht bei mir jedoch ein kleines Problem mit der Formatierung des Inhaltsverzeichnisses auf.
Ich verwende scrrprt und möchte im Inhaltsverzeichnis die horizontale Punkte-Linie auch auf chapter-Ebene aktivieren.

Das habe ich bislang so gemacht:

%Punkte im TOC auch auf chapter-Ebene
\renewcommand{\cftchapleader}{\cftdotfill{\cftchapdotsep}}% Punkte nicht fett
\renewcommand{\cftchapdotsep}{\cftdotsep}
\renewcommand*{\chapterformat}{%
	\chapappifchapterprefix{\ }\thechapter\autodot~~~~
}

Das Ergebnis war einwandfrei.

Nach dem Einfügen deines Codeschnipsels in die Präambel funktioniert es jedoch nicht mehr. Ungeachtet dessen, ob ich im Dokument den Befehl \appendix nutze oder nicht.
Dabei macht es auch keinen Unterschied, ob ich deinen Code vor oder nach den o.g. Zeilen einfüge.

Dein Code scheint die o.g. Aufrufe irgendwie zu blockieren oder selbst neu zu definieren.
Brauchst du ein Minimalbeispiel oder kannst du ad hoc sagen, ob da codemäßig etwas kollidiert?
Hast du eine Lösung parat?

Viele Grüße,
Michael

Aus Deinem Code-Schnippsel

Aus Deinem Code-Schnippsel schließe ich, dass Du irgend ein Paket zur Konfiguration von Verzeichnissen verwendest. Da tocstyle selbst auch so ein Paket ist, gibt es dann also mehrere Pakete, die zumindest teilweise an den gleichen Stellen Änderungen vornehmen. Das kann nicht funktionieren.

Das sollte für Dich aber kein Problem sein, denn in der Anleitung zu tocstyle ist dokumentiert, wie man Pünktchen auf Kapitelebene bekommt.

Darüber hinaus ist mein Code im Gegensatz zu Deinem kein Schnippsel, sondern ein vollständiges Minimalbeispiel.

Style-Anpassung und Abb./Tab.-Präfix?

Hallo Markus,
ich habe bislang tocloft verwendet, die Kollisionen kann ich natürlich nachvollziehen. Daher habe ich beschlossen, auf dein tocstyle-Paket umzusteigen, jetzt habe ich allerdings noch 2 Fragen.

Ich würde gern den KOMAlike-Style verwenden, jedoch mit Punkten auf chapter-Ebene. Alternativ den allwithdot-Style, jedoch mit fettgedruckten Seitenzahlen. Letztendlich also eine Mischung aus diesen beiden.

Eine zweite Anpassung die ich gern machen würde bezieht sich auf listoffigures und listoftables.
Ich würde in den Verzeichnissen gern das entsprechende Präfix vor die Nummerierung setzen, also "Abb. 1.1: xyz" bzw. "Tab. 1.1: abc".

Es ist mir als LaTeX-Neuling leider auch nach längerem Studium der Doku nicht gelungen, die korrekten Befehle zu finden, kannst du helfen?

Beste Grüße,
Michael

Folgendes nach dem Laden von

Folgendes nach dem Laden von tocstyle in meinem Beispiel einfügen:

\newtocstyle[KOMAlike][leaders]{KOMAlikewithdot}{}% Neuen Stil abgeleitet von
                                % KOMAlike erstellen, wobei das Feature
                                % leaders nicht von KOMAlike mit übernommen
                                % wird.
                                % (tocstyle.pdf, 2009/11/09, Seite 9 sowie 
                                % Seite 29, Code-Zeile 772)
\usetocstyle{KOMAlikewithdot}
\settocfeature[lof]{entryhook}{Abb.\nobreakspace}% (tocstyle.pdf, 2009/11/09,
                                % Seite 8)
\settocfeature[lot]{entryhook}{Tab.\nobreakspace}% (tocstyle.pdf, 2009/11/09,
                                % Seite 8)

Dafür dann natürlich die andere \usetocstyle-Anweisung aus meinem Beispiel entfernen.

Vielen Dank!! Jetzt noch Einzug anpassen?

Hallo Markus,
VIELEN DANK, so funktioniert es super und das Paket tocloft wird vollkommen überflüssig. :)

Für ein optimales Ergebnis noch eine letzte Frage:
Ich möchte Abbildungs-, Tabellen- und Anhangsverzeichnis linksbündig ausrichten, ohne den standardmäßigen Einzug, der sich wahrscheinlich aus der Definition der section-Ebene im TOC ergibt?!

Das Kommando \noindent vor dem Setzen der Präfixe von Abbildungs- und Tabellenverzeichnis hat leider keinen Effekt an dieser Stelle.
Ein funktionierender Workaround wäre die Nutzung von \hspace{-0.72cm}. Das erscheint mir aber etwas zu sehr geschustert. Geht es vielleicht auch eleganter?
Beim Anhangverzeichnis bin ich vollkommen ratlos, an welcher Stelle ich ansetzen muss.

Hier mein angepasstes Minimalbeispiel:

\documentclass[parskip]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{caption}
 
\usepackage{tocstyle}
\newtocstyle[KOMAlike][leaders]{KOMAlikewithdot}{}% Neuen Stil abgeleitet von
                                % KOMAlike erstellen, wobei das Feature
                                % leaders nicht von KOMAlike mit übernommen
                                % wird.
                                % (tocstyle.pdf, 2009/11/09, Seite 9 sowie 
                                % Seite 29, Code-Zeile 772)
\usetocstyle{KOMAlikewithdot}
\settocfeature[lof]{entryhook}{\noindent Abb.\nobreakspace}% (tocstyle.pdf, 2009/11/09,
                                % Seite 8)
\settocfeature[lot]{entryhook}{\noindent Tab.\nobreakspace}% (tocstyle.pdf, 2009/11/09,
                                % Seite 8)
 
\makeatletter
% Die folgende Anweisung wird vermutlich irgendwann in scrlfile.sty eingebaut.
% Bis dahin ist es notwendig, sie selbst zu definieren, damit man innerhalb
% von \BeforeClosingMainAux \addtocontents verwenden kann:
\providecommand{\protected@immediate@write}[3]{%
  \begingroup
    \let\thepage\relax
    #2%
    \let\protect\@unexpandable@protect
    \edef\reserved@a{\immediate\write#1{#3}}%
    \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
 
% Die folgende Umgebung wird verwendet, um innerhalb der toc-Datei einzelne
% Bereiche ein- und ausschalten zu können. In die toc-Datei wird die Umgebung
% dabei jeweils als \begin{tocconditional}{BEREICH}...\end{tocconditional}
% eingefügt.
\newenvironment*{tocconditional}[1]{%
  \expandafter\ifx\csname if@toccond@#1\expandafter\endcsname
                  \csname iftrue\endcsname
  \else
    \value{tocdepth}=-10000\relax
  \fi
  \typeout{tocdepth in `#1': \the\c@tocdepth}%
}{%
}
 
% Gleich nach dem Öffnen der toc-Datei beginnen wir den Haupt-Bereich "main":
\AtBeginDocument{%
  \addtocontents{toc}{\string\begin{tocconditional}{main}}
}
% Und der letzte Bereich endet am Ende der toc-Datei.
\BeforeClosingMainAux{%
  \begingroup
    \let\protected@write\protected@immediate@write
    \addtocontents{toc}{\string\end{tocconditional}}%
  \endgroup
}
 
% Hier können nunr neue Bereiche definiert ...
\newcommand*{\newtocconditional}[2][false]{%
  \expandafter\newif\csname if@toccond@#2\endcsname
  \csname @toccond@#2#1\endcsname
}
% Und ein- oder ausgeschaltet werden:
\newcommand*{\settocconditional}[2]{%
  \csname @toccond@#1#2\endcsname
}
 
% Neben dem Hauptbereich ...
\newtocconditional[true]{main}
% definieren wir noch einen Bereich für den Anhang.
\newtocconditional{appendix}
 
% Mit dem Anhang geben wir einerseits das Anhangsverzeichnis aus,
% andererseits beenden wir den aktuellen Bereich in der toc-Datei und beginnen
% den neuen Bereich "appendix". Damit im Haupt-Inhaltsverzeichnis ein Eintrag
% für das Anhangsverzeichnis erscheint, verwenden wir \addchap und zwar noch
% bevor der letzte Bereich geschlossen wird. Wenn wir es ganz sicher machen
% wollten, müssten wir die auskommentierten Zeilen noch aktivieren. So
% verlassen wir uns einfach darauf, dass vor dem appendix-Bereich der
% main-Bereich lag.
\g@addto@macro\appendix{%
%  \addtocontents{toc}{\string\end{tocconditional}^^J
%    \string\begin{tocconditional}{main}}%
  \addchap{Anhang}%
  \addtocontents{toc}{\string\end{tocconditional}^^J
    \string\begin{tocconditional}{appendix}}%
  \appendixtableofcontents
}
 
% Jetzt definieren wir das Anhangsverzeichnis selbst als Alias für die
% toc-Datei. Dabei wird aber der Hauptbereich "main" deaktiviert und der
% Anhangsbereich "appendix" aktiviert.
\newcommand*{\appendixtableofcontents}{%
  \showtoc[{ %
    \aliastoc{\tocstyleTOC}{toc}%
    \settocconditional{main}{false}%
    \settocconditional{appendix}{true}%
  }]{toc}%
}
 
% Auch wenn man einen Anhang normalerweise nicht beenden kann, so ist es
% ggf. erwünscht, dass Literaturverzeichnis, Index etc. zwar nach den Kapiteln
% des Anhangs kommen, aber dem Hauptverzeichnis zugeordnet werden sollen. Also
% benötigen wir eine Anweisung, um in der toc-Datei den aktuellen Bereich zu
% beenden und wieder einen Hauptbereich einzuschalten:
\newcommand*{\postappendix}{%
  \addtocontents{toc}{\string\end{tocconditional}^^J%
      \string\begin{tocconditional}{main}}%
  \clearpage
}
 
\makeatother
 
\begin{document}
\tableofcontents
\listoffigures
\listoftables
 
\blinddocument
\begin{minipage}{\textwidth}
	\centering
	\captionsetup{type=figure}
	Bild
	\caption{Ein Bild}
\end{minipage}
 
\blindtext
 
\begin{minipage}{\textwidth}
	\centering
	\captionsetup{type=table}
	Tabelle
	\caption{Eine Tabelle}
\end{minipage}
 
\appendix
\renewcommand{\thechapter}{\Alph{chapter}}
\setcounter{chapter}{1}
\newpage
\section{Anhang 1}
\blindtext
\newpage
\section{Anhang 2}
\blindtext
\postappendix
 
\end{document}

Einzug oder nicht per Option

Füg mal

\selecttocstyleoption{tocflat}
nach \tableofcontents ein. Die Anweisung ist bisher nur im Implementierungsteil der tocstyle-Anleitung zu finden. Die Optionen, die man hier als Argument angeben kann, sind jedoch dieselben, die auch beim Laden angegeben werden können und die in Anhang A vorgeführt sind.

\appendix nicht definiert

Das Beispiel kann ich problemlos übersetzen. Im Kontext meines eigenen Projekts gibt es allerdings eine Fehlermeldung, laut der \appendix nicht definiert ist. Womit könnte das zusammenhängen?

Rate, rate, was ist das

Du verwendest vermutlich eine Klasse, bei der \appendix nicht definiert ist, also insbesondere keine KOMA-Script-Klasse und keine Standard-Klasse. Bei denen ist \appendix nämlich definiert.

Danke! (Fast) perfekt!

Hallo Markus,

das Beispiel ist super, vielen Dank für diese Lösung!
Ist es noch möglich, die Position des Anhangsverzeichnisses zu ändern? Ich bräuchte es bereits vor dem eigentlichen Text - der Anhang an sich muss allerdings weiterhin nach dem Text kommen!

Viele Grüße
Vincent

Klar

Du musst dazu nur \addchap{Anhangsvereichnis} und \appendixtableofcontents aus der Erweiterung von \appendix entfernen und die beiden Anweisungen an der Stelle einbauen, an der das Verzeichnis stehen soll. Statt \addchap kannst Du natürlich auch \chapter* ggf. gefolgt von \markboth{Anhangsverzeichnis}{Anhangsverzeichnis} o. ä. verwenden.

Natürlich kann man die jeweils gewählte Erzeugung der Überschrift für das Verzeichnis auch noch in die Definition von \appendixtableofcontents mit einbauen. Dann kann man gewünschte Änderungen wieder einfach in der Definition in der Präambel vornehmen.

Achso: Vielleicht wäre der Makroname \tableofappendixcontents sinnvoller. Ich muss zugeben, dass ich mir bei der raschen Implementierung über die Namen von Makros oft wenig Gedanken mache …

Perfekt!

Wenn man weiß, wo man ansetzen muss ist das eine Sache von 10 Sekunden....aber wehe, wenn nicht... :-)

Vielen Dank!!!!

Gewusst wie

Tja, »Gewusst wie« ist inzwischen das Hauptkapital, über das wir verfügen können. Vielleicht ist es ja dumm, wenn ich versuche, anderen dieses Kapital ebenfalls zu bilden. Trotzdem ist mein Hauptzweck hier Fortgeschrittenen- und Expertenwissen bei anderen zu bilden, nicht es bei mir eifersüchtig zu bewahren.

neues (altes) Problem...

Hallo Expertengemeinde!

Ich bin zurück mit einem neuen (alten) Problem:
Heute ist mir aufgefallen, dass von Anfang an die Seitenzahlen im Anhangsverzeichnis falsch waren. Bei jeder Abbildung im Anhang steht die Seitenzahl der ersten Anhangsseite.
Beispiel: Der Text endet auf Seite 80. Auf Seite 81 steht: "A. ANHANG"
Auf S. 82 ist die erste Anhangsabbildung usw...
Im Anhangsverzeichnis steht allerdings:
Anhang A.1......81
Anhang A.2......81
Anhang A.3......81

Ich hoffe, das Problem wird dadurch klar.

Leider habe ich es bisher trotz 3-stündigen Herumprobierens nicht geschafft, ein MB zu schreiben, in dem der gleiche Fehler auftritt.
Deshalb versuche ich es weiterhin, wollte aber schon einmal fragen, ob jmd ein ähnliches Problem und dessen Lösung kennt oder eine Idee hat?

Viele Grüße
Vincent

MB

So, ich hoffe, ich habe es jetzt geschafft, ein Beispiel zu erzeugen, das den Sachverhalt klar macht...

\documentclass[12pt,a4paper,bibliography=totoc]{scrreprt}
 
\usepackage{lmodern}
\usepackage[latin1,ansinew]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{tocstyle}
\usetocstyle{KOMAlike}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{hyperref}
 
\makeatletter
% Die folgende Anweisung wird vermutlich irgendwann in scrlfile.sty eingebaut.
% Bis dahin ist es notwendig, sie selbst zu definieren, damit man innerhalb
% von \BeforeClosingMainAux \addtocontents verwenden kann:
\providecommand{\protected@immediate@write}[3]{%
  \begingroup
    \let\thepage\relax
    #2%
    \let\protect\@unexpandable@protect
    \edef\reserved@a{\immediate\write#1{#3}}%
    \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
 
% Die folgende Umgebung wird verwendet, um innerhalb der toc-Datei einzelne
% Bereiche ein- und ausschalten zu können. In die toc-Datei wird die Umgebung
% dabei jeweils als \begin{tocconditional}{BEREICH}...\end{tocconditional}
% eingefügt.
\newenvironment*{tocconditional}[1]{%
  \expandafter\ifx\csname if@toccond@#1\expandafter\endcsname
                  \csname iftrue\endcsname
  \else
    \value{tocdepth}=-10000\relax
  \fi
  \typeout{tocdepth in `#1': \the\c@tocdepth}%
}{%
}
 
% Gleich nach dem Öffnen der toc-Datei beginnen wir den Haupt-Bereich "main":
\AtBeginDocument{%
  \addtocontents{toc}{\string\begin{tocconditional}{main}}
}
% Und der letzte Bereich endet am Ende der toc-Datei.
\BeforeClosingMainAux{%
  \begingroup
    \let\protected@write\protected@immediate@write
    \addtocontents{toc}{\string\end{tocconditional}}%
  \endgroup
}
 
% Hier können nunr neue Bereiche definiert ...
\newcommand*{\newtocconditional}[2][false]{%
  \expandafter\newif\csname if@toccond@#2\endcsname
  \csname @toccond@#2#1\endcsname
}
% Und ein- oder ausgeschaltet werden:
\newcommand*{\settocconditional}[2]{%
  \csname @toccond@#1#2\endcsname
}
 
% Neben dem Hauptbereich ...
\newtocconditional[true]{main}
% definieren wir noch einen Bereich für den Anhang.
\newtocconditional{appendix}
 
% Mit dem Anhang geben wir einerseits das Anhangsverzeichnis aus,
% andererseits beenden wir den aktuellen Bereich in der toc-Datei und beginnen
% den neuen Bereich "appendix". Damit im Haupt-Inhaltsverzeichnis ein Eintrag
% für das Anhangsverzeichnis erscheint, verwenden wir \addchap und zwar noch
% bevor der letzte Bereich geschlossen wird. Wenn wir es ganz sicher machen
% wollten, müssten wir die auskommentierten Zeilen noch aktivieren. So
% verlassen wir uns einfach darauf, dass vor dem appendix-Bereich der
% main-Bereich lag.
\g@addto@macro\appendix{%
%  \addtocontents{toc}{\string\end{tocconditional}^^J
%    \string\begin{tocconditional}{main}}%
 
  \addtocontents{toc}{\string\end{tocconditional}^^J
    \string\begin{tocconditional}{appendix}}%
 
}
 
% Jetzt definieren wir das Anhangsverzeichnis selbst als Alias für die
% toc-Datei. Dabei wird aber der Hauptbereich "main" deaktiviert und der
% Anhangsbereich "appendix" aktiviert.
\newcommand*{\appendixtableofcontents}{%
  \showtoc[{ %
    \aliastoc{\tocstyleTOC}{toc}%
    \settocconditional{main}{false}%
    \settocconditional{appendix}{true}%
  }]{toc}%
}
 
% Auch wenn man einen Anhang normalerweise nicht beenden kann, so ist es
% ggf. erwünscht, dass Literaturverzeichnis, Index etc. zwar nach den Kapiteln
% des Anhangs kommen, aber dem Hauptverzeichnis zugeordnet werden sollen. Also
% benötigen wir eine Anweisung, um in der toc-Datei den aktuellen Bereich zu
% beenden und wieder einen Hauptbereich einzuschalten:
\newcommand*{\postappendix}{%
  \addtocontents{toc}{\string\end{tocconditional}^^J%
      \string\begin{tocconditional}{main}}%
  \clearpage
}
 
\makeatother
 
\begin{document}
\thispagestyle{empty}
 
 
\pagenumbering{roman} 
\setcounter{page}{2}
 
\tableofcontents
 
\addchap{Anhangverzeichnis}
\appendixtableofcontents
 
\chapter{Einleitung}
Das ist die Einleitung
 
\chapter{Grundlagen}
Das ist Kapitel 1
\section{Gliederungspunkt}
Mit Unterpunkt 1.1
 
\clearpage
\addcontentsline{toc}{chapter}{Anhang}
 
\appendix
 
 
\chapter{Anhang}
\captionsetup[figure]{list=no}
\captionsetup[table]{list=no}
 
\addcontentsline{toc}{section}{Abbildung \ref{Anhang1} \nameref{Anhang1}}
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption{Anhang1}\label{Anhang1}
\end{figure} 
 
\addcontentsline{toc}{section}{Abbildung \ref{Anhang2} \nameref{Anhang2}}
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption{Anhang2}\label{Anhang2}
\end{figure} 
 
 
\addcontentsline{toc}{section}{Abbildung \ref{Anhang3} \nameref{Anhang3}}
\begin{figure}
\centering
\rule{5cm}{5cm}
\caption{Anhang3}\label{Anhang3}
\end{figure} 
 
 
 
\end{document}

Gleitumgebungen gleiten!

Und da eine \addcontentsline-Anweisung keinen Platz benötigt, passen alle drei noch auf die erste Seite. Wenn Du keine Gleitumgebung willst, solltest Du keine verwenden. Wenn Du wirklich Gleitumgebungen willst, dann müssen alle Anweisungen, die sich auf das Innere der Gleitumgebung beziehen auch innerhalb der Gleitumgebung stehen.

Man braucht dafür zwei Dinge

Zum einen muss man irgendwie das Inhaltsverzeichnis zweimal einlesen. Das funktioniert mit \tableofcontents normalerweise nicht, da innerhalb von \tableofcontents nach dem Lesen der toc-Datei diese neu zum Schreiben angelegt wird. LaTeX verfügt aber über den internen Schalter \if@filesw, der angibt, ob Hilfsdateien neu angelegt werden dürfen oder nicht. Man kann also eine neue Anweisung definieren, die diesen Schalter innerhalb einer Gruppe zuerst so einstellt, dass Hilfsdateien nicht neu angelegt werden und dann \tableofcontents ausgeführt wird.

Mit dem zweimaligen Einlesen ist es aber nicht getan. Es muss auch dafür gesorgt werden, dass beim ersten Einlesen nur die Einträge bis zum Anhang ausgegeben werden und beim zweiten Einlesen die Einträge ab dem Anhang. Bei LaTeX regelt der Zähler tocdepth bis zu welcher Gliederungsebene Einträge im Verzeichnis ausgegeben werden. Man müsste also im Hauptverzeichnis ab dem Anhang tocdepth auf einen so kleinen Wert setzen, dass gar nichts mehr ausgegeben wird. Beim Anhangsverzeichnis müsste man umgekehrt erst tocdepth auf den kleinen Wert setzen und dann aber dem Anhang wieder auf den normalen Wert. Das erreicht man am besten, indem man in die toc-Datei eine Anweisung schreibt, die man je nach Verzeichnis umdefinieren kann.

Insgesamt könnte das dann wie folgt aussehen:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\makeatletter% --> De-TeX-FAQ
\newcommand*{\maintoc}{% Hauptinhaltsverzeichnis
  \begingroup
    \@fileswfalse% kein neues Verzeichnis öffnen
    \renewcommand*{\appendixattoc}{% Trennanweisung im Inhaltsverzeichnis
      \value{tocdepth}=-10000 % lokal tocdepth auf sehr kleinen Wert setzen
    }%
    \tableofcontents% Verzeichnis ausgeben
  \endgroup
}
\newcommand*{\appendixtoc}{% Anhangsinhaltsverzeichnis
  \begingroup
    \edef\@alltocdepth{\the\value{tocdepth}}% tocdepth merken
    \setcounter{tocdepth}{-10000}% Keine Verzeichniseinträge
    \renewcommand*{\contentsname}{% Verzeichnisname ändern
      Verzeichnis der Anh\"ange}%
    \renewcommand*{\appendixattoc}{% Trennanweisung im Inhaltsverzeichnis
      \setcounter{tocdepth}{\@alltocdepth}% tocdepth wiederherstellen
    }%
    \tableofcontents% Verzeichnis ausgeben
    \setcounter{tocdepth}{\@alltocdepth}% tocdepth wiederherstellen
  \endgroup
}
\newcommand*{\appendixattoc}{% Trennanweisung im Inhaltsverzeichnis
}
\g@addto@macro\appendix{% \appendix erweitern
  \if@openright\cleardoublepage\else\clearpage\fi% Neue Seite
  \addcontentsline{toc}{chapter}{\appendixname}% Eintrag ins Hauptverzeichnis
  \addtocontents{toc}{\protect\appendixattoc}% Trennanweisung in die toc-Datei
}
\makeatother

\begin{document}
\maintoc
\blinddocument
\blinddocument
\appendix
\appendixtoc
\blinddocument
\blinddocument

\end{document}

Es ist zu beachten, dass \maintoc nur funktioniert, wenn \appendixtoc ebenfalls vorhanden ist. Anderenfalls wird das Inhaltsverzeichnis nie aktualisiert. Sobald also \appendixtoc entfernt wird, sollte man statt \maintoc auch wieder \tableofcontents direkt verwenden.

Modifizierung wegen hyperref

Das Anhangsverzeichnis klappt in der Tat super, auch von mir Danke.

Allerdings ist bei Benutzung des hyperef-Paketes der Link im Inhaltsverzeichnis auf das Anhangsverzeichnis fehlerhaft (zeigt auf das Kapitel vor dem Anhang).

Als Lösung habe ich gefunden, den Befehl
\phantomsection
unmittelbar vor der Zeile
\addcontentsline{toc}{chapter}{\appendixname}% Eintrag ins Hauptverzeichnis
einzufügen.

Meine Frage nun: Ist es damit getan oder muss ich mit Problemen / weiteren Inkompabilitäten rechnen?

Danke für eine kurze Antwort.

(...)

Hmm... das funktioniert ja beeindruckend. Ich danke herzlich für die ausführliche Hilfe! :)

Kristian

Darstellungsoptionen

Wählen Sie hier Ihre bevorzugte Anzeigeart für Kommentare und klicken Sie auf „Einstellungen speichern“ um die Änderungen zu übernehmen.
Inhalt abgleichen