Hallo zusammen, ich arbeite hin und wieder mit Latex und kam bisher ganz gut zurecht, allerdings wird jetzt ein Inhaltsverzeichnis mit folgendem Aufbau gefordert: 1 Kapitel 1 2 Kapitel 2 2.1 Section 1 || 2 - 1 bis 2 - 2 2.2 Section 2 || 2 - 3 bis 2 - 5 2.3 Section 3 || 2 - 1 bis 2 - 5 (leider kann ich keine Bilder einfügen, ich hoffe das Inhalsverzeichnis ist verständlich) Das heißt:
Mein hauptsächliches Problem ist die Anpassung des Inhaltsverzeichnisses. Auch nach einiger Recherche konnte ich kein Beispiel o.Ä. finden, das mir weiterhelfen würde. Ist es möglich, das Inhaltsverzeichnis entsprechend meiner Vorgabe zu modifizieren? Befasst habe ich mich bisher mit den Paketen tocloft und etoc, konnte aber keine zufriedenstellende Lösung für mein Problem finden. Ich freue mich über jegliche Hilfestellung, auch über Tipps, welche Pakete ich mir anschauen soll etc. Mein Minimalbeispiel: Öffne in Overleaf
\documentclass{scrreprt} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} \usepackage{tocloft} \usepackage{scrlayer-scrpage} \renewcommand*\chapterpagestyle{scrheadings} \ohead{Seite: \thechapter \ - \pagemark \\Datum:\ \today} \usepackage{titlesec} \newcommand{\sectionbreak}{\clearpage} \usepackage{lipsum} \begin{document} \tableofcontents \chapter{Kapitel 1} \setcounter{page}{1} \section{Section 1} \subsection{Subsection 1} \lipsum \chapter{Kapitel 2} \setcounter{page}{1} \section{Section 1} \lipsum \section{Section 2} \lipsum \section{Section 3} \lipsum \end{document} |
So ganz einfach ist das in der Tat nicht. Der einfachste Teil des Ganzen ist, die Seitenzahlen kapitelabhängig zu machen: \usepackage{xpatch} \makeatletter \newif\ifusepageperchapter \renewcommand*{\pagenumbering}[1]{% \global\c@page \@ne \gdef\thepage{% \ifusepageperchapter \ifnum \c@chapter>\z@ \thechapter-\fi \fi \csname @#1\endcsname\c@page }% }% \pagenumbering{arabic} \xpretocmd{\addchaptertocentry}{% \ifusepageperchapter\setcounter{page}{1}\fi }{}{\undefined} \makeatletter Zunächst wird ein Schalter Dann stellt sich noch die Frage, wann und wie man Jetzt wird es schwieriger, denn man muss sich überlegen, wie man an die letzte Seite eines Abschnitts überhaupt heran kommt. Am einfachsten ist das, wenn man am Ende jedes Abschnitts ein Label setzt. Aber natürlich will man nicht manuell am Ende jedes Abschnitts einen \xpretocmd{\section}{% \generatesectionendpagelabel }{}{\undefined} noch bevor die neue Überschrift gesetzt wird, einen Befehl auszuführen, der so ein Label produziert. Im einfachsten Fall könnte \newcommand*{\generatesectionendpagelabel}{\label{\thesection}} definiert werden. Allerdings haben wir bei Kapitelanfängen dann zwei Probleme:
Beide Probleme lassen sich lösen, indem ebenfalls vor einer neuen Kapitelüberschrift ein Label erzeugt wird: \xpretocmd{\chapter}{% \generatesectionendpagelabel }{}{\undefined}
Würden wir diese Labels so erzeugen, würden wir außerdem feststellen, dass das Ende des letzten Abschnitts eines Dokuments nicht erfasst wird. Dafür brauchen wir zusätzlich: \AtEndDocument{\generatesectionendpagelabel} Jetzt müssen wir natürlich auch dafür sorgen, dass im Inhaltsverzeichnis auf den Inhalt dieser Labels zugegriffen wird. Normalerweise sieht ein Inhaltsverzeichniseintrag für einen Abschnitt in der \contentsline {section}{\numberline {<Abschnittsnummer>}<Überschrift>}{<Seite>} Statt \newcounter{sectionentry} \renewcommand*{\thesectionentry}{} \makeatletter \xpretocmd{\addsectiontocentry}{% \stepcounter{sectionentry}% \gdef\thesectionentry{\arabic{sectionentry}}% }{}{\undefined} \makeatother \xpretocmd{\section}{% \generatesectionendpagelabel }{}{\undefined} \xpretocmd{\chapter}{% \generatesectionendpagelabel }{}{\undefined} \newcommand*\generatesectionendpagelabel{% \Ifstr{\thesectionentry}{}{}{% % Wir hatten uns eine Startseite gemerkt und erzeugen jetzt ein Label für % die Endseite \label{section.endpage.to.section.entry.\thesectionentry}% \gdef\thesectionentry{}% Gemerkte Seite vergessen. }% } \AtEndDocument{\generatesectionendpagelabel} Es ist zu beachten, dass die Anweisung Die ständige Umdefiniererei von Damit sind die Labels erzeugt. Jetzt muss man noch dafür sorgen, dass sie auch verwendet werden. Hier kann man ausnützen, dass KOMA-Script weitreichend konfigurierbare Eintragsstile mit Hilfe von \RedeclareSectionCommand[% tocpagenumberformat=\pagenumberrange,% Format der Seitenzahlen im Inhaltsverzeichnis ändern. ]{section} \newcounter{refsectionentry} \newcommand*{\pagenumberrange}[1]{% #1% \stepcounter{refsectionentry}% \Ifundefinedorrelax{r@section.endpage.to.section.entry.\therefsectionentry}{}{% \ --\ \pageref{section.endpage.to.section.entry.\therefsectionentry}% }% } So wie mit Zähler Insgesamt ergibt sich dann also etwas wie: \documentclass[headlines=2]{scrreprt} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} \usepackage{scrlayer-scrpage} \renewcommand*\chapterpagestyle{scrheadings} \ohead{Seite: \pagemark \\Datum:\ \today} \usepackage{xpatch} % Seitenzahlen mit Kapitelpräfix versehen und bei jede Kapitel auf 1 % zurücksetzen. \makeatletter \newif\ifusepageperchapter \renewcommand*{\pagenumbering}[1]{% \global\c@page \@ne \gdef\thepage{% \ifusepageperchapter \ifnum \c@chapter>\z@ \thechapter-\fi \fi \csname @#1\endcsname\c@page }% }% \pagenumbering{arabic} \xpretocmd{\addchaptertocentry}{% \ifusepageperchapter\setcounter{page}{1}\fi }{}{\undefined} \makeatletter \RedeclareSectionCommand[% % style=chapter,% Abschnitte sollten wie Kapitel auf einer neuen Seite beginnen. tocpagenumberformat=\pagenumberrange,% Format der Seitenzahlen im Inhaltsverzeichnis ändern. ]{section} % Bei jedem Verzeichniseintrag \newcounter{sectionentry} \renewcommand*{\thesectionentry}{} \makeatletter \xpretocmd{\addsectiontocentry}{% \stepcounter{sectionentry}% \gdef\thesectionentry{\arabic{sectionentry}}% }{}{\undefined} \makeatother \xpretocmd{\section}{% \generatesectionendpagelabel }{}{\undefined} \xpretocmd{\chapter}{% \generatesectionendpagelabel }{}{\undefined} \newcommand*\generatesectionendpagelabel{% \Ifstr{\thesectionentry}{}{}{% % Wir hatten uns eine Startseite gemerkt und erzeugen jetzt ein Label für % die Endseite \label{section.endpage.to.section.entry.\thesectionentry}% \gdef\thesectionentry{}% Gemerkte Seite vergessen. }% } \AtEndDocument{\generatesectionendpagelabel} \newcounter{refsectionentry} \newcommand*{\pagenumberrange}[1]{% #1% \stepcounter{refsectionentry}% \Ifundefinedorrelax{r@section.endpage.to.section.entry.\therefsectionentry}{}{% \ --\ \pageref{section.endpage.to.section.entry.\therefsectionentry}% }% } % Jetzt benötigen im Inhaltsverzeichnis mehr Platz für die Seitenzahlen \makeatletter \renewcommand*{\@pnumwidth}{4.5em} \renewcommand*{\@tocrmarg}{5em} \makeatother % Wir wollen im Inhaltsverzeichnis nur Kapitel und Abschnitte: \setcounter{tocdepth}{\sectiontocdepth} \usepackage{lipsum} \begin{document} \tableofcontents \usepageperchaptertrue \chapter{Kapitel 1} \section{Section 1} \subsection{Subsection 1} \lipsum \chapter{Kapitel 2} \section{Section 1} \lipsum \section{Section 2} \lipsum \section{Section 3} \lipsum \end{document} mit dem Inhaltsverzeichnis: Für den Fall, dass jeder Abschnitt eine neue Seite beginnen soll (was ich nicht empfehlen würde) ist ebenfalls eine auskommentierte Option bei Es sei darauf hingewiesen, dass diese Lösung einige Grenzen hat. So sind beantwortet 30 Mär '18, 14:36 gast3 Vielen Dank für die super ausführliche Antwort!! Die Schritte werde ich mir einzeln anschauen, das Endergebnis sieht aber auf jeden Fall sehr gut aus!
(30 Mai '18, 08:04)
Julia
|
Willkommen auf TeXwelt! Bitte beachte, dass wir hier vorzugsweise Markdown und nicht HTML für die Formatierung verwenden. Dann funktioniert es auch mit dem automatisch eingefügten Overleaf-Link über Codeblöcken (die bei der Eingabe durch Selektieren und Strg-k leicht erreicht werden können).
Die Verwendung von
tocloft
zusammen mit einer KOMA-Script-Klasse wird ausdrücklich nicht empfohlen! KOMA-Script enthält mittocbasic
bereits ein Paket, das von den Klassen automatisch verwendet wird und vielfältige Änderungen der Verzeichnisse erlaubt. Die gewünschte Änderung dürfte allerdings zusätzliche Eingriffe bei\addchaptertocentry
,\addsectiontocentry
aber auch\chapter
und\section
erfordern, um zusätzliche automatische\label
einzufügen.Off-Topic: Grundsätzlich sehe ich die kapitelweise Seitennummerierung sehr kritisch. Für den Leser ist das auf jeden Fall eher unpraktisch. Wenn ich beispielsweise einen Verweis auf Seite 5-7 habe und gerade auf Seite 2-11 bin, wie weit ist dann 5-7 schätzungsweise entfernt? 10 Seiten? 100 Seiten? 1000 Seiten? Die Seitenzahlen geben damit also nur noch innerhalb eines Kapitels eine Orientierung aber nicht mehr über Kapitel hinweg im Dokument, im Inhaltsverzeichnis sind sie komplett nutzlos. Der Aufwand für die bis-Angaben ist damit umsonst und ich habe auch keine Lust ihn auf mich zu nehmen.
Danke für die Rückmeldung, ich verstehe deine Kritik, ich fande dieses Vorgehen zuerst auch seltsam. Das Ziel ist jedoch, sehr einfach einen Überblick zu bekommen, welches Kapitel wie viele Seiten hat. Die Kapitel stehen relativ unabhängig voneinander, Verweise sind eher selten. Ich verstehe, dass das Problem sehr individuell ist und erwarte keine vorgefertige Lösung, aber mit ein paar Tipps, wo ich am besten ansetzte, wäre mir sehr geholfen.
Hallo @Julia, ein paar Tipps hat dir @saputello ja schon gegeben. Lies seinen zweiten Kommentar gerne nochmal. Wenn du dazu Fragen hast, stelle Sie gern. PS: Auch wenn die Seiten nicht kapitelweise nummeriert werden, wird für mich schnell klar, wieviele Seiten ein bestimmtes Kapitel hat.