Wie kann ich den aktuellen Seitenstil als Bedingung für eine Sortierung in LaTeX verwenden?

Wie kann ich den aktuellen Seitenstil als Bedingung für eine Sortierung in LaTeX verwenden?

In einem Dokument gibt es mehrere Seitenstile, und ich möchte das Erscheinungsbild einiger Absätze, deren Seitenstil beispielsweise lautet, plainmit 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 plainSeiten fett und an anderer Stelle kursiv dargestellt.

Genauer gesagt möchte ich, dass sich das Erscheinungsbild einiger Absätze auf den Seiten a partoder a ändert chapteroder 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 \someparagraphwird 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 \someparagraphProgramm 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 \labelund 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 \thispagestyleausgegeben 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 \chapterund \partausgegeben 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 \chapterund \partzu definieren, \gdef\someparagraph\textbfwann 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 etoolboxund etwas wie \pretocmd\{\chapter}{\gdef...}.

verwandte Informationen