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, 08:49

kabel's gravatar image

kabel
2212220
Akzeptiert: 70%

bearbeitet 24 Feb, 02:51

saputello's gravatar image

saputello
18.4k22352


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, 15:50

saputello's gravatar image

saputello
18.4k22352

bearbeitet 25 Feb, 07:13

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×25
×25
×20
×8
×3

Frage gestellt: 21 Feb, 08:49

Frage wurde angeschaut: 896 Mal

Zuletzt aktualisiert: 25 Feb, 07:13