如何取得目前頁面樣式作為 LaTeX 中某些排序的條件?

如何取得目前頁面樣式作為 LaTeX 中某些排序的條件?

文件中有多種頁面樣式,如果某些段落出現的頁面樣式是,例如,plain具有大致以下形式的宏,我想更改某些段落的外觀:

\def\plainpagestyle{plain}
\def\someparagraph#1{
    \ifx???\currentpagestyle???\plainpagestyle
        \textbf{#1}
    \else
        \textit{#1}
    \fi
}

這樣,\someparagraph{some text}「某些文字」就會在plain頁面上以粗體顯示,而在其他地方則以斜體顯示。

更具體地說,我希望某些段落的外觀在頁面 apart或 achapter或其他類似的開始內容上發生變化,因此始終\thispagestyle{plain}在頁面上聲明 after 。

有什麼好的方法嗎?

答案1

(太長了,無法評論)

這是行不通的,除非你無論如何都\someparagraph保證出現在 的範圍內。\thispagestyle{plain}

通常,TeX 是排版段落決定了在哪裡分割頁面,因此可能會發生這樣的情況:當它遇到您時,\someparagraph它仍然認為該\thispagestyle{plain}分割符有效,但文字最終會出現在分頁符號之後。

更不用說文字本身可能會被分割成多個頁面,在這種情況下,無論你做什麼都會是錯誤的。好的,我們可以嘗試使用基於\labeland 的東西\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...}

相關內容