2
1

Kapitel fangen in meinem Buch stets neu mit 1 an, wenn ein neuer Part beginnt. Querverweise können auch Part-übergreifend vorkommen. In solchen Fällen - und nur dann - soll die automatisch ermittelte (römische) Part-Nummer vorangestellt werden. Kann dies auf einfache Weise in der Präambel vorkonfiguriert werden?

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
%\usepackage[x-iso-8859-1]{inputenx}
\usepackage[ngerman]{babel}
\usepackage[ngerman]{varioref} % Referenzen
\usepackage[T1]{fontenc}

\usepackage{mwe}
%Kap.-Zählung neu beginnen
\renewcommand{\partmark}[1]{\setcounter{chapter}{0}\markboth{#1}{}}

\begin{document}

\part{Erster Teil des Buches}
\chapter{Einführung}
\section{Blindtext 1}
\blindtext\label{BT_1}
\section{Weitere Texte}

Was bereits in Blindtext 1 in Kap. \ref{BT_1} ausgeführt, wollen wir in Blindtext 2 in Kap. \ref{BT_2} weiter vertiefen.
Der Querverweis mü\ss{}te richtig hei\ss{}en:
Was bereits in Blindtext 1 in Kap. \ref{BT_1} ausgeführt, wollen wir in Blindtext 2 in Kap. II-\ref{BT_2} weiter vertiefen.

\part{Zweiter Teil des Buches}
\chapter{Ausführungen}
\section{Blindtext 2}
\blindtext\label{BT_2}
\section{Weitere Texte}
In Blindtext 1 (s. Kap. I-\ref{BT_1}) wurde bereits ausgeführt \dots \\
Auch hier muss die römische Ziffer des Buchteils mitgeführt werden, wenn auf einen anderen Buchteil verwiesen wird.

\end{document}

gefragt 21 Feb '16, 14:49

kabel's gravatar image

kabel
25982632
Akzeptiert-Rate: 33%

bearbeitet 24 Feb '16, 08:51

saputello's gravatar image

saputello
11.1k154365


Das Zurücksetzen der Kapitelnummer in \partmark unter zu bringen ist ein übler Hack. Man kann das bei KOMA-Script ganz einfach per \RedeclareSectionCommand erledigen.

Der Rest ist dann ein Vergleich der aktuellen Teil-Nummer mit der Teil-Nummer des referenzierten Abschnitts. Im Beispiel verwende ich für den Vergleich \ifstr aus KOMA-Script. Daher funktioniert dies nur, wenn \thepart vollständig expandierbar ist. Das ist im Beispiel der Fall:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenc}% Wer Umlaute verwendet, sollte die Codierung deklarieren!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage{mwe}
%Kap.-Zählung neu beginnen
\RedeclareSectionCommand[counterwithin=part]{chapter}
\renewcommand*{\thechapter}{\arabic{chapter}}
\renewcommand{\partmark}[1]{\markboth{#1}{}}
\makeatletter
\def\p@chapter{\IfPartNot{\thepart}}% Präfix für chapter-Labels
\def\p@section{\IfPartNot{\thepart}}% Präfix für section-Labels
\def\p@subsection{\IfPartNot{\thepart}}% Präfix für subsection-Labels
\makeatother
\DeclareRobustCommand*{\IfPartNot}[1]{%
  \ifstr{\thepart}{#1}{}{#1-}%
}

\begin{document}
\part{Erster Teil des Buches}
\chapter{Einführung}
\section{Blindtext 1}
\blindtext\label{BT_1}
\section{Weitere Texte}

Was bereits in Blindtext 1 in Abschnitt \ref{BT_1} ausgeführt, wollen wir in Blindtext 2 in Abschnitt \ref{BT_2} weiter vertiefen.

Der Querverweis müsste richtig heißen:
Was bereits in Blindtext 1 in Abschnitt \ref{BT_1} ausgeführt, wollen wir in Blindtext 2 in Abschnitt II-1.1 weiter vertiefen.

\part{Zweiter Teil des Buches}
\chapter{Ausführungen}
\section{Blindtext 2}
\blindtext\label{BT_2}
\section{Weitere Texte}
In Blindtext 1 (siehe Abschnitt \ref{BT_1}) wurde bereits ausgeführt \dots

Auch hier muss die römische Ziffer des Buchteils mitgeführt werden, wenn auf einen anderen Buchteil verwiesen wird.

\end{document}

Das Makro \IfPartNot wird robust deklariert, damit es nicht bereits beim Schreiben des Labels in die aux-Datei expandiert wird, sondern erst bei dessen Verwendung durch \ref. Dagegen wird das \thepart im Argument von \IfPartNot in \p@… bereits beim Schreibe in die aux-Datei expandiert. #1 innerhalb von \IfPartNot ist daher \thepart zum Zeitpunkt \label. Dies wird mit dem \thepart des \ref-Zeitpunkts verglichen. Sind beide gleich, passiert nichts. Sind sie nicht gleich, so wird #1- als Präfix ausgegeben.

varioref habe ich weggelassen, weil es im Beispiel gar nicht verwendet wird. Dafür habe ich die Eingabecodierung deklariert, da im Text Umlaute, also Sonderzeichen, verwendet werden. utf8 ist die Codierung des Online-Editors und die Voreinstellung der meisten LaTeX-Editoren.

Übrigens sollte man ß besser nicht als \ss{} eingeben, weil dadurch das Wort in zwei Teile zerfällt und so beispielsweise das Kerning gestört wird. Wenn man schon \ss verwendet, dann mit Leerzeichen danach. Besser ist allerdings, es wie ü auch direkt einzugeben. Und natürlich sollte man auch die Neue Deutsche Rechtschreibung verwenden, wenn man ngerman als Option bei babel angibt

Permanenter link

beantwortet 23 Feb '16, 21:50

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 25 Feb '16, 13:13

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:

×48
×32
×28
×17
×6

gestellte Frage: 21 Feb '16, 14:49

Frage wurde gesehen: 8,517 Mal

zuletzt geändert: 25 Feb '16, 13:13