Ich habe ähnliche Anforderungen wie bei der Frage »Inhaltsverzeichnis anpassen: Kapitel geht von Seite x bis y«. Allerdings gibt es bei mir ein paar Unterschiede:

  • Die Seiten sollen nicht kapitelsweise, sondern fortlaufend nummeriert werden.

  • Das Ende der Seitenbereiche im Inhaltsverzeichnis soll nicht automatisch, sondern manuell durch ein Label im Text markiert werden.

Außerdem habe ich das Problem, dass der Code aus der dortigen Antwort von Ijon Tichy bei mir nicht funktioniert.

gefragt 29 Jan, 09:37

FloTeX's gravatar image

FloTeX
262
Akzeptiert-Rate: 0%

bearbeitet 29 Jan, 10:24

Ijon%20Tichy's gravatar image

Ijon Tichy
10.4k31531

Ich habe deinen Kommentar in eine Folgefrage umgewandelt und dabei auch gleich ein wenig strukturiert. Bitte beachte, dass hier Antworten immer als Antwort auf die Frage zu verstehen sind. Kommentare können wie hier als Kommentar angegeben werden. Anschlussfragen sollten jedoch besser als neue Fragen (ggf. mit verlinktem Bezug wie gezeigt) gestellt werden.

(29 Jan, 10:19) Ijon Tichy

Bitte präzisiere diese Frage. Insbesondere ist »nicht funktioniert« keine hinreichende Problembeschreibung. Solange ich nicht weiß, warum mein Beispiel bei dir nicht funktioniert, ist die Gefahr groß, dass dasselbe Problem auch bei einer neuen Lösung auftritt. Fehlermeldungen oder Problembeschreibungen zu meinem unveränderten Code wären hilfreich. Ob das als Kommentar zur ursprünglichen Frage oder ebenfalls als Anschlussfrage besser ist, hängt vom Umfang des Problems ab. Sollten Probleme nur bei Modifikationen meines Codes auftreten, ist eine Anschlussfrage mit Code zu empfehlen.

(29 Jan, 10:23) Ijon Tichy

Darüber hinaus sei auch noch auf die ähnliche Frage: »Inhaltsverzeichnis anpassen: Kapitel geht von Seite bis Seite« explizit hingewiesen.

(29 Jan, 10:34) Ijon Tichy

Beim Compilieren des Codes von Ijon Tichy erhalte ich die Fehlermeldung, dass {\undefined} nicht als Argument akzeptiert wird. Dies sowohl in einem bestehenden Dokument als auch in einem extra neu aufgesetzten Dokument, in das nur der Beispielcode einkopiert wurde. Trotz der sehr ausführlichen Beschreibung des Codes setzt dessen Verständnis doch tiefere Einblicke in die TeX-Engine voraus, als ich (trotz langjähriger Anwendung) habe. Deshalb habe ich versucht, den Code soweit wie möglich herunterzubrechen und insbesondere das automatische Setzen von Labels herauszunehmen. Allerdings ohne Erfolg

(29 Jan, 10:40) FloTeX

Durch die Erläuterungen bin ich zu dem Schluss gekommen, dass sich der gesamte Aufwand sehr reduzieren würde, wenn man eigenständig am Ende einer Sektion ein Label setzt und dies brauche ich auch, da sich die Seitenzahlen in einer statischen Berechnung viel zu willkührlich ändern, als dass ein Rechner Anfang und Ende jeweils erkennen könnte.

(29 Jan, 10:40) FloTeX

Bitte beachte, dass Fehlermeldungen immer im Wortlauf, als Code-Kopie aus der log-Datei benötigt werden. Nur so kann ich auch nur erahnen, was genau die Ursache ist und wo das Problem auftritt. Hellsehen kann ich leider nicht. Ich bekomme jedenfalls mit gerade eben aktualisiertem TeX Live keine Fehlermeldung, bei der »{\undefined} nicht als Argument akzeptiert wird«. Mit der veralteten Fassung des Codes erhalte ich nur die Fehlermeldung:

