Hyperref-Links, die auf dieselbe Stelle verweisen (unter Verwendung von thmtools- und Answers-Paketen)

Hyperref-Links, die auf dieselbe Stelle verweisen (unter Verwendung von thmtools- und Answers-Paketen)

Am Ende jeder Aufgabe möchte ich die Seitenzahl der Lösung dieser Aufgabe angeben.

Wenn ich so etwas mache,

\documentclass{article}

\usepackage{amsthm,thmtools}

\declaretheoremstyle[
notefont=\bfseries,
notebraces={}{}, 
headformat={\large\NUMBER.\NOTE},
headpunct={\vspace{\topsep}\newline},
spacebelow=40pt,
prefoothook={\hfill Solução: pág. \pageref{solucao:\Currentlabel}}
]{problemastyle}

\declaretheorem[style=problemastyle]{problema}

\usepackage{answers}

\Newassociation{solucao}{Sol}{solucoes}
\renewenvironment{Sol}[1]{\begin{trivlist}
 \item[\hskip\labelsep\textbf{#1.}] \label{solucao:#1} \ignorespaces}%
 {\end{trivlist}}

\usepackage{hyperref}

\usepackage{lipsum}

\begin{document}
\Opensolutionfile{solucoes}

\begin{problema}[Primeiro problema]
 Problema 1.
 \begin{solucao}
   \lipsum
 \end{solucao}
\end{problema}

\begin{problema}[Segundo problema]
 Problema 2.
 \begin{solucao}
   \lipsum[1]
 \end{solucao}
\end{problema}

\begin{problema}[Terceiro problema]
 Problema 3.
 \begin{solucao}
   \lipsum[1]
 \end{solucao}
\end{problema}


\Closesolutionfile{solucoes}

\include{solucoes}

\end{document}

Ich bekomme, was ich will, aber die Links auf den Seitenzahlen zeigen alle auf die gleiche Stelle.

Wie kann ich das korrigieren?

Antwort1

Man braucht die UmgebungSolum nicht nur ein Querverweislabel zu erzeugen, sondern auch ein benanntes Ziel/Ziel/Anker für die Verknüpfung zu erstellen, dessen Name zur neuen Definition des Makros gemacht wird \@currentHrefund somit vom Befehl \labelbeim Erstellen des Querverweislabels verwendet wird. Sie können verwenden \phantomsection, aber Sie können auch Ihr eigenes Ding implementieren, das das Argument des verwendetSol-Umgebung als Name für das benannte Ziel/Ziel/Anker verwendet werden. In diesem Fall ist das Argument derSol-Umgebung darf nur aus Dingen bestehen, die PDF-Viewer als Komponenten von Namen von Zielen/Zielen/Ankern verarbeiten können, und da keine zwei Ziele/Ziele/Anker den gleichen Namen haben dürfen, dürfen in diesem Fall keine zweiSol-Umgebung kann Argumente haben, die sich auf dieselben Dinge erstrecken.

\documentclass{article}

\usepackage{amsthm,thmtools}

\declaretheoremstyle[
notefont=\bfseries,
notebraces={}{}, 
headformat={\large\NUMBER.\NOTE},
headpunct={\vspace{\topsep}\newline},
spacebelow=40pt,
prefoothook={\hfill Solução: pág. \pageref{solucao:\Currentlabel}}
]{problemastyle}

\declaretheorem[style=problemastyle]{problema}

\usepackage{answers}

\Newassociation{solucao}{Sol}{solucoes}

\renewenvironment{Sol}[1]{\begin{trivlist}%
 \item[\hskip\labelsep\SolutionAnchor{#1}\textbf{#1.}]\ignorespaces}%
 {\end{trivlist}}%

\makeatletter
\DeclareRobustCommand\SolutionAnchor[1]{%
  \begingroup
  \Hy@localanchornametrue
  \Hy@MakeCurrentHref{solution.#1}%
  \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
  \label{solucao:#1}%
  \endgroup
}%
%
% Alternatively, using \phantomsection:
% 
% \DeclareRobustCommand\Hy@SolutionAnchor[1]{%
%   \begingroup
%   \Hy@localanchornametrue
%   \phantomsection
%   \label{solucao:#1}%
%   \endgroup
% }%
%
% Or, with a very recent TeX installation, use \MakeLinkTarget*
%
%\DeclareRobustCommand\SolutionAnchor[1]{%
%  \MakeLinkTarget*{solution.#1}%
%  \label{solucao:#1}%
%}%

\makeatother


\usepackage{hyperref}

\usepackage{lipsum}

\begin{document}
\Opensolutionfile{solucoes}

\begin{problema}[Primeiro problema]
 Problema 1.
 \begin{solucao}
   \lipsum
 \end{solucao}
\end{problema}

\begin{problema}[Segundo problema]
 Problema 2.
 \begin{solucao}
   \lipsum[1]
 \end{solucao}
\end{problema}

\begin{problema}[Terceiro problema]
 Problema 3.
 \begin{solucao}
   \lipsum[1]
 \end{solucao}
\end{problema}


\Closesolutionfile{solucoes}

\include{solucoes}

\end{document}

verwandte Informationen