Modifizieren Sie das Inhaltsverzeichnis

Modifizieren Sie das Inhaltsverzeichnis

Ich erstelle ein schickes Inhaltsverzeichnis basierend auf @plutons FrageWie kann ich das Inhaltsverzeichnis mit TikZ anpassen?

Obwohl dieser Code einwandfrei funktioniert, scheint er sich bei Verwendung eines Anhangs falsch zu verhalten. Anstatt einen Eintrag hinzuzufügen, Appendix Afügt er hinzu Chapter A.

Auch beim Hinzufügen eines nicht nummerierten Kapitels möchte ich lieber kein als Eintrag haben, Chaptersondern entweder ein farbiges Kästchen oder gar nichts.

Mein Code ist

\documentclass[11pt,a4paper]{book}

\usepackage{tikz,pgf}
\usepackage{tocloft,titletoc,titlesec}
\definecolor{doc}{RGB}{0,60,110}
\definecolor{myblueii}{RGB}{63,200,244}
\usepackage{lipsum}

\contentsmargin{0cm}
\titlecontents{chapter}[0pc]
{\addvspace{30pt}%
\begin{tikzpicture}[remember picture, overlay]%
\draw[fill=myblueii,draw=myblueii, rounded corners] (-4,-.1) rectangle (-0.15,.5);%
\pgftext[left,x=-2.7cm,y=0.2cm]{\color{white}\Large \chaptertitlename\ \thecontentslabel};%
\end{tikzpicture}\color{myblueii}\large\bfseries}%
{}
{}
{\hspace*{6pt}\titlerule\hspace*{6pt}\large\bfseries \thecontentspage
\begin{tikzpicture}[remember picture, overlay]
\draw[fill=doc!25,draw=myblueii, rounded corners=0pt] (2pt,0) rectangle (6,0.1pt);
\end{tikzpicture}}%
\titlecontents{section}[2.4pc]
{\addvspace{1pt}}
{\contentslabel[\thecontentslabel]{2.4pc}}
{}
{\hfill\small \thecontentspage}
[]
\titlecontents{subsection}[4.8pc]
{\addvspace{1.0pt}}
{\contentslabel[\thecontentslabel]{2.4pc}}
{}
{\hfill\small\thecontentspage}
[]

\makeatletter
\renewcommand{\tableofcontents}{%
\chapter*{%
\vspace*{-20\p@}%
\begin{tikzpicture}[remember picture, overlay]%
\pgftext[right,x=15cm,y=0.2cm]{\color{myblueii}\Huge \contentsname};%
\draw[fill=myblueii,draw=myblueii, rounded corners=15pt] (13,-.75) rectangle (20,1);%
\clip (13,-.75) rectangle (20,1);
\pgftext[right,x=15cm,y=0.2cm]{\color{white}\Huge \contentsname};%
\end{tikzpicture}}%
\@starttoc{toc}}
\makeatother

\begin{document}
 \tableofcontents
 \chapter{First Chapter}
 \lipsum[1]
 \chapter{Second Chapter}
 \lipsum[1]
 \chapter{Third Chapter}
 \lipsum[1]
 \appendix
 \chapter{First Appendix Chapter}
 \lipsum[1]
 \chapter{Second Appendix Chapter}
 \lipsum[1]
 \chapter*{Chapter}
 \addcontentsline{toc}{chapter}{Chapter}
 \lipsum[1]
\end{document}

und meine Ausgabe ist

Bildbeschreibung hier eingeben

Gibt es eine Möglichkeit, diese beiden Anforderungen zu erfüllen?

Antwort1

Ich denke, dass es sich hierbei um ein Versehen oder sogar einen Fehler bei der Generierung des Inhaltsverzeichnisses handelt.

Innerhalb einer Latex-Datei \appendixändert sich der Befehl \@chapappvon \chapternamein \appendixnameund dies wird verwendet, um den richtigen Titel in den Kapitel- und Anhangsüberschriften zu erhalten. Leider werden diese Informationen NICHT an die Inhaltsverzeichnisdatei (toc) weitergegeben. Derzeit wird beispielsweise in book.cls der Eintrag für ein Kapitel oder einen Anhang über Folgendes in die toc-Datei geschrieben:

\addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}

Das bedeutet, dass Kapitel- und Anhangseinträge in der toc-Datei genau gleich aussehen, wenn der \tableofcontentsausgeführt wird, sodass die toc-Datei nicht zwischen Kapiteln und Anhängen unterscheiden kann (ohne etwas Hacking). Es wäre besser, wenn es auch

