3
1

In meinem zweiseitigen Dokument (scrbook) sollen Teile-Überschriften immer auf rechten Seiten ausgegeben werden. Für die darauf folgenden Kapitel soll dagegen open=any gelten. Erreichen kann ich das mit

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
% siehe http://www.komascript.de/comment/4904#comment-4904
\usepackage{xpatch}
\xpretocmd{\part}{\KOMAoptions{open=right}}{}{}
\xpretocmd{\addpart}{\KOMAoptions{open=right}}{}{}
\renewcommand*\partheademptypage{\KOMAoptions{open=any}}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Wenn ich aber versuche die Umstellung auf open=any durch

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\xapptocmd{\part}{\KOMAoptions{open=any}}{}{}
\xapptocmd{\addpart}{\KOMAoptions{open=any}}{}{}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

statt über die Umdefinition von \partheademtypage vorzunehmen, bekomme ich nicht das gewünschte Ergebnisses, aber dafür einige Fehlermeldungen. Mich interessiert jetzt, warum \xapptocmd{\part}{\KOMAoptions{open=any}}{}{} im Gegensatz zu \xpretocmd{\part}{\KOMAoptions{open=right}}{}{} nicht funktioniert.

Code:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass[10pt]{scrbook}
% siehe http://www.komascript.de/comment/4904#comment-4904
\usepackage{xpatch}
\xpretocmd{\part}{\KOMAoptions{open=right}}{}{}
\xpretocmd{\addpart}{\KOMAoptions{open=right}}{}{}
%\renewcommand*\partheademptypage{\KOMAoptions{open=any}}% funktioniert
%
\xapptocmd{\part}{\KOMAoptions{open=any}}{}{}% funktioniert nicht
\xapptocmd{\addpart}{\KOMAoptions{open=any}}{}{}% funktioniert nicht
%
\usepackage{lipsum}
\begin{document}
\frontmatter
\title{test}
\author{test}
\maketitle
\tableofcontents
\mainmatter
\part{Teil 1}
\addchap{Kapitel 1}
\lipsum[1]
\chapter{Kapitel 2}
\lipsum[1]
\addpart{Teil 2}
\addchap{Nicht nummeriertes Kapitel}
\lipsum[1-5]
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 20 Mär '15, 16:22

welle's gravatar image

welle
106222631
Akzeptiert-Rate: 0%

bearbeitet 20 Mär '15, 17:31

saputello's gravatar image

saputello
11.1k174365


Bei Befehlen mit Argument funktioniert das Anhängen von Code an den Befehl nur, wenn der Befehl sein Argument selbst liest. Wird das Argument hingegen von einem Unterbefehl gelesen, so wird der angehängte Code stattdessen ganz oder teilweise zum Argument. Beispiel:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{xpatch}
\newcommand*{\textformatierung}{\textbf}
\xapptocmd{\textformatierung}{+++}{}{}
\begin{document}
\textformatierung{Der Text soll fett werden.}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Erzeugt kein fettes »Der Text soll fett werden.« gefolgt von drei Pluszeichen, sondern nur ein fettes »+« gefolgt von zwei nicht fetten »+«, gefolgt von einem nicht fetten »Der Text soll fett werden.«. Sieht man sich die aus dem \xapptocmd resultierende Definition mit Hilfe von \show\textformatierung an, wird auch klar, woran das liegt:

> \textformatierung=macro: ->\textbf +++.

Demnach ist \textformatierung jetzt wie

Open in Online-Editor
\newcommand*{\textformatierung}{\textbf+++}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

definiert, was auch genau der Spezifikation von \xpatchcmd entspricht. Damit ist »{Der Text soll fett werden.}« nicht einmal mehr ein Argument von \textbf (oder \textformatierung), sondern einfach nur eine Gruppe mit dem Text als Inhalt.

Bei \part ist es sogar noch etwas komplizierter. Diese Anweisung muss noch vor dem Lesen des ersten Arguments testen, ob ein Stern folgt, was prinzipiell so geschieht:

Open in Online-Editor
\newcommand*{\part}{\@ifstar {\@spart}{\@part}}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Hängt man hier mit \xpatchcmd Code an, dann prüft \@ifstar nicht mehr, ob nach \part ein Stern folgt, sondern ob das erste Token dieses angehängten Codes ein Stern ist, bevor es die weiteren Token des angehängten Codes teilweise als Argument von \@spart oder \@part verwendet.

Da man ohne Kenntnisse der Definition eines Befehls nie wissen kann, ob er seine Argumente selbst auswertet oder nicht, muss man mit diesem Problem grundsätzlich rechnen. Bei Befehlen, die eine Sternform besitzen, gibt es das Problem grundsätzlich.

Bei \xpretocmd kann ein solches Problem dagegen nie auftreten.

Dasselbe Problem betrifft übrigens auch \apptocmd von etoolbox und ähnliche Befehle.

Permanenter link

beantwortet 20 Mär '15, 16:51

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 13 Sep '16, 18:18

@saputello Danke für die tolle Erklärung :-)

(20 Mär '15, 17:24) welle
Deine Antwort
[Vorschau ausblenden]

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

Frage-Themen:

×132
×52

gestellte Frage: 20 Mär '15, 16:22

Frage wurde gesehen: 8,943 Mal

zuletzt geändert: 13 Sep '16, 18:18

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×