
文件中有多種頁面樣式,如果某些段落出現的頁面樣式是,例如,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}
分割符有效,但文字最終會出現在分頁符號之後。
更不用說文字本身可能會被分割成多個頁面,在這種情況下,無論你做什麼都會是錯誤的。好的,我們可以嘗試使用基於\label
and 的東西\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...}
。