# [OT] LaTeX-Problem mit dem Inhaltsverzeichnis

## l3u

Hallo :-)

Ich habe die Numerierung meiner Überschriften folgendermaßen definiert:

```
\usepackage{greekctr}

\renewcommand{\thechapter}{\Alph{chapter}.\hspace{0.5em}}

\renewcommand{\thesection}{\Alph{chapter}. \Roman{section}.\hspace{0.5em}}

\renewcommand{\thesubsection}{\Alph{chapter}. \Roman{section}. \arabic{subsection}.\hspace{0.5em}}

\renewcommand{\thesubsubsection}{\Alph{chapter}. \Roman{section}. \arabic{subsection}. \alph{subsubsection})\hspace{0.5em}}

\renewcommand{\theparagraph}{\Alph{chapter}. \Roman{section}. \arabic{subsection}. \alph{subsubsection}) \greek{paragraph})\hspace{0.5em}}

```

Wie mache ich LaTeX klar, daß es im Inhaltsverzeichnis nur die letzte Aufzählung benutzen soll, also z.B. für \subsection einfach nur "\arabic{subsection}" anstatt "\Alph{chapter}. \Roman{section}. \arabic{subsection}."?

Da ja die Sektionsbefehle (\chapter, \section, etc.) die Einträge in die .toc-Datei machen, müßte ich diese dazu ja wahrscheinlich umdefinieren. Gibt es dazu ein Paket?

MfG, Libby

----------

## zielscheibe

Hi,

Wenn dir der automatische Output nicht paßt, kannst du auch nach dem ersten Lauf von 

```

/tableofcontents

```

die zugehörige *.toc Datei per Hand bearbeiten und so beim nötigen 2. Durchlauf das gewünschte Inhaltsverzeichnis erhalten. Da nach jedem Durchlauf die *.toc Datei überschrieben wird, müßtest du sie entweder wegsichern oder in der Präambel des Dokumentes ein "\nofiles" einfügen, um ein erneutes generieren der *.toc Datei zu verhindern. 

Ein Paket, das dies automatisch durchführt kenne ich leider nicht.

/HTH

----------

## l3u

Okay, mir ist klar, daß ich das per Hand machen kann ... aber bisher war's immer so, daß man _alles_ mit LaTeX machen kann. Also gehe ich ganz stark davon aus, daß man das auch irgendwie hinbekommt, ohne so einen "übeln Hack" zu machen :-)

----------

## Lensman

Du solltest für diese Änderung besser das Paket titletoc verwenden.

Grüße,

Christian

----------

## l3u

Kann titletoc das? Ich habe gedacht, das ist nur für die Formatierung der .toc-Datei (weil da steht ja dann schon die ganze Aufzählung drin ... und woher soll titletoc wissen, was was ist?!) ... ich laß mich aber natürlich gern eines besseren belehren! Ich hab mir zwar die Anleitung von titletoc durchgeschaut und bin nicht fündig geworden -- aber vielleicht hab ich da einfach was übbersehen? Könntest du bitte posten, wie das geht? Wär echt super von dir :-)

----------

## Lensman

Oh, ich seh gerade, ich habe das Problem von dir falsch verstanden. Tja, dass kommt davon, wenn man in Eile ist und noch eben schnell was postet  :Embarassed:  Ich schau morgen mal nach wie das funktioniert, hab das glaube ich irgendwo schonmal gemacht.

----------

## l3u

Kein Thema :-) Aber wenn du mir sagst, wie ich _das_ hinbekomm (ohne z.B. die .toc-Datei mit nem kleinen Bash-Script zerlegen zu müssen), dann bist du mein Held ;-)

----------

## Lensman

Sorry, hat mal wieder etwas länger gedauert  :Wink:  Hab nochml nachgeschaut und sowas in der Form direkt doch noch nicht gemacht. Ungefähr sollte das aber in etwa wie folgt funktionieren, wobei da noch ein paar Sachen zusätzlich beachtet werden müssten (z.B. die *-Versionen). Im Prinzip muss zunächst der Originalbefehl gesichert werden und in der Redefinition aufgerufen werden. Anschließend musst du manuell das Inhaltsverzeichnis schreiben. Und dabei kann man dann die Befehle \thechapter usw. wieder umdefinieren. Forsche einfach mal weiter nach, aber vielleicht bringt dich das schonmal weiter. 

```

\documentclass{book}

\usepackage{greekctr} 

% Verhindern, dass die Originalbefehle die Ausgabe schreiben

\renewcommand{\addcontentsline}[3]{}

% Umdefinieren des Aussehens

\renewcommand{\thechapter}{\Roman{chapter}}

\renewcommand{\thesection}{\thechapter.\Alph{section}}

\makeatletter

\let\orgChapter=\chapter

\renewcommand{\chapter}[1]{%

   \orgChapter{#1}

   \ifnum 1>\c@secnumdepth\else

      \addtocontents{toc}{%

         \protect%

         \contentsline%

            {chapter}%

            {\protect\numberline{\thechapter}#1}%

            {\thepage}%

      }

   \fi   

}

\makeatother

\makeatletter

\let\orgSection=\section

\renewcommand{\section}[1]{%

   \orgSection{#1}

   \let\xthesection=\thesection

   \gdef\thesection{\Alph{section}}

   \ifnum 2>\c@secnumdepth \else

      \addtocontents{toc}{%

         \protect%

         \contentsline%

            {section}%

            {\protect\numberline{\thesection}#1}%

            {\thepage}%

      }

   \fi

   \let\thesection=\xthesection

}

\makeatother

\begin{document}

\tableofcontents

\chapter{A}

The quick brown fox jumps over the lazy dog

\section{B}

The quick brown fox jumps over the lazy dog

\end{document}

```

----------

## zielscheibe

Hi,

habe jetzt noch einwenig gesucht und folgende Pakete gefunden:

für einen angepassten Index

ftp://ftp.nada.kth.se/pub/tex/ctan-mirror/help/Catalogue/entries/tocvsec2.html

ein Tool für die Erstellung eines individuellen Inhaltsverzeichnisses (Stil, Abstände, etc).

ftp://ftp.nada.kth.se/pub/tex/ctan-mirror/help/Catalogue/entries/tocloft.html

Ich hoffe die Makros können dir weiterhelfen. Je mehr ich darüber nachdenke, um so besser würde mir ein konkretes Beispiel gefallen.

z.B.

Ist- vs. Sollzustand

----------

## l3u

tocloft kan nur das Aussehen des Inhaltsverzeichnisses verändern und das andere Paket -- so wie ich das jetzt sehe -- gibt einem die Möglichkeit, zu entscheiden, ob eine Überschrift, unabhängig von der Baumtiefe, ins Inhaltsverzeichnis aufgenommen wird oder nicht. Die beiden lösen also das Problem nicht ... trotzdem danke :-)

Der Ansatz von Lensman ist echt interessant! Auf http://www.komascript.de/node/120 hab ich auch schon geschrieben, daß man dazu wahrscheinlich die Sektionsbefehle umdefinieren muß. Und scheinbar gibt es bisher kein Paket, das das macht -- schließlich konnte man die Aufzählung mit A. I. 1. a) $\alpha$) auch nicht ohne weiteres einstellen. Da diese Aufzählungsvariante aber eine (zwar nicht mehr sehr oft gebrauchte, aber nach wie vor anerkannte) Standardaufzählung ist, müßte man eigentlich mal ein Paket dafür schreiben! Und mit den Ansätzen von Lensman scheint ein Paket, was genau das erledigt, gar nicht mehr so weit weg zu sein ;-)

ich habe mal folgende Dateien online gestellt:

http://www.nasauber.de/sandkasten/LaTeX/toc.tex -- Eine TeX-Datei, die die Aufzählung nach dem o.g. Schema einstellt

http://www.nasauber.de/sandkasten/LaTeX/toc-ist.pdf -- der Ist-Zustand mit dem normalen von LaTeX generierten Inhaltsverzeichnis

http://www.nasauber.de/sandkasten/LaTeX/toc-soll.pdf -- der Soll-Zustand mit einer von Hand editierten .toc-Datei.

----------

## l3u

Okay, ich hab mal ein bißchen rumprobiert. Folgendes Script tut schon /fast/ genau das, was ich will :-)

```
\documentclass[a4paper,12pt]{scrreprt}

\title{}

\author{}

\usepackage[german]{babel}

\usepackage[latin1]{inputenc}

\usepackage[T1]{fontenc}

\setcounter{secnumdepth}{5}

\setcounter{tocdepth}{5}

% Hier würde das neue Paket anfangen ...

\usepackage{greekctr}

\renewcommand{\thechapter}{\Alph{chapter}.}

\renewcommand{\thesection}{\Alph{chapter}. \Roman{section}.}

\renewcommand{\thesubsection}{\Alph{chapter}. \Roman{section}. \arabic{subsection}.}

\renewcommand{\thesubsubsection}{\Alph{chapter}. \Roman{section}. \arabic{subsection}. \alph{subsubsection})}

\renewcommand{\theparagraph}{\Alph{chapter}. \Roman{section}. \arabic{subsection}. \alph{subsubsection}) \greek{paragraph})}

\newcommand{\tocthechapter}{\Alph{chapter}.}

\newcommand{\tocthesection}{\Roman{section}.}

\newcommand{\tocthesubsection}{\arabic{subsection}.}

\newcommand{\tocthesubsubsection}{\alph{subsubsection})}

\newcommand{\toctheparagraph}{\greek{paragraph})}

\makeatletter

\renewcommand{\addcontentsline}[3]{}

\let\docsection=\section

\renewcommand{\section}[1]{%

  \docsection{#1}

  \addtocontents{toc}{%

    \protect%

    \contentsline%

    {section}%

    {\protect\numberline{\tocthesection}#1}%

    {\thepage}%

  }%

}

\let\docsubsection=\subsection

\renewcommand{\subsection}[1]{%

  \docsubsection{#1}

  \addtocontents{toc}{%

    \protect%

    \contentsline%

    {subsection}%

    {\protect\numberline{\tocthesubsection}#1}%

    {\thepage}%

  }%

}

\let\docsubsubsection=\subsubsection

\renewcommand{\subsubsection}[1]{%

  \docsubsubsection{#1}

  \addtocontents{toc}{%

    \protect%

    \contentsline%

    {subsubsection}%

    {\protect\numberline{\tocthesubsubsection}#1}%

    {\thepage}%

  }%

}

\let\docparagraph=\paragraph

\renewcommand{\paragraph}[1]{%

  \docparagraph{#1}

  \addtocontents{toc}{%

    \protect%

    \contentsline%

    {paragraph}%

    {\protect\numberline{\toctheparagraph}#1}%

    {\thepage}%

  }%

}

\makeatother 

% ... bis hier

\begin{document}

\tableofcontents

\chapter{Chapter}Text

\section{Section}Text

\subsection{Subsection}Text

\subsubsection{Subsubsection}Text

\paragraph{Paragraph}Text

\paragraph{Paragraph}Text

\subsubsection{Subsubsection}Text

\subsection{Subsection}Text

\subsubsection{Subsubsection}Text

\section{Section}Text

\chapter{Chapter}Text

\end{document}
```

Die graphischen Unschönheiten (zuviele Punkte) lassen sich mit \usepackage{titletoc} und \usepackage{titlesec} beheben. Aber wichtig ist ja erstmal der Eintrag in der .toc-Datei, und der paßt so weit :-)

Wenn ich allerdings einen Codeblock für \chapter -- analog zu den anderen -- definiere:

```
\let\docchapter=\chapter

\renewcommand{\chapter}[1]{%

  \docchapter{#1}

  \addtocontents{toc}{%

    \protect%

    \contentsline%

    {chapter}%

    {\protect\numberline{\tocthechapter}#1}%

    {\thepage}%

  }

}
```

dann kommen Fehlermeldungen und in der .toc-Datei steht als erster Eintrag

 *Quote:*   

> \contentsline {chapter}{\numberline {A.}*}{1}

 

Und dann geht es normal weiter. Irgendwie komisch ... aber ich glaube mich dran erinnern zu können, daß \chapter anders definiert wird, als die darunterliegenden Sektionsbefehle. Hast du davon ne Ahnung, Lensman? Weil ehrlich gesagt hab ich keine Ahnung, wie LaTeX auf die Idee kommt, einfach so einen \chapter-Eintrag mit dem Namen "*" zu machen ...

----------

## Lensman

Dieser Chapter-Eintrag ist das Inhaltsverzeichnis selbst  :Smile:  Das ist halt die *-Variante vom \chapter-Befehl und das muss noch irgendwie abgefangen werden, dass der in solch einem Fall keine toc-Einträge schreibt.

----------

## l3u

Aber scheinbar benutzt der \chapter*-Befehl doch dann andere Routinen als die übrigen -- weil sonst gäb's doch keine Probleme, oder?

----------

## l3u

Okay. Ich hab grad gesehen, daß Markus Kohm himself eine Lösung für das Problem geschrieben hat. Und die ist zugegebenermaßen weniger pfuschig und deutlich eleganter:

```
\documentclass[a4paper,12pt]{scrreprt} 

\setcounter{secnumdepth}{5}

\setcounter{tocdepth}{5}

\usepackage{greekctr}

\renewcommand{\thechapter}{\Alph{chapter}}

\renewcommand{\thesection}{\thechapter.\Roman{section}}

\renewcommand{\thesubsection}{\thesection.\arabic{subsection}}

\renewcommand{\thesubsubsection}{\thesubsection.\alph{subsubsection}}

\renewcommand{\theparagraph}{\thesubsubsection)\nobreakspace\greek{paragraph}}

\newcommand{\tocthechapter}{\Alph{chapter}}

\newcommand{\tocthesection}{\Roman{section}}

\newcommand{\tocthesubsection}{\arabic{subsection}}

\newcommand{\tocthesubsubsection}{\makeautobrace\alph{subsubsection}}

\newcommand{\toctheparagraph}{\makeautobrace\greek{paragraph}}

\newcommand*{\AddContentsLine}{}

\let\AddContentsLine\addcontentsline

\renewcommand*{\addcontentsline}[3]{%

\begingroup

\let\thechapter\tocthechapter

\let\thesection\tocthesection

\let\thesubsction\tocthesubsection

\let\thesubsubsection\tocthesubsubsection

\let\theparagraph\toctheparagraph

\let\thesubparagraph\tocthesubparagraph

\AddContentsLine{#1}{#2}{#3}%

\endgroup

}

\makeatletter

\newcommand*{\autobrace}{\if@altsecnumformat%(

)\fi}

\makeatother

\DeclareRobustCommand*{\makeautobrace}{\let\autodot\autobrace}

\renewcommand*{\othersectionlevelsformat}[1]{\csname #1format\endcsname}

\newcommand*{\sectionformat}{\thesection\autodot\enskip}

\newcommand*{\subsectionformat}{\thesubsection\autodot\enskip}

\newcommand*{\subsubsectionformat}{\thesubsubsection\autobrace\enskip}

\newcommand*{\paragraphformat}{\theparagraph\autobrace\enskip}

\newcommand*{\subparagraphformat}{\thesubparagraph\autodot\enskip}

\begin{document}

\tableofcontents

\chapter{Chapter}Text

\section{Section}Text

\subsection{Subsection}Text

\subsubsection{Subsubsection}Text

\paragraph{Paragraph}Text

\paragraph{Paragraph}Text

\subsubsection{Subsubsection}Text

\subsection{Subsection}Text

\subsubsection{Subsubsection}Text

\section{Section}Text

\chapter{Chapter}Text

\end{document}
```

----------

## l3u

Die Lösung scheint doch nicht ganz einwandfrei zu sein ... ich bin auf Probleme gestoßen. Auf http://www.komascript.de/node/120 hab ich die beschrieben. Weiß einer, wie man das noch in den Griff bekommen könnte?

[Edit]

Also, irgendwie check ich net, wie das Forum auf www.komascript.de funktionieren soll. Jedenfalls kann ich das, was ich gepostet hab, irgendwie nur dann lesen, wenn ich auch eingeloggt bin ... Hier jedenfalls nochmal mein Beitrag:

Ich habe mich jetzt weiter mit der Lösung auseinandergesetzt und bin (leider) auf weitere Probleme gestoßen. Auf meiner Homepage habe ich beschrieben, wie man die gewünschte Gliederung setzen kann und das (ausgebesserte, denn es war ein copy-paste-Fehler drin) Script online gestellt (http://www.nasauber.de/latex_know_how/alt_struktur/ )

Die viel zu großen Abstände im Inhaltsverzeichnis konnte ich mit folgenden Befehlen einstellen:

\usepackage{titletoc}

\titlecontents{chapter}[0.5em]%

  {}{\thecontentslabel.\enskip}{}%

  {\titlerule*[0.6em]{.}\contentspage}

\titlecontents{section}[2em]%

  {}{\thecontentslabel.\enskip}{}%

  {\titlerule*[0.6em]{.}\contentspage}

\titlecontents{subsection}[3.5em]%

  {}{\thecontentslabel.\enskip}{}%

  {\titlerule*[0.6em]{.}\contentspage}

\titlecontents{subsubsection}[5em]%

  {}{\thecontentslabel)\enskip}{}%

  {\titlerule*[0.6em]{.}\contentspage}

\titlecontents{paragraph}[6.5em]%

  {}{\thecontentslabel)\enskip}{}%

  {\titlerule*[0.6em]{.}\contentspage}

Die nochmalige Nennung der Punkte und Klammern war nötig, weil sie nicht gesetzt wurden. Evtl. habe ich hier etwas falsch gemacht ...

Die eigentlichen Probleme sind aber folgende:

1. Bisher habe ich immer das titlesec-Paket benutzt, um die Überschiften zu formatieren. Das scheint aber nicht kompatibel mit dem Script zu sein (das ich ehrlich gesagt auch noch nicht zu 100% verstanden habe ...)

Woran liegt das? Kann man das in den Griff bekommen?

2. Bei einem Verweis (\ref{label}) wird der Punkt bzw. die Klammer nach dem letzten Aufzählungspunkt weggelassen. Ich bekomme also z.B. "A. I. 1. a" statt "A. I. 1. a)". Das Weglassen des Punktes hinter den Aufzählungen erscheint mir sinnvoll, wenn es nur Nummern sind. In diesem Fall ist es aber wünschenswert, daß die Klammern und Punkte immer gesetzt werden ...

Ich sehe mich leider außer Stande, das selber zu lösen -- es wäre wirklich sehr nett, wenn du mir nochmals unter die Arme grifen würdest :-)

[nochmal Edit:]

Ich hab mittlerweile eine funktionierende Lösung gefunden. Auch auf die Gefahr hin, daß das wieder "Murks" ist ;-)

Zu bestaunen unter http://www.nasauber.de/latex_know_how/alt_struktur/

----------

