문서의 특정(알 수 없음) 지점에서 헤더 스타일을 자동으로 전환합니다.

문서의 특정(알 수 없음) 지점에서 헤더 스타일을 자동으로 전환합니다.

페이지에서~ 후에환경이 종료되면 헤더 스타일을 바꾸고 싶습니다. 아래 코드는 내가 원하는 대로 작동합니다. 그러나 의 사용은 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그리고 영향을 받는다\thispagestyle페이지 스타일은 다음 에서만 작동합니다 .afterpage.

을 사용하여 페이지 스타일을 설정하는 것은 \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}}
}

관련 정보