在每个问题的末尾,我都希望能标明该问题解决方案的页码。
如果我这样做,
\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}
我得到了我想要的,但是页码上的链接都指向同一个地方。
我该如何纠正这个问题?
答案1
你需要有环境索尔不仅生成交叉引用标签,还创建命名的目的地/目标/锚点以进行链接,其名称将成为宏的新定义,因此在创建交叉引用标签时\@currentHref
由命令使用。您可以使用,但您也可以实现自己的功能,使用\label
\phantomsection
索尔-environment 作为命名目的地/目标/锚点的名称。在这种情况下,索尔-环境可能只包含 pdf 查看器可以处理为目的地/目标/锚点名称的组成部分的内容,并且没有两个目的地/目标/锚点可能具有相同的名称,在这种情况下,没有两个索尔-environment 可能有扩展到相同事物的参数。
\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}