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 `\ifusepageperchapter` definiert, so dass mit Hilfe von `\usepageperchaptertrue` und `\usepackageperchapterfalse` zwischen kapitelweiser und globaler Seitennummerierung umgeschaltet werden kann. Dann wird `\pagenumbering` so umdefiniert, dass es nicht nur den Nummerierungsstil der Seitenzahl selbst ändert, sondern im Falle der aktivierten kapitelweisen Nummerierung die Kapitelnummer mit anzeigt, falls diese größer als 0 ist (bei `scrbook` statt `scrreprt` würde man hier auch noch `\if@mainmatter…\fi` ergänzen, um das ganze auf den nummerierten Hauptteil zu beschränken).
Dann stellt sich noch die Frage, wann und wie man `page` mit jedem neuen Kapitel auf 1 setzt. Einfach `\@addtoreset` (oder `chngcntr`) kann man nicht verwenden, da das auf 0 statt auf 1 setzt. Außerdem könnte man dann das Zurücksetzen nicht mehr über `\ifusepageperchapter` steuern. Also wird im Code oben das Ganze einfach an die Ausführung von `\addchaptertocentry` gekoppelt. Das ist der Befehl, der Kapiteleinträge ins Inhaltsverzeichnis vornimmt.
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 `\label`-Befehl setzten. Automatisch kennen wir aber das Ende eines Abschnitts nicht wirklich. Stattdessen wissen wir nur, wo ein neuer Abschnitt beginnt. Ein erster Ansatz wäre also, beispielsweise mit:
\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 `\generatesectionendpagelabel` als
\newcommand*{\generatesectionendpagelabel}{\label{\thesection}}
definiert werden. Allerdings haben wir bei Kapitelanfängen dann zwei Probleme:
1. Das Label für den letzten Abschnitt des vorherigen Kapitels wird erst produziert, wenn `\chapter` bereits eine neue Seite begonnen hat, das Label referenziert also die falsche Seite.
2. `\thesection` ist nicht mehr die Nummer des vorherigen Abschnitts, sondern Abschnitt Nummer 0 des neue begonnenen Kapitels.
Beide Probleme lassen sich lösen, indem ebenfalls vor einer neuen Kapitelüberschrift ein Label erzeugt wird:
\xpretocmd{\chapter}{%
\generatesectionendpagelabel
}{}{\undefined}
`\xpretocmd` wird dabei übrigens von [Paket `xpatch`](https://ctan.org/pkg/xpatch) bereitgestellt.
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 `.toc`-Datei so aus:
\contentsline {section}{\numberline {<Abschnittsnummer>}<Überschrift>}{<Seite>}
Statt `<Seite>` wollen wir jetzt gerne `<Startseite> -- <Endseite>`. Erzeugt wird der Eintrag bei KOMA-Script mit `\addsectiontocentry`. An der Stelle könnten wir nun eingreifen und dafür sorgen, dass statt `\thepage` etwas wie `\thepage\ -- \pageref{\thesection}` als letzte Argument geschrieben wird. Allerdings erweist sich das als nicht so einfach, weil `\addsectiontocentry` gar kein explizites Argument für die Seitenzahl hat. Erschwerend kommt hier die asynchrone Ausgabe von LaTeX hinzu. Hier wäre es günstiger und einfacher, wenn stattdessen eine Referenz auf den n-ten section-Eintrag existieren würde, auf den dann einfach referenziert werden kann. Daher definieren wir die Erzeugung des Labels etwas aufwändiger als oben umrissen:
\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}{}{}{%
\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 `\Ifstr`, die hier verwendet wird, um zu testen, ob aktuell eine Startseite gemerkt wurde, bis einschließlich KOMA-Script 3.27 mit kleinem `i` geschrieben wurde, also `\ifstr`.
Die ständige Umdefiniererei von `\thesectionentry` passiert nur, damit es zu keinen doppelten Labels kommt, weil ja sowohl `\section` also auch `\chapter` ein Label produzieren würde. Außerdem kann man so notfalls mit `\generatesectionendpagelabel` im Dokument auch manuell eingreifen.
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 `tocbasic` bereit stellt:
\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}{}{%
\Ifundefinedorrelax{r@section.endpage.to.section.entry.\therefsectionentry}{}{%
\ --\ \pageref{section.endpage.to.section.entry.\therefsectionentry}%
}%
}
So wie mit Zähler `sectionentry` schon die Anzahl der erzeugten `section`-Verzeichniseinträge gezählt wurden, werden hier die Anzahl der ausgegebenen `section`-Verzeichniseinträge gezählt, um ebenfalls auf das Label zugreifen zu können. Da LaTeX keinen Befehl bereitstellt um zu testen, ob ein Label existiert – nur dann existiert auch ein Seitenbereich – wird mit `\ifundefinedorrelax` `\Ifundefinedorrelax` auf das interne Makro getestet, das ein existierendes Label repräsentiert.
repräsentiert. Es ist zu beachten, dass die Anweisung bis einschließlich KOMA-Script 3.27 `\ifundefinedorrelax`, also mit kleinem `i` am Anfang hieß.
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}{}{}{%
\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}{}{%
\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:
[![Inhaltsverzeichnis mit Seitenbereichen][1]][1]
Für den Fall, dass jeder Abschnitt eine neue Seite beginnen soll (was ich nicht empfehlen würde) ist ebenfalls eine auskommentierte Option bei `\RedeclareSectionCommand` zu finden. Für die nähere Erklärung diverser KOMA-Script-Befehle sei auf die KOMA-Script-Anleitung oder das KOMA-Script-Buch hingewiesen (das gerade in 6. Auflage neu erschienen ist). `\xpretocmd` ist der `xpatch`-Anleitung zu entnehmen. Die Originaldefinition von `\pagenumbering` findet sich in dokumentierten LaTeX-Quelltext `source2e.pdf`.
Es sei darauf hingewiesen, dass diese Lösung einige Grenzen hat. So sind `\addchap` und `\addsec` bisher nicht behandelt, wobei diese mit kapitelweiser Seitennummerierung ohnehin wenig sinnvoll sein dürften. Außerdem muss vor einem manuellen `\clearpage` ggf. auch `\generatesectionendpagelabel` aufgerufen werden, wenn mit dem `\clearpage` ein Abschnitt beendet wird. Für `\clearpage` innerhalb eines Abschnitts gilt das natürlich nicht, weshalb ich oben auch nicht mit `\xpretocmd` direkt ein `\generatesectionendpagelabel` an den Anfang von `\clearpage` gepatcht habe. Ich empfehle, bei Bedarf eine neue Anweisung, beispielsweise `\sectionendclearpage`, zu definieren.
[1]: https://texwelt.de/wissen/upfiles/test-20180330_140959.png