使 hyperref、cleveref 和 answers 协同工作

使 hyperref、cleveref 和 answers 协同工作

我在编写的数学教科书中使用了以下软件包:

  • 答案包能够在书的最后给出问题的解决方案
  • hyperref 包能够将问题链接到解决方案以及反之亦然,并引用书中的不同部分,例如定理。
  • cleveref 包可以方便地引用文档的各个部分,特别是自动放入“引理”或“定理”部分。

有两个问题:

  1. 问题引用显示为例如“问题:1.14问题 1.13”,而我只想要第二部分。这可能与每当我使用 \cref 内部引用问题时出现的错误“\hyperlink 的参数有一个额外的 }”有关
  2. 从问题到解决方案的超链接没有涵盖问题环境的计数器。

以下是代码的相关部分。请帮我纠正问题。

\documentclass[openany, 12pt]{book}
\usepackage[utf8]{inputenc}

\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsbsy}

\usepackage{hyperref}
\usepackage[capitalize,nameinlink,noabbrev]{cleveref}

\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{corollary}[theorem]{Corollary}
\newtheorem{conjecture}[theorem]{Conjecture}
\newtheorem{example}[theorem]{Example}
\newtheorem{definition}[theorem]{Definition}

\usepackage{answers, xpatch}
\newtheorem{problem}[theorem]{%
\hyperlink{problem:\theproblem}{Problem}\hypertarget{probsol:\theproblem}{}}
\Newassociation{probsol}{Solution}{ans}
\renewenvironment{Solution}[1]
{\par\bigskip\noindent{\bfseries \hyperlink{probsol:#1}{Solution #1.}\hypertarget{problem:#1}{}}\quad}
{\par\bigskip}


\newcommand{\lemmaautorefname}{Lemma}
\newcommand{\corollaryautorefname}{Corollary}
\newcommand{\conjectureautorefname}{Conjecture}
\newcommand{\problemautorefname}{Problem}
\newcommand{\exampleautorefname}{Example}
\newcommand{\definitionautorefname}{Definition}

\begin{document}

\Opensolutionfile{ans}[ans1]

\chapter{First}

\begin{problem}\label{prb:example-prob}
This is a problem.
    \begin{probsol}
    This is a solution.
    \end{probsol}
\end{problem}

I am referring to \cref{prb:example-prob}.

\Closesolutionfile{ans}
\chapter*{Solutions}
\addcontentsline{toc}{chapter}{Solutions}
\input{ans1}

\end{document}

相关内容