3:Undefined control sequence.
\pagenumberrange ...tionentry}\ifundefinedorrelax 
                                                  {r@sectio…
(29 Jan, 10:48) Ijon Tichy
Ergebnis 5 von 6 show 1 more comments

Das sind mehrere Fragen auf einmal. Befassen wir uns einzeln damit:

Die Seiten sollen nicht kapitelweise, sondern fortlaufend nummeriert werden.

Wie in meiner früheren Antwort ausführlich erklärt, ist für die kapitelweise Nummerierung der Codeabschnitt

\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

im dortigen Beispiel verantwortlich. Bis auf \usepackage{xpatch] kann man diesen einfach komplett löschen. Das Paket xpatch darf man deshalb nicht entfernen, weil dessen Anweisung \xpretocmd auch noch im nachfolgenden Code verwendet wird.

Wie dort ebenfalls erklärt wird, werden von dem soeben gelöschten Code u. a. zwei Anweisungen \usepageperchaptertrue und \usepageperchapterfalse bereitgestellt, mit denen die kapitelweise Nummerierung ein- und ausgeschaltet werden kann. Man muss also auch die Anweisung \usepageperchapter im Dokument selbst löschen. Man erhält so:

\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}

\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

\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}

Und schon sieht das Inhaltsverzeichnis so aus:

fortlaufende Seitenzahlen im Inhaltsverzeichnis

Statt den genannten Code zu löschen, hätte man natürlich auch einfach die Information verwenden können, dass mit \usepageperchapterfalse die kapitelweise Nummerierung abgeschaltet werden kann, bzw. mit \usepageperchaptertrue erst aktiviert werden muss. Damit hätte es also genügt, die Anweisung \usepageperchaptertrue, die im Originalcode nach \tableofcontents zu finden ist, zu entfernen oder auszukommentieren. Damit hätte man das oben gezeigte Ergebnis ebenfalls ganz einfach und ohne Änderung an den Definitionen erhalten.

Das Ende der Seitenbereiche im Inhaltsverzeichnis soll nicht automatisch, sondern manuell durch ein Label im Text markiert werden.

Wie meiner früheren Antwort ausführlich erklärt wird, wird die neu definierte Anweisung \generatesectionendlabel für das Label am Ende der Abschnitte verwendet. Die Hauptschwierigkeit dabei ist weniger, dieses Label zu setzen. Die Hauptschwierigkeit besteht in der ursprünlichen Lösung darin, das automatisch zu tun. Dazu wird an den Anfang von \section und \chapter mit

\xpretocmd{\section}{%
  \generatesectionendpagelabel
}{}{\undefined}
\xpretocmd{\chapter}{%
  \generatesectionendpagelabel
}{}{\undefined}

eben die Ausführng von \generatesectionpagelabel gepatcht. Hier kommt es übrigens genau dann zu einer Fehlermeldung, dass \undefined nicht definiert ist, wenn \section oder \chapter nicht existieren. Das sollte bei Verwendung der Klasse scrreprt wie im Originalcode, aber auch bei Verwendung der Klasse scrbook niemals auftreten. Unabhängig von der KOMA-Script-Version bin ich sicher, dass es mit keiner bisher erschienen Version der genannten Klassen auftreten kann.

Zusätzlich wird mit

\AtEndDocument{\generatesectionendpagelabel}

dafür gesorgt, dass auch am Ende des Dokument noch ein solches Label erzeugt wird. Entfernt man die beiden Patches und die \AtEndDocument-Anweisung, so werden keine automatischen Labels mehr gesetzt.

Das von \generatesectionpagelabel generierte Label hat übrigens die Form section.endpage.to.section.entry.NUMMER, wobei NUMMER die Nummer des gesetzten Labels ist. Diese wird nicht von \generatesectionpagelabel erhöht, sondern durch

\xpretocmd{\addsectiontocentry}{%
  \stepcounter{sectionentry}%
  \gdef\thesectionentry{\arabic{sectionentry}}%
}{}{\undefined}

jedes Mal, wenn ein neuer Inhaltsverzeichniseintrag der Ebene section (in der Regel innerhalb der \section-Anweisung) erzeugt werden. Auch hier kommt es nur dann zu einer Fehlermeldung wegen einer nicht definierten Anweisung \undefined, wenn \addtosectiontocentry nicht existiert. In KOMA-Script eistiert diese Anweisung seit Version 3.10 und damit bereits seit über 9 Jahren. Support für ältere TeX-Distributionen ist weder erstrebenswert noch mit vertretbarem Aufwand möglich.

In der Ausgabe der Seitenzahlen im Inhaltsverzeichnis wird per

\RedeclareSectionCommand[%
%  style=chapter,% Abschnitte sollten wie Kapitel auf einer neuen Seite beginnen.
  tocpagenumberformat=\pagenumberrange,% Format der Seitenzahlen im Inhaltsverzeichnis ändern.  
]{section}

