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
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.
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:
Code, hier editierbar zum Übersetzen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
\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
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
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.
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
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
Code, hier editierbar zum Übersetzen:
1
2
3
4
\RedeclareSectionCommand[%
% style=chapter,% Abschnitte sollten wie Kapitel auf einer neuen Seite beginnen.
tocpagenumberformat=\pagenumberrange,% Format der Seitenzahlen im Inhaltsverzeichnis ändern.
zunächst überhaupt kein Seitenbereich im Inhaltsverzeichnis mehr ausgegeben:
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:
Code, hier editierbar zum Übersetzen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
\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
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:
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.
@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.
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.
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
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.