在文档中的特定(但未知)点自动切换页眉样式

在文档中的特定(但未知)点自动切换页眉样式

在页面上环境结束后,我想切换标题样式。下面的代码按我希望的方式工作。但是,使用everypage感觉有点矫枉过正,我想知道是否有一种方法内置在已加载的包之一中(包括zref),或者其他“更好”的方法来实现相同的目的。

\documentclass{article}
%\usepackage{zref}
\usepackage{enumitem}
\usepackage{titleps}
\usepackage{xparse}
\usepackage{everypage}

\newpagestyle{before}{
    \sethead{}{before}{}
}
\pagestyle{before}

\newpagestyle{after}{
    \sethead{}{after}{}
}

\ExplSyntaxOn

\int_new:N \g_last_item_page_int
\int_gset:Nn \g_last_item_page_int {\c_max_int}

\newlist{mylist}{enumerate}{1}
\setlist[mylist]{
 label = (\arabic*),
 after = \int_gset:Nn \g_last_item_page_int {\thepage}
}

\AddEverypageHook{
    \int_compare:nT {\thepage > \g_last_item_page_int}
      {\pagestyle{after}}
}

\ExplSyntaxOff

\begin{document}
Header should be "before".
\newpage
\begin{mylist}
    \item Header should be "before".
    \newpage
    \item Header should be "before".
\end{mylist}
Header should be "before".

\newpage

Header should be "after".

\end{document}

答案1

以下用途afterpage并受到页面样式仅适用\thispagestyleafterpage

由于使用 设置页面样式\pagestyle不是全局的(与使用 设置相比\thispagestyle),\afterpage因此需要一些帮助。因此,将页面样式设置为after(通过\ps@after\aftergroup提供\afterpage了一种解决方法:

\usepackage{afterpage}% http://ctan.org/pkg/afterpage
...
\makeatletter
\setlist[mylist]{
  label = (\arabic*),
  after = \afterpage{\aftergroup\ps@after}
}
\makeatother

更好的办法可能是使用条件或控制序列作为页眉/页脚组合的一部分,因为这些分配可以在内部全局化,\afterpage而无需任何技巧。例如:

\def\headertext{before}
\newpagestyle{myheader}{
    \sethead{}{\headertext}{}
}
\pagestyle{myheader}

\newlist{mylist}{enumerate}{1}
\setlist[mylist]{
 label = (\arabic*),
 after = \afterpage{\gdef\headertext{after}}
}

相关内容