如何获取当前页面样式作为 LaTeX 中某些排序格式的条件?

如何获取当前页面样式作为 LaTeX 中某些排序格式的条件?

文档中有几种页面样式,如果某些段落出现的页面样式是,我想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...}

相关内容