如何使定理/问题名称中的解决方案超链接覆盖计数器

如何使定理/问题名称中的解决方案超链接覆盖计数器

在 Ulrike Fischer 帮助我之后此主题,我在整理我编写的一些教科书的格式时,只剩下一个麻烦的方面。我本想忽略它,但这是唯一剩下的问题,我希望有人能帮助我解决这个问题。

概述是我正在使用该answers包,并且我希望通过单击每个环境的显示名称和计数器将问题超链接到其解决方案,反之亦然。 剩下的问题是当前代码确实在指向解决方案的超链接中排除了定理/问题的计数器。 如何做到这一点(同时不破坏 cleveref 的使用)?

以下是两个独立页面的屏幕截图(一个是章节页面,另一个是解决方案页面):

在此处输入图片描述 在此处输入图片描述

在另一个帖子中,Willie Wong 说

我认为使用 amsthm 很难做到这一点。您可以定义一个单独的问题环境,而不是使用 amsthm

但我不知道该怎么做。使用 amsthm 不是唯一的方法吗?无论如何,我都希望找到解决方案。这是我目前拥有的最低限度的工作示例:

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

\makeatletter

\newcommand{\linkdest}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}

\usepackage{answers, xpatch}

\newtheorem{problem}[theorem]{%
\hyperlink{problem:\theproblem}{Problem}\Hy@raisedlink{\hypertarget{probsol:\theproblem}{}}}
\Newassociation{probsol}{Solution}{ans}
\renewenvironment{Solution}[1]
{\par\bigskip\noindent{\bfseries \hyperlink{probsol:#1}{Solution #1.}\Hy@raisedlink{\hypertarget{problem:#1}{}}}\quad}
{\par\bigskip}

\makeatother

\newcommand{\lemmaautorefname}{Lemma}
\newcommand{\corollaryautorefname}{Corollary}
\newcommand{\conjectureautorefname}{Conjecture}
\crefname{problem}{Problem}{Problems} \Crefname{problem}{Problem}{Problems}
\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}

答案1

我设法拼凑出一个解决方案,其中问题和解决方案在包中相互超链接answers,而不会破坏其他任何东西cleveref。基于此主题此主题。任何反馈都会受到欢迎。如果我没有看到更好的解决方案,我会接受我的。

在此处输入图片描述 在此处输入图片描述

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

\makeatletter

%\newcommand{\linkdest}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}

\usepackage{answers, xpatch}

\newtheoremstyle{hypered}%
{}{}%
{}{}%
{\bfseries}{}%
{ }%
{\Hy@raisedlink{\hypertarget{probsol:\theproblem}{}}\hyperlink{\theproblem}{\thmname{#1}\thmnumber{ #2}.}\thmnote{\normalfont (#3).}}

\theoremstyle{hypered}
\newtheorem{problem}[theorem]{Problem}
\Newassociation{probsol}{Solution}{ans}
\newcommand{\adj}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
\renewenvironment{Solution}[1]
{\par\bigskip\parindent0pt{\phantomsection{\bfseries\Hy@raisedlink{\hypertarget{problem:#1}{}} \hyperlink{probsol:#1}{\adj{#1}Solution #1.}}}}
{\par\bigskip}

\makeatother

\newcommand{\lemmaautorefname}{Lemma}
\newcommand{\corollaryautorefname}{Corollary}
\newcommand{\conjectureautorefname}{Conjecture}
\crefname{problem}{Problem}{Problems} \Crefname{problem}{Problem}{Problems}
\newcommand{\exampleautorefname}{Example}
\newcommand{\definitionautorefname}{Definition}

\begin{document}

\Opensolutionfile{ans}[ans1]

\chapter{First}

\begin{problem}[Gauss's theorem]\label{prb:example-prob}
This is a problem.
    \begin{probsol}
    I am referring to \cref{prb:example-prob-2}.
    \end{probsol}
\end{problem}

\begin{problem}\label{prb:example-prob-2}
This is a problem.
    \begin{probsol}
    I am referring to \cref{prb:example-prob}. This is a solution. This is a solution. This is a solution. This is a solution. This is a solution. This is a solution. This is a solution. This is a solution. This is a solution.
    \end{probsol}
\end{problem}

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

\end{document}

相关内容