为页面特定的标题定义一个环境内的全局变量

为页面特定的标题定义一个环境内的全局变量

这是我想要实现的目标:我希望能够在源代码中各个页面的开头设置各个页面的页眉内容。

我的想法是将内容放在\@thisheader放入标题的变量中,然后切换\thispagestyle为仅在该页面上显示它。

在 MWE 中,这适用于已定义的宏\thisheadermacro。但是,由于我希望将列表放入标题中,因此我更愿意定义一个新环境。这就是我陷入困境的地方。

使用该environ包,我可以编译代码,但不会\@thisheader全局更改,因此会显示以前的标题内容。\def\gdef或替换\xdef没有帮助。通过\chead{}直接调用完全替换变量定义也没有用。

定义\newenvironment(见下文)会引发错误,可能是因为分组问题,我无法修复。

有没有办法使用我的\NewEnviron方法?或者是否有其他更优雅的解决方案?

\documentclass{scrbook}

\usepackage{showframe, blindtext}

\usepackage{scrlayer-scrpage}
\pagestyle{plain}
\clearpairofpagestyles
    \chead{\@thisheader}

\newcommand{\thisheadermacro}[1]{%
    \def\@thisheader{\begin{itemize} #1 \end{itemize}}
    \thispagestyle{headings}}

\newenvironment{thisheaderenvironment}{%
    \def\@thisheader\begingroup\begin{itemize}}{%
    \end{itemize}\endgroup
    \thispagestyle{headings}}

\usepackage{environ}
\NewEnviron{thisheaderEnviron}{%
    \def\@thisheader{\begin{itemize} \BODY \end{itemize}}
    \thispagestyle{headings}}


\begin{document}

\thisheadermacro{\item thisheadermacro}
\blindtext

%% The errors for this block, I cannot fix at all.
%\clearpage
%\begin{thisheaderenvironment}
%thisheaderenvironment
%\end{thisheaderenvironment}
%\blindtext

%% This block compiles, but does not yield the right header.
\clearpage
\begin{thisheaderEnviron}
\item thisheaderEnviron
\end{thisheaderEnviron}
\blindtext

\end{document}

PS:我也研究过使用该background包。但在​​这里我遇到了同样的问题:\backgroundsetup在组内使用没有全局效果。

答案1

目前尚不清楚您为什么要使用itemize,但情况如下:

\documentclass{scrbook}
\usepackage{environ}

\usepackage{showframe, blindtext}

\usepackage{scrlayer-scrpage}
\pagestyle{plain}
\clearpairofpagestyles
\makeatletter
\chead{\@thisheader}

\NewEnviron{thisheaderEnviron}{%
  \xdef\@thisheader{%
    \noexpand\begin{itemize}
    \unexpanded\expandafter{\BODY}
    \noexpand\end{itemize}}%
  \thispagestyle{headings}
}
\makeatother

\setlength{\headheight}{60pt}

\begin{document}

\begin{thisheaderEnviron}
\item First
\end{thisheaderEnviron}
\blindtext
\clearpage

\begin{thisheaderEnviron}
\item Second
\end{thisheaderEnviron}
\blindtext

\end{document}

在此处输入图片描述

相关内容