
前回の質問に回答がなかったため、MWE を実際の問題と思われるものに絞り込みました。\recent
情報 (-links に必要な情報hyperref
) を保存するマクロがあります。このマクロは、特定のコマンド ( ) が発行されると定期的に更新 (つまり上書き) されます\newone
。
このマクロの値 (つまり)を、参照目的で\recent
別のマクロ ( ) のページの最後または新しいページの先頭に保存したいと思います (すべてのページに -backlink を配置する必要があります)。いつもの容疑者 ( 、、;は気に入らないようです) をいじってみましたが、どういうわけか-macro がすぐに更新されたり、間違ったタイミングで更新されたりします。\previous
hyperref
everypage
evershi
atbegshi
bophook
hyperref
\previous
この問題の例として、この MWE を検討してください。通常のマクロを使用した「」が成功しなかったため、「」に切り替えましたnewtoks
がrenewcommand{\previous}{\recent}
、問題は解決しませんでした。
見出しに本当の「 」を入れるのが目的です\previous
。しかし、MWE が示すように、これは当てはまりません。おそらく、非常に簡単な解決策があり、それはおそらく出荷メカニズムと関係があるのでしょうが、私にはそれがわからないほど盲目 (かつ経験不足) です。
あらゆる助けに感謝します。
[前回の質問はこちら: 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}
編集: 混乱を招いて申し訳ありません。次の MWE が私の希望をよりよく表していることを願っています。私が懸念しているのはページ番号ではなく、リンク ラベルです。MWE の「質問 1 の回答」で概念を説明しようとしています。おそらく、全体的なアプローチが混乱していると思います。もっと良いアイデアをお持ちの方がいらっしゃいましたら、遠慮なくコメントしてください。
\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}
答え1
\global\previous={\the\recent}
意思ないの現在のコンテンツを配信します\recent
。
\global\previous=\expandafter{\the\recent}
\global\let
でも使った方が良いと思います。
\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}