
文書には複数のページ スタイルがあり、いくつかの段落が表示されるページ スタイルが、たとえば である場合に、plain
おおよそ次の形式のマクロを使用して、いくつかの段落の外観を変更したいと考えています。
\def\plainpagestyle{plain}
\def\someparagraph#1{
\ifx???\currentpagestyle???\plainpagestyle
\textbf{#1}
\else
\textit{#1}
\fi
}
これにより、ページ\someparagraph{some text}
上では「一部のテキスト」が太字で表示されplain
、他の場所では斜体で表示されます。
part
もっと具体的に言うと、ページ aまたはなどのいくつかの段落の外観を変更したいのですがchapter
、たとえば、次のようにします。そのため、\thispagestyle{plain}
ページでは常に after が宣言されます。
何か良い方法はないでしょうか?
答え1
(コメントするには長すぎます)
何があろうと が\someparagraph
の範囲内に現れることが保証されない限り、これは機能しません。\thispagestyle{plain}
通常、TeXは段落をタイプセットする前にページを分割する場所を決定した後、改ページが検出されると、\someparagraph
それがまだ\thispagestyle{plain}
有効であると認識されますが、テキストは最終的にページ区切りを超えて表示されます。
言うまでもなく、テキスト自体が複数のページに分割される可能性があり、この場合、何をしても間違ったものになります。では、正しいページ参照を可能にする非同期メカニズムである\label
とに基づいたものを試すことができます。\ref
ここからが面白いところです。太字や斜体でタイプセットするとテキストのサイズが変わります。太字だと改ページがトリガーされ、通常のスタイルで太字のテキストがページに表示されることになります。そのため、非同期メカニズムでも失敗する可能性があります。次のタイプセットでは斜体になり、ないページ区切りをトリガーします。無限ループのリスクがわかりますか?
答えを得たいのであれば、問題をより明確に定義する必要があります。
答え2
あなたのテストが
発行されており
\thispagestyle
、選択されたページスタイルはplain
そうすれば次のようになります
\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
- これは、現在ページスタイルはプレーンですが、現在呼び出しが
\thispagestyle{plain}
発行されたページ。誰かが\pagestyle{plain}
そのページで呼び出し、その後\pagestyle{empty}
次のページで呼び出した場合、何もできません。 \thispagestyle{plain}
と が、\thispagestyle{something-else}
テストを使用する介在テキストと同じページに表示される場合、動作がおかしくなります。\thispagestyle{plain}
ページの比較的遅い位置に設定すると、動作がおかしくなります。- これは、 の定義に何も変更されていないことを前提としています
\thispagestyle
。 - これはほぼ確実に次のページに少し影響するでしょうが、あなたの質問とコメントからすると、あなたはそれで問題ないようです。
あなたの質問は本当に のテストに関するものですか?それとも、とが発行される\thispagestyle{plain}
ページの特定のスタイルを変更することが本当の問題である、秘密のXY問題ですか?後者の場合、より良い(私見では)方法は、\chapter
\part
\AddToHook{shipout/after}{\gdef\someparagraph\textit}
および のスタイル設定にフックして\chapter
、それらが呼び出されるタイミング\part
を定義します\gdef\someparagraph\textbf
。これは、 を使用するかtitlesec
(セクション スタイル設定が適用された後に実行されるコードを指定できます)、 のetoolbox
ようなものを使用して行うことができます\pretocmd\{\chapter}{\gdef...}
。