\addcontentsline{toc}{appendix}{\protect\numberline{\thechapter}#1}

\@chapappZeilen – obwohl Sie diese Zeilen nicht zum Generieren verwenden können, da der Wert von \@hapappsprachabhängig ist … daher wäre der Code nicht so elegant :(

Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, die Verwendung von \chaptertitlenameim Code von Pluton beispielsweise durch zu ersetzen \tocchapternameund dann den folgenden Code oben in der Datei hinzuzufügen:

\let\tocchaptername\chaptertitlename
\let\originalAppendix\appendix
\renewcommand\appendix{\originalAppendix%
    \addtocontents{toc}{\let\string\tocchaptername\string\appendixname}%
 }

Damit werden die Anhänge so beschriftet, wie es der OP wünscht. (Die Verwendung von \addtocontentsist ein Hack, um einige Zeilen in die Inhaltsverzeichnisdatei zu schreiben, ohne zu verwenden \makeatletter\@writefile{toc}...\makeatother.)

Bildbeschreibung hier eingeben

Tatsächlich erfordert das obige Bild etwas mehr als das, was ich bisher gesagt habe. Erstens, weil „Anhang“ ein Zeichen mehr hat als „Kapitel“, muss der Abstand noch ein wenig angepasst werden. (Um Kapitel und Anhang zu zentrieren, müssen diese Zahlen sorgfältiger angepasst werden:)

Ernster noch: Die Verwendung von \chapter*für den letzten „Anhang“ führt zu einem blauen „Anhang“-Label, was wahrscheinlich nicht das ist, was Sie wollen. Es wäre mühsam, dies richtig zu beheben (zum Beispiel, um mit dem Fall fertig zu werden, dass es abwechselnde \chapter{..}und \chapter*{...}-Befehle im Dokument gibt). Angenommen, der OP möchte ab diesem Punkt leere Labels (wie im Bild oben), dann können Sie einfach die Zeile hinzufügen

\addtocontents{toc}{\let\string\tocchaptername\string\relax}

vor dem \chapter*{}Befehl. Wenn jemand abwechselnd markierte und nicht markierte Kapitel/Anhänge verwenden möchte, muss er Folgendes eingeben:

\addtocontents{toc}{\let\string\tocKapitelname\string\Kapiteltitelname}

um die TOC-Datei darüber zu informieren, was passiert (unter Verwendung der offensichtlichen Anhangsvariante in den Anhängen).

Hier ist der eigentliche Code, den ich verwendet habe:

\documentclass[11pt,a4paper]{book}

\usepackage{tikz,pgf}
\usepackage{tocloft,titletoc,titlesec}
\definecolor{doc}{RGB}{0,60,110}
\definecolor{myblueii}{RGB}{63,200,244}
\usepackage{lipsum}

\let\tocchaptername\chaptertitlename
\let\originalAppendix\appendix
\renewcommand\appendix{\originalAppendix\addtocontents{toc}{\let\string\tocchaptername\string\appendixname}}

\contentsmargin{0cm}
\titlecontents{chapter}[0pc]
{\addvspace{30pt}%
\begin{tikzpicture}[remember picture, overlay]%
\draw[fill=myblueii,draw=myblueii, rounded corners] (-4,-.1) rectangle (0.10,.5);%
\pgftext[left,x=-2.7cm,y=0.2cm]{\color{white}\Large \tocchaptername\ \thecontentslabel};%
\end{tikzpicture}\color{myblueii}\large\bfseries\quad}%
{}
{}
{\hspace*{6pt}\titlerule\hspace*{6pt}\large\bfseries \thecontentspage
\begin{tikzpicture}[remember picture, overlay]
\draw[fill=doc!25,draw=myblueii, rounded corners=0pt] (2pt,0) rectangle (6,0.1pt);
\end{tikzpicture}}%
\titlecontents{section}[2.4pc]
{\addvspace{1pt}}
{\contentslabel[\thecontentslabel]{2.4pc}}
{}
{\hfill\small \thecontentspage}
[]
\titlecontents{subsection}[4.8pc]
{\addvspace{1.0pt}}
{\contentslabel[\thecontentslabel]{2.4pc}}
{}
{\hfill\small\thecontentspage}
[]

\makeatletter
\renewcommand{\tableofcontents}{%
\chapter*{%
\vspace*{-20\p@}%
\begin{tikzpicture}[remember picture, overlay]%
\pgftext[right,x=15cm,y=0.2cm]{\color{myblueii}\Huge \contentsname};%
\draw[fill=myblueii,draw=myblueii, rounded corners=15pt] (13,-.75) rectangle (20,1);%
\clip (13,-.75) rectangle (20,1);
\pgftext[right,x=15cm,y=0.2cm]{\color{white}\Huge \contentsname};%
\end{tikzpicture}}%
\@starttoc{toc}}
\makeatother

\begin{document}
 \tableofcontents
 \chapter{First Chapter}
 \lipsum[1]
 \chapter{Second Chapter}
 \lipsum[1]
 \chapter{Third Chapter}
 \lipsum[1]
 \appendix
 \chapter{First Appendix Chapter}
 \lipsum[1]
 \chapter{Second Appendix Chapter}
 \lipsum[1]
 \addtocontents{toc}{\let\string\tocchaptername\string\relax}
 \chapter*{Chapter}
 \addcontentsline{toc}{chapter}{Chapter}
 \lipsum[1]
\end{document}

Bearbeiten - nicht nummerierte Kapitel

Und um abschließend Ihre Frage in den Kommentaren zu beantworten: Um die leere blaue Markierung für nicht nummerierte Kapitel loszuwerden, ersetzen Sie die tikzpictureUmgebung im \titlecontents{chapter}obigen Befehl durch die folgende Variante (eigentlich habe ich den Code gleichzeitig ein wenig verbessert):

\begin{tikzpicture}[remember picture, overlay]%
  \ifx\tocchaptername\relax\relax%
  \else%
    \draw(-0.15,0.15)node[anchor=east,align=center,fill=myblueii,text=white,rounded corners,
              rectangle, minimum width=8.5em]{\Large \tocchaptername\ \thecontentslabel};
  \fi%
\end{tikzpicture}\color{myblueii}\large\bfseries}%

Damit sieht die Ausgabe nun folgendermaßen aus:

Bildbeschreibung hier eingeben

Wenn zwischen den nummerierten Kapiteln/Anhängen viele unnummerierte Kapitel/Anhänge stehen, möchten Sie wahrscheinlich einen Befehl wie den folgenden definieren:

\newcommand\unnumberedchapter[1]{%
   \addtocontents{toc}{\let\string\tocchaptername\string\relax}%
   \chapter*{#1}%
   \addtocontents{toc}{\let\string\tocchaptername\string\chaptertitlename}%
}

Dann können Sie einfach tippen, \unnumberedchapter{Chapter title}wenn Sie es brauchen.

verwandte Informationen