als Format \pagenumberrange festgelegt. In dieser Anweisung wird ebenfalls ein Zähler erhöht und dann mit

  \Ifundefinedorrelax{r@section.endpage.to.section.entry.\therefsectionentry}{}{}

abgefragt, ob ein zugehöriges Label tatsächlich existiert und nur dann ein Seitenbereich im Inhaltsverzeichnis ausgegeben.

Daher wir nach dem Löschen der oben genannten Patches zum automatischen Ausführung von \generatesectionendpagelabel:

\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}

\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}{}
\xpretocmd{\addsectiontocentry}{%
  \stepcounter{sectionentry}%
  \gdef\thesectionentry{\arabic{sectionentry}}%
}{}{\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.
  }%
}
\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}

zunächst überhaupt kein Seitenbereich im Inhaltsverzeichnis mehr ausgegeben:

Inhaltsverzeichnis ohne Seitenbereiche

da die Labels ja, wie erwähnt nun nicht mehr gesetzt werden. Aber natürlich können wir an beliebiger Stelle im Dokument selbst \generatesectionendpagelabel aufrufen:

\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}

\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}{}
\xpretocmd{\addsectiontocentry}{%
  \stepcounter{sectionentry}%
  \gdef\thesectionentry{\arabic{sectionentry}}%
}{}{\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.
  }%
}
\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
\generatesectionendpagelabel% Achtung: Bewusst falsch platzierte Generierung des Endseiten-Labels!
\lipsum
\section{Section 3}
\lipsum

\end{document}

Hier wird nun im Inhaltsverzeichnis für Abschnitt »2.2 Section 2« ein – wenn auch aufgrund der falschen Platzierung der Anweisung mitten im Abschnitt falscher – Seitenbereich ausgegeben:

falscher manueller Seitenbereits für Abschnitt »2.2 Section 2«

Wie an diesem Beispiel zu sehen ist, sinkt der Implementierungsaufwand durch weglassen des Automatismus nur wenig. Dafür erhöht sich die Gefahr, dass falsche Seitenbereiche im Inhaltsverzeichnis ausgegeben werden erheblich. Aus diesem Grund rate ich von einem solchen Vorgehen generell ab.

Permanenter link

beantwortet 29 Jan, 11:34

Ijon%20Tichy's gravatar image

Ijon Tichy
10.4k31531
Akzeptiert-Rate: 51%

bearbeitet 29 Jan, 11:35

@FloTeX Ja, aber ich habe jetzt keine Zeit mehr dafür. Genau deshalb wollte ich, dass du deine Frage präzisierst und insbesondere für den Fall, dass du eben nicht mit meinem Orignalbeispiel, sondern mit einer Abwandlung davon ein Problem hast, dazu eine konkrete Folgefrage mit vollständigem Minimalbeispiel erstellst. So habe ich jetzt über eine Stunde Zeit verschwendet und muss mich erst einmal anderen Dingen widmen. Ich werde ja hier nicht bezahlt.

(29 Jan, 12:17) Ijon Tichy

WOW!

Vielen Dank, funktioniert einwandfrei!!!

Ganz großes Kino!!

Alles gut, Du hast Deine Zeit nicht verschwendet! Das war sehr wertvoll!!! Vielen Dank nochmal!

Und ja, ich finde auch, jeder von Euch Helfern sollte gleich eine Adresse angeben, wo man eine Flasche Wein hin verschicken kann!

(29 Jan, 12:18) FloTeX

Auch wenn du mit der Antwort jetzt klar gekommen bist, empfehle ich, die von mir verlinkten Seiten und möglichst auch die verwendeten Anweisungen noch einmal nachzulesen. So richtig schwer zu verstehen, sollte das eigentlich nicht sein. Es ist aber auch nicht tragisch, wenn man nicht alles sofort versteht, sondern erst einmal nur einen Überblick erhält.

Danke geht hier übrigens mit Daumen hoch und ggf. Haken. Wein muss nicht sein.

Ohne LaTeX oder KOMA-Script wäre die Antwort nicht möglich gewesen.

(29 Jan, 14:02) Ijon Tichy
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×67
×46
×21

gestellte Frage: 29 Jan, 09:37

Frage wurde gesehen: 602 Mal

zuletzt geändert: 29 Jan, 14:03