
Nachdem meine vorherige Frage nicht beantwortet wurde, habe ich das MWE auf das reduziert, was meiner Meinung nach das eigentliche Problem ist. Ich habe ein Makro, \recent
das Informationen speichert (die für -Links benötigt werden hyperref
). Dieses Makro wird regelmäßig aktualisiert (d. h. überschrieben), wenn ein bestimmter Befehl ( \newone
) ausgegeben wird.
Ich möchte den Wert dieses Makros (also \recent
) am Ende einer Seite oder am Anfang einer neuen Seite in einem anderen Makro ( \previous
) zu Referenzzwecken speichern (ich brauche es, um hyperref
auf jeder Seite einen -Backlink zu setzen). Ich habe mit den üblichen Verdächtigen herumgespielt ( everypage
, evershi
, atbegshi
; bophook
scheint nicht zu mögen hyperref
), aber irgendwie \previous
wird das -Makro zu früh oder zum falschen Zeitpunkt aktualisiert.
Bitte betrachten Sie dieses MWE zur Veranschaulichung des Problems. Ich habe bei normalen Makros newtoks
nach " " auf " renewcommand{\previous}{\recent}
" umgestellt, was nicht funktioniert hat, aber das hat nicht geholfen.
Die Idee ist, das wahre " " in der Überschrift zu haben \previous
. Wie das MWE jedoch zeigt, ist dies nicht der Fall. Wahrscheinlich gibt es eine extrem einfache Lösung dafür, und diese hat wahrscheinlich mit Versandmechanismen zu tun, aber ich bin einfach zu blind (und unerfahren), um sie zu erkennen.
Jede Hilfe ist willkommen.
[vorherige Frage hier: https://tex.stackexchange.com/questions/539473/control-the-referencing-of-labels-in-headlines-hyperref-komascript-or-how-a ]
\documentclass[%
12pt,%
twoside=false,%
cleardoublepage=empty,%
open=right,%
parskip=half*,%
headings=normal,%
numbers=noenddot,%
chapterprefix=true,%
%draft %
]{scrbook}
\usepackage[headsepline]{scrlayer-scrpage} \pagestyle{scrheadings}
\clearscrheadfoot
\newcommand{\JumpBackHeadline}{\pagemark -- \the\previous}
\ohead{\JumpBackHeadline}
\usepackage{everypage}
\usepackage{blindtext}
\newtoks{\recent}
\newtoks{\previous}
\global\recent={dummyrecent}
\global\previous={dummyprevious}
\AddEverypageHook{%
previous before EverypageHookoperation: \the\previous\\%
\global\previous={\the\recent}%
previous after EverypageHookoperation: \the\previous
}
\newcommand{\newone}[1]{%
my argument is: #1\\
previous is: \the\previous\\
recent was: \the\recent\\
\global\recent={#1}
recent is: \the\recent
}
\begin{document}
Starting:\\
previous is: \the\previous\\
recent is: \the\recent
\newone{number1}
\blindtext[5]
\newone{number2}
And now lots of text:\\
\blindtext[10]
\newone{number3}
\end{document}
Edit: Tut mir leid, dass ich für Verwirrung gesorgt habe. Hoffentlich zeigt das folgende MWE besser, was ich will. Mir geht es nicht um Seitenzahlen, sondern um Link-Beschriftungen. Ich versuche, das Konzept in der „Antwort auf Frage 1“ im MWE zu erklären. Wahrscheinlich ist der ganze Ansatz ein Durcheinander; wenn jemand eine bessere Idee hat, zögern Sie bitte nicht, einen Kommentar abzugeben.
\documentclass[
12pt,
twoside=false,
cleardoublepage=empty,
open=right,
parskip=half*,
headings=normal,
numbers=noenddot,
chapterprefix=true,
%draft,
]{scrartcl}
\usepackage{everypage}
\usepackage{blindtext}
\usepackage{marginnote}
\usepackage{ifthen,ragged2e}
\usepackage{hyperref}
%%% The Headline %%%%
\usepackage[headsepline]{scrlayer-scrpage} \pagestyle{scrheadings}
\clearscrheadfoot
\newcommand{\JumpBackHeadline}{% define the headline, depening on JumpBackOn
\ifthenelse{\boolean{JumpBackOn}}%
{\pagemark -- Quick link to
\hyperref[\previous]{\previous}}% Hyperlink only, if jumpback is on
{\pagemark}% %otherwise, i.e. in the questions section, just the
% pagemark
}
\ohead{\JumpBackHeadline}
%% The jump commands to set the hyperlinks
\newboolean{JumpBackOn} % Switch on for jumpback hyperlinks
\setboolean{JumpBackOn}{false} % but not in the first (questions) section
\newcommand{\jumpdown}[1]{\marginnote{\RaggedRight\tiny{\hyperref[#1]{Down
to
#1}}}} % Hyperlink to jump from the question in the questions
% section to the label at the start of the answer in
% the answer section; #1 is this label
\newcommand{\jumpback}[1]{% Jump from the answer to the label at the start of the corresponding question in the questions section; #1 is this label.
\gdef\recent{#1}% Remember this label, it is the label to the question that is currently being discussed.
\marginnote{\RaggedRight\tiny{\hyperref[#1]{Up to
#1}}} % place the hyperlink in the margin
}
%%%% When a page is finished and shipped out: remember the label in
%%%% \recent *at this time* by storing it in \previous
\AddEverypageHook{%
% globally make \previous the same as the current \recent
\global\let\previous=\recent
}
\begin{document}
\section{Questions for students (sometimes very
long)}\setboolean{JumpBackOn}{false}
\begin{enumerate}
\item[1.] Question 1 \label{q:1}\jumpdown{a:1}
\blindtext
\item[2.] Question 2 \label{q:2}\jumpdown{a:2}
\blindtext
\item[3.] Question 3 \label{q:3}\jumpdown{a:3}
\blindtext
\item[4.] Question 4 \label{q:4}\jumpdown{a:4}
\blindtext
\end{enumerate}
\clearpage
\section{Answers, sometimes very
long}\setboolean{JumpBackOn}{true} % From now on, jumpback link in headline
\subsection{Answer to question 1}\label{a:1}\jumpback{q:1}
This is the answer text to question 1. In the margin, a label links
back to question 1; this link is correct. However, as this answer text
extends over a few pages, students should have a quick link in the
headline of each page to jump back to question 1 until answer 1 is
finished. The link should be at the same position in the top or maybe
bottom region of every page; it does not have to be the header, if
this causes trouble.
The link in the headline (or somewhere else) should point to the label
of the question that is (still) discussed \emph{at the beginning of
each page}. In our case, that is question 1 for page 3, 4 and 5.
However, on page 5 there is a link to question 2, not 1. Similarly, on
page 6 there is a link to question 3, not 2, although this question
starts at the top of the next page.
Again, at page 7, the link points to question 4, even though this
question starts at the top of the next page. The link on page 8 is
also wrong, although it appears right: If the previous-linklabel is
fixed at the end of page 7 and this label would then (correctly) point
to question 3, it should point to question 3 at the top of page 8 as
well, although this is not what I want: It is a design failure on my
part, but I have no better idea at the moment. If anyone knows how to
approach the whole thing in a better way, I would be grateful.
\blindtext[9]
\subsection{Answer to question 2}\label{a:2}\jumpback{q:2}
\blindtext[7]
\subsection{Answer to question 3}\label{a:3}\jumpback{q:3}
\blindtext[4]
Some space to fill the page:
\vfill
\subsection{Answer to question 4}\label{a:4}\jumpback{q:4}
\blindtext
\end{document}
Antwort1
\global\previous={\the\recent}
Willenichtliefern den aktuellen Inhalt von \recent
. Sie sollten
\global\previous=\expandafter{\the\recent}
Ich denke aber, dass die Verwendung \global\let
besser ist.
\documentclass[
12pt,
twoside=false,
cleardoublepage=empty,
open=right,
parskip=half*,
headings=normal,
numbers=noenddot,
chapterprefix=true,
%draft,
]{scrbook}
\usepackage[headsepline]{scrlayer-scrpage} \pagestyle{scrheadings}
\clearscrheadfoot
\newcommand{\JumpBackHeadline}{\pagemark -- \previous}
\ohead{\JumpBackHeadline}
\usepackage{everypage}
\usepackage{blindtext}
\def\recent{dummyrecent}
\def\previous{dummyprevious}
\AddEverypageHook{%
previous before EverypageHookoperation: \previous\\%
% globally make \previous the same as the current \recent
\global\let\previous=\recent
previous after EverypageHookoperation: \previous
}
\newcommand{\newone}[1]{%
my argument is: #1\\
previous is: \previous\\
recent was: \recent\\
\gdef\recent{#1}%
recent is: \recent
}
\begin{document}
Starting:\\
previous is: \previous\\
recent is: \recent
\newone{number1}
\blindtext[5]
\newone{number2}
And now lots of text:
\blindtext[10]
\newone{number3}
\end{document}