Ich definiere ein Makro mit dem Namen \pagecurrent
, das in anderen Makros verwendet wird, die sich auf Kopf- und Fußzeilen beziehen, z. B. \cfoot, \chead, \renewcommand{\headrule}
.... Seine Funktion besteht darin, zu bestimmen, ob die Aktion des Makros ( \cfoot,\chead,\renewcommand{\headrule}
usw.) nur auf der aktuellen Seite oder auch auf den übrigen Seiten erfolgt. Im folgenden Beispiel möchte ich, dass der Kopfzeileninhalt der zweiten Seite „aktuelle Seite“ ist, die dritte Seite hat eine Kopfzeile „andere Seiten“. Tatsächlich haben aber beide Seiten dieselbe Kopfzeile – „aktuelle Seite“. Ich vermute, dass dies durch „ \the\value{page}
“ verursacht wird. Aber ich möchte keinen zusätzlichen Code hinzufügen \pagecurrent
. Gibt es einen einfachen Ansatz, um dieses Problem zu lösen?
MWE:
\documentclass{article}
\usepackage{fancyhdr,geometry,etoolbox}
\geometry{showframe}
\begin{document}
\pagestyle{fancy}
\pagenumbering{Roman}
%
\newcommand{\pagecurrent}[3]{%
% #1-the current page number. If #1=0 then act on all pages from the current page, else only on the current page.
% #2-action on the current page
% #3-action on the following pages other than the current page
\ifboolexpr{
test {\ifnumequal{#1}{\value{page}}}
or
test {\ifnumequal{#1}{0}}
}
{#2} {#3}
}
% example:
first page\clearpage
\chead{\pagecurrent{\the\value{page}}{current page}{other pages}}
second page\clearpage third page
\end{document}
EDIT: Ich möchte den folgenden Code angeben, um meine Frage klarer und konzentrierter zu formulieren:
\documentclass{article}
\usepackage{fancyhdr,geometry,etoolbox}
\geometry{showframe}
\begin{document}
\pagenumbering{Roman}
\pagestyle{fancy}
\chead{...}\rhead{...}\cfoot{...}\renewcommand{headrule}{...}...% macros related to header/footer that defines the original header/footer content.
...some text
at a certain page: \chead{\pagecurrent{content of chead from only this page changed}}
% all other headers/footers of this page keep there original content. All headers/footers before/after this page keep there original content.
...some text
%\chead is used to illustrate my intention, maybe other macros like \rhead, \lfoot...in real article meet also the same problem.
\end{document}
Antwort1
Hier ist eine Möglichkeit, aber ich habe die Argumente Ihres Befehls geändert und atbgshi
stattdessen auch das Paket hinzugefügt etoolbox
:
\documentclass[twoside]{article}
\usepackage{fancyhdr,geometry}
\usepackage{atbegshi}
\geometry{showframe}
\usepackage{lipsum}
\newcommand{\pagecurrent}[4][\empty]{%
% #2 is the command to be executed with:
% optional argument #1 (if not empty=default)
% argument #3 for current page and
% argument #4 for the upcoming page.
\xdef\FArg{#1}%
\ifx\FArg\empty
#2{#3}%
\AtBeginShipout{#2{#4}}%
\else
#2[\FArg]{#3}%
\AtBeginShipout{#2[\FArg]{#4}}%
\fi
}
\begin{document}
\pagestyle{fancy}
% example:
\section{Test section 1}
\pagenumbering{Roman}
first page\clearpage
\subsection{Test subsection 1}
\pagecurrent{\chead}{current page}{other pages}
\pagecurrent{\cfoot}{Current Page: \arabic{page}}{Other pages: \arabic{page}}
\pagecurrent{\rhead}{Current Page:\rightmark}{\rightmark}
\pagecurrent[LE,RO]{\fancyfoot}{Current page: \thepage}{Other pages: \thepage}
second page\clearpage third page
\lipsum[1-20]
\section{Test section 2}
\lipsum[1-15]
\subsection{Test subsection 1}
\lipsum[1-20]
\end{document}
PS: Bearbeitet, um ein vollständiges Beispiel mit vielen akzeptierten Befehlen zu sein