Links Hyperref apontando para o mesmo local (usando pacotes thmtools e respostas)

Links Hyperref apontando para o mesmo local (usando pacotes thmtools e respostas)

No final de cada problema, gostaria de ter a indicação do número da página da solução desse problema.

Se eu fizer algo assim,

\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}

Consigo o que quero, mas os links nos números das páginas apontam todos para o mesmo lugar.

Como posso corrigir isso?

Responder1

Você precisa ter o ambienteSolpara não apenas produzir um rótulo de referência cruzada, mas também para criar um destino/destino/âncora nomeado para vinculação cujo nome é transformado na nova definição da macro \@currentHrefe, portanto, é usado pelo comando \labelao criar o rótulo de referência cruzada. Você pode usar \phantomsection, mas também pode implementar sua própria coisa que usa o argumento doSol-environment como o nome do destino/destino/âncora nomeado também. Neste caso o argumento doSol-o ambiente pode consistir apenas em coisas que os visualizadores de PDF podem processar como componentes de nomes de destinos/alvos/âncoras, e como dois destinos/alvos/âncoras não podem ter o mesmo nome, neste caso não há doisSol-ambiente pode ter argumentos que se expandem para as mesmas coisas.

\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}

informação relacionada