这是我想要实现的目标:我希望能够在源代码中各个页面的开头设置各个页面的页眉内容。
我的想法是将内容放在\@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}