Sie sind hier

Inhaltsverzeichnis ohne redundante Nummerierung

Hallo,

in einem Inhaltsverzeichnis ohne Einzügen ist es
erforderlich, dass die Nummerierung jedes Eintrags sich aus der Nummer
des chapter, der section, der subsection zusammensetzt,
z.B. 1.1.2. für die zweite subsection der ersten section im ersten
Kapitel.

In einem Inhaltsverzeichnis mit Einzügen (tocgraduaded) ist
die Wiederholung der Ziffern der höheren Gliederungsebenen jedoch
redundant, weil die Einzüge (also die Position jedes Eintrags) ja auch
Information darstellen. Ein Inhaltsverzeichnis darf dann so aussehen:

Einleitung
1. Trift und Trat
   1. Mark
   2. Almende
   Zwischenfazit
2. Ein Pferd besitzen
   1. In Rom mit Recht
   2. Voll Grimm
   Zwischenfazit
Schluss

Ein fertige Lösung habe ich dafür nicht gefunden. Auch das
tocstyle-Paket hat dafür - wenn ich mich nicht ganz täusche - keine
Lösung.

Wie bekomme ich das hin?

Was ich bisher versucht habe:

Weil ich für label / ref die aus mehreren Ziffern zusammengesetzten
Gliederungsnummerierung noch benötige, scheidet die Redefinition von
\thechapter¹, \thesection¹ usw. aus. Stattdessen habe ich die Macros
\addsectiontocentry¹, \addsubsectiontocentry¹ usw. redefiniert und dort
nicht die als Parameter übergebenen \thesection¹, \thesubsection¹
usw. weitergereicht, sondern neue Macros \mysection¹, \mysubsection¹,
welche die Ziffer der höheren Gliederungsebenen nicht enthalten.

Das klappt auch soweit. Ein Problem tritt nur noch bei der
Verwendung von \addsec¹ auf, das einen nicht-numerieren Eintrag
erzeugen soll. Ich habe versucht, bei der Redefinition von
\addsection¹. \addsubsection¹ mit \ifnumbered¹, das ich in der
KOMA-script-Anleitung gefunden habe, einen Test auszuführen. Aber das
bleibt ohne Erfolg. Wie komme ich ans Ziel?

Wenn ich folgendes Minimalbeispiel kompiliere, steht vor den Einträgen
"Zwischenfazit" noch eine Ziffer (und zwar die Ziffer des vorigen
Eintrags, weil der Zähler \c@section¹ richtigerweise nicht weitergezählt
wird.)

Um die Funktion von \ifnumbered¹ zu verstehen, steht das auch im
Dokumentkörper. Man sieht daran, dass es nicht zum Erfolg führt, da im
kompilierten Dokument immer "JA" ausgegeben wird.

\documentclass{scrbook}
\usepackage{ngerman}
\usepackage{blindtext}
 
\usepackage[%
tocgraduated,% Einzüge
]{tocstyle}
 
\makeatletter
 
%  new helper macros without \thechapter in front %
\newcommand*\mysection{%
  \@arabic\c@section
}
\newcommand*\mysubsection{%
  \@arabic\c@subsection
}
 
