
In einem Dokument gibt es mehrere Seitenstile, und ich möchte das Erscheinungsbild einiger Absätze, deren Seitenstil beispielsweise lautet, plain
mit einem Makro ändern, das ungefähr die folgende Form hat:
\def\plainpagestyle{plain}
\def\someparagraph#1{
\ifx???\currentpagestyle???\plainpagestyle
\textbf{#1}
\else
\textit{#1}
\fi
}
Dadurch \someparagraph{some text}
wird „einiger Text“ auf plain
Seiten fett und an anderer Stelle kursiv dargestellt.
Genauer gesagt möchte ich, dass sich das Erscheinungsbild einiger Absätze auf den Seiten a part
oder a ändert chapter
oder dass ähnliche Dinge wie „beginnen“ \thispagestyle{plain}
auf der Seite immer „nach“ deklariert ist.
Gibt es eine nette Möglichkeit, das zu tun?
Antwort1
(Zu lang für einen Kommentar)
Dies wird nicht funktionieren, es sei denn, Ihr \someparagraph
wird auf jeden Fall garantiert im Gültigkeitsbereich von angezeigt \thispagestyle{plain}
.
Normalerweise setzt TeX AbsätzeVorNachdem Sie entschieden haben, wo die Seiten aufgeteilt werden sollen, kann es passieren, dass das \someparagraph
Programm beim Auftreffen auf Ihre Seite zwar immer noch glaubt, dass die Seite \thispagestyle{plain}
gültig ist, der Text jedoch letztendlich nach dem Seitenumbruch angezeigt wird.
Ganz zu schweigen davon, dass der Text selbst möglicherweise auf mehrere Seiten verteilt ist und in diesem Fall auf jeden Fall falsch ist, egal was Sie tun. OK, wir könnten es mit etwas versuchen, das auf \label
und basiert \ref
, dem asynchronen Mechanismus, der korrekte Seitenverweise ermöglicht.
Jetzt beginnt der Spaß: Die Größe des Textes wird unterschiedlich sein, wenn Sie ihn fett oder kursiv setzen; Fettdruck kann einen Seitenumbruch auslösen und Sie erhalten den Text auf einer Seite mit normalem Stil, aber in Fettdruck. Selbst ein asynchroner Mechanismus kann also versagen, weil Sie beim nächsten Satz Kursivdruck erhalten, wasnichtden Seitenumbruch auslösen. Erkennen Sie die Gefahr einer Endlosschleife?
Sie müssen Ihr Problem besser eingrenzen, wenn Sie auf eine Antwort hoffen.
Antwort2
Wenn Ihr Test
wurde
\thispagestyle
ausgegeben UND der ausgewählte Seitenstil istplain
dann klappt folgendes
\makeatletter
\def\@SS@plain{plain}
\newcommand\whatisthepagestyle{%
\if@specialpage
\ifx\@specialstyle\@SS@plain
PAGE IS PLAIN
\else
PAGE IS SPECIAL, NOT PLAIN
\fi
\else
PAGE IS NOT SPECIAL
\fi
}
\makeatother
- Damit wird nicht geprüft, ob dieaktuellSeitenstil ist schlicht, aber nur, ob auf deraktuellSeite, zu der ein Anruf
\thispagestyle{plain}
erfolgt ist. Wenn jemand\pagestyle{plain}
auf der Seite aufruft, auf der er\pagestyle{empty}
auf der nächsten Seite anruft, ist dies nicht möglich. - Dies verhält sich merkwürdig, wenn
\thispagestyle{plain}
es\thispagestyle{something-else}
auf derselben Seite mit dazwischenliegendem Text erscheint, der den Test verwendet. - Dies verhält sich komisch, wenn
\thispagestyle{plain}
es relativ spät auf der Seite festgelegt wird. - Dies setzt voraus, dass die Definition von nicht durcheinandergebracht wurde
\thispagestyle
. - Dies wird mit ziemlicher Sicherheit ein wenig auf die nächste Seite übergreifen; Ihrer Frage und Ihren Kommentaren nach zu urteilen, sind Sie damit aber offenbar einverstanden.
Geht es bei Ihrer Frage wirklich um das Testen von \thispagestyle{plain}
? Oder handelt es sich insgeheim um ein XY-Problem, bei dem es eigentlich darum geht, bestimmte Stile auf den Seiten zu ändern, auf denen \chapter
und \part
ausgegeben werden? Wenn es das Letztere ist, ist ein besserer (IMHO) Weg,
\AddToHook{shipout/after}{\gdef\someparagraph\textit}
und um sich in Ihr Styling von einzuklinken \chapter
und \part
zu definieren, \gdef\someparagraph\textbf
wann sie aufgerufen werden. Dies kann entweder mit erfolgen titlesec
(wodurch Sie Code angeben können, der ausgeführt werden soll, nachdem das Abschnitts-Styling angewendet wurde) oder mit etoolbox
und etwas wie \pretocmd\{\chapter}{\gdef...}
.