当并非所有练习都有解决方案时,创建从练习到解决方案的超链接

当并非所有练习都有解决方案时,创建从练习到解决方案的超链接

我是 LaTeX 新手,正在完成别人的工作。我在 Windows 10 上使用 MiKTeX 2.9。

我正在尝试创建可点击的超链接,从文内练习到附录中的解决方案。我希望不必定义解决方案环境或使用包answers,因为只有随机选择的练习有解决方案,并且我希望练习和解决方案编号匹配。目前我用它hyperref来引用他们的解决方案中的练习,但我不知道如何标记解决方案并在练习中引用它们,而不会弄乱编号。

以下是我正在处理的内容:

\documentclass{article}

\usepackage[colorlinks, backref]{hyperref}

\newtheorem{exercise}{Exercise}

\begin{document}

\begin{exercise}\label{ex:one}
exercise text
\end{exercise}

\begin{exercise}
exercise without solution
\end{exercise}

\begin{exercise}\label{ex:three}
exercise text
\end{exercise}

{Exercise}~\ref{ex:one}
solution text

{Exercise}~\ref{ex:three}
solution text

\end{document}

如有任何建议我将非常感激。

答案1

\hyperlink\hypertaget。在很多方面,它们都优于\label\ref。此外,使用包含计数器值的标签会让计数器的整体使用变得毫无意义。

我深入研究了source2e(可从 ctan 获得)以使用与 相同的格式\newtheorem

\documentclass{article}
\usepackage[colorlinks, backref]{hyperref}

\newcounter{exercise}

\newenvironment{exercise}[1][\empty]{% #1 = answer target (optional)
  \refstepcounter{exercise}%
  \trivlist
  \ifx\empty#1\relax
    \item[\hskip \labelsep{\bfseries Exercise \theexercise}]\itshape
  \else
    \item[\hskip \labelsep{\bfseries Exercise \hyperlink{#1}{\theexercise}}]\itshape
  \fi}{\endtrivlist}

\begin{document}
 \begin{exercise}[ans:one]\label{ex:one}
    exercise text
  \end{exercise}

  \begin{exercise}
    exercise without solution
  \end{exercise}

  \begin{exercise}[ans:three]\label{ex:three}
    exercise text
  \end{exercise}

  \hypertarget{ans:one}{Exercise}~\ref{ex:one}
    solution text

  \hypertarget{ans:three}{Exercise}~\ref{ex:three}
    solution text

\end{document}

答案2

我认为你的前提是错误的:

我不想定义解决方案环境或使用answers包,因为只有随机选择的练习才有解决方案,并且我希望练习和解决方案编号能够匹配。

他们使用以下包自动进行数学运算answers

\documentclass{article}
\usepackage{answers}

\Newassociation{solution}{Solution}{answers}
\newtheorem{exercise}{Exercise}

\begin{document}

\Opensolutionfile{answers}
\section{Problems}
\begin{exercise}
  First exercise
  \begin{solution}
     First solution.
 \end{solution}
\end{exercise}
\begin{exercise}
  Second exercise
\end{exercise}
\begin{exercise}
  Third exercise
  \begin{solution}
    Third solution.
  \end{solution}
\end{exercise}
\Closesolutionfile{answers}

\section{Solutions}
\input{answers}

\end{document}

在此处输入图片描述

添加超链接也不是那么难。为了避免出现有关不存在超目标的警告,我们可以使用@Werner 的解决方案

\documentclass{article}
\usepackage{answers}
\usepackage{hyperref}

\Newassociation{solution}{Solution}{answers}
\newtheorem{exercise}{\hyperlink{ex:\theexercise}{Exercise}\hypertarget{sol:\theexercise}{}}
\renewcommand{\solutionstyle}[1]{\textbf{\hyperlink{sol:#1}{Exercise} \hypertarget{ex:#1}{#1}}}

\let\oldhypertarget\hypertarget
\let\oldhyperlink\hyperlink
\renewcommand{\hypertarget}[2]{%
  \label{ht@#1}\oldhypertarget{#1}{#2}%
}
\renewcommand{\hyperlink}[2]{%
  \ifcsname r@ht@#1\endcsname\oldhyperlink{#1}{#2}\else#2\fi
}

\begin{document}

\Opensolutionfile{answers}
\section{Problems}
\begin{exercise}
  First exercise
  \begin{solution}
     First solution.
 \end{solution}
\end{exercise}
\begin{exercise}
  Second exercise
\end{exercise}
\begin{exercise}
  Third exercise
  \begin{solution}
    Third solution.
  \end{solution}
\end{exercise}
\Closesolutionfile{answers}

\section{Solutions}
\input{answers}

\end{document}

在此处输入图片描述

相关内容