% TOC Entries
\renewcommand*{\addsectiontocentry}[2]{%
  \addtocentrydefault{section}{\ifnumbered{section}{\mysection}{}}{#2}%
}
% alternative Definition
\renewcommand*{\addsubsectiontocentry}[2]{% 
  \protect\ifnumbered{subsection}{%
    \addtocentrydefault{subsection}{\mysubsection}{#2}%
    }{% falls \addsubsec definiert wäre
      \addtocentrydefault{subsection}{}{#2}%
    }%
}
 
\makeatother
 
\begin{document}
 
\tableofcontents
 
\addchap{Einleitung}
 
\ifnumbered{chapter}{JA}{NEIN}
 
\blindtext
 
\chapter{Trift und Trat}
\ifnumbered{chapter}{JA}{NEIN}
 
\section{Mark}
\ifnumbered{section}{JA}{NEIN}
 
\Blindtext
 
\section{Almende}
\ifnumbered{section}{JA}{NEIN}
 
\Blindtext
 
\addsec{Zwischenfazit}
\ifnumbered{section}{JA}{NEIN}
 
\Blindtext
 
\chapter{Ein Pferd besitzen}
 
\section{In Rom mit Recht}
\Blindtext
 
\section{Voll Grimm}
\blindtext
 
\addsec{Zwischenfazit}
\Blindtext
 
\addchap{Schluss}
 
 
\end{document}

Grüße

clueck

[Admin-Edit:]

  1. <code></code> Tags eingefügt (siehe Formatierungshinweise)

Eine vollständige Nummerierung im Inhaltsverzeichnis empfinde ich auch bei vorhandenen Einzügen als sinnvoll. Mich würde es eher irritieren, wenn die Nummerierung im Inhaltsverzeichnis nicht mit der im Dokument übereinstimmt oder bei einem längeren Inhaltsverzeichnis vielleicht erst zurückgeblättert werden muss, um die vollständige Gliederungsnummer eines Abschnittes oder gar Unterabschnittes zu bekommen.

Wenn Du jedoch \addsectiontocentry unbedingt umdefinieren möchtest, dann teste einfach ob das erste Argument leer ist. Wenn ja, rufe \addsectiontocentry ebenfalls mit leerem ersten Argument auf. Wenn nein, übergib Dein neu definiertes Makro an diesen Befehl:

\newcommand*\thetocsection{\arabic{section}}
\renewcommand*{\addsectiontocentry}[2]{%
  \ifstr{#1}{}{\addtocentrydefault{section}{}{#2}}{%
    \addtocentrydefault{section}{\thetocsection}{#2}%
  }%
}

Insgesamt also etwas wie

\documentclass{scrbook}
\usepackage{ngerman}
\usepackage{blindtext}
 
\usepackage[%
tocgraduated,% Einzüge
]{tocstyle}
 
%% TOC Entries
\newcommand*\thetocsection{\arabic{section}}
\renewcommand*{\addsectiontocentry}[2]{%
  \ifstr{#1}{}{\addtocentrydefault{section}{}{#2}}{%
    \addtocentrydefault{section}{\thetocsection}{#2}%
  }%
}
 
\newcommand*\thetocsubsection{\arabic{subsection}}
\renewcommand*{\addsubsectiontocentry}[2]{%
  \ifstr{#1}{}{\addtocentrydefault{subsection}{}{#2}}{%
    \addtocentrydefault{subsection}{\thetocsubsection}{#2}%
  }%
}
 
% für alle tieferen Gliederungsebenen analog
 
\begin{document}
\tableofcontents
\addchap{Einleitung}
\blindtext
\blinddocument
\addsec{Zwischenfazit}
\Blindtext
\chapter{Ein Pferd besitzen}
\section{In Rom mit Recht}
\Blindtext
\section{Voll Grimm}
\Blindtext
\addsec{Zwischenfazit}
\Blindtext
\addchap{Schluss}
\addsec{Ende}
\end{document}

Der Befehl \ifnumbered{section}{JA}{NEIN} liefert in Deinem Beispiel immer JA, weil der Zähler secnumdepth nicht kleiner als die im Befehl \sectionnumdepth gespeicherte Nummer für die Gliederungsebene section ist. In der KOMA-Script Anleitung ist auch ausdrücklich erwähnt, dass bei Verwendung von \addsecmark die Nummerierung der Abschnitte über diesen Test abgeschaltet wird, weil \addsecmark den Zähler secnumdepth lokal auf -1 setzt.

Gruß
Elke

Hallo Elke!

Vielen Dank, das klappt ja toll. Ich hab geahnt, dass das Problem die Abfrage war, nur welche Alternative ich hatte - dafür waren meine Kenntnisse nicht weitgehend genug. Und die Alternativen bekommt man ja auch nicht so leicht durch Lesen des koma-script-Quellcodes... Vielen Dank auch für die Aufklärung über \ifnumbered¹. Natürlich ist \thetocsection¹ auch viel besser als \mysection¹.

Das mit den Inhaltsverzeichnissen, die sich über mehrere Seiten erstrecken stimmt. Aber zurückblättern würde ich eher für den Titel eines Kapitels, weniger für die Nummer.

Grüße

clueck

[Admin-Edit:]

  1. <code></code> Tags eingefügt (siehe Formatierungshinweise)
  2. Beitrag verschoben

Comments for "Inhaltsverzeichnis ohne redundante Nummerierung" abonnieren