文档中有几种页面样式,如果某些段落出现的页面样式是,我想plain
使用大致以下形式的宏来更改它们的外观:
\def\plainpagestyle{plain}
\def\someparagraph#1{
\ifx???\currentpagestyle???\plainpagestyle
\textbf{#1}
\else
\textit{#1}
\fi
}
这使得\someparagraph{some text}
“一些文本”在plain
页面上以粗体显示,在其他地方以斜体显示。
更具体地说,我希望某些段落的外观在页面 apart
或 a上发生变化chapter
,或者像这样开始,所以总是\thispagestyle{plain}
在页面上声明之后。
有什么好方法吗?
答案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...}
。