我在编写的数学教科书中使用了以下软件包:
- 答案包能够在书的最后给出问题的解决方案
- hyperref 包能够将问题链接到解决方案以及反之亦然,并引用书中的不同部分,例如定理。
- cleveref 包可以方便地引用文档的各个部分,特别是自动放入“引理”或“定理”部分。
有两个问题:
- 问题引用显示为例如“问题:1.14问题 1.13”,而我只想要第二部分。这可能与每当我使用 \cref 内部引用问题时出现的错误“\hyperlink 的参数有一个额外的 }”有关
- 从问题到解决方案的超链接没有涵盖问题环境的计数器。
以下是代码的相关部分。请帮我纠正问题。
\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}