LaTeX での書式設定の条件として使用する現在のページ スタイルを取得するにはどうすればよいですか?

LaTeX での書式設定の条件として使用する現在のページ スタイルを取得するにはどうすればよいですか?

文書には複数のページ スタイルがあり、いくつかの段落が表示されるページ スタイルが、たとえば である場合に、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...}

関連情報