我想使用练习包在答案和练习之间创建链接。我在章节开头重置了练习计数器。
但有时超链接无效(章节之间乱序)。例如,在下面的 MWE 中,第 1 章练习 1 后的 [Sol 1] 指向第 2 章练习 1 的解决方案。我该如何修复它?此外,如果没有答案,是否可以隐藏右边距中的 [sol ****]?(MWE 中的练习 1 和 2 为 [Sol 3])
\documentclass[11pt]{scrbook}
\usepackage{marginnote}
\usepackage{xcolor}
\usepackage[linkcolor=red,urlcolor=red]{hyperref}
\usepackage[answerdelayed,answerdelayed]{exercise}
\renewcounter{Exercise}[chapter]
\renewcommand{\theExercise}{\arabic{Exercise}}
%
\newenvironment{exo}[1][\unskip]{%
\begin{Exercise}[title={#1},label={\the\value{Exercise}}]
\normalmarginpar
\marginnote{\footnotesize\sffamily
[Sol~\refAnswer{\ExerciseLabel}]}
}{%
\end{Exercise}
}
%
\newenvironment{sol}{\begin{Answer}[ref=\ExerciseLabel]}
{\end{Answer}
}
\begin{document}
\chapter{ABCD}
\begin{exo}
ABCD
\end{exo}
\begin{sol}
ABD
\end{sol}
\section{Solutions}
\shipoutAnswer
\chapter{ABCD}
\begin{exo}
ABCD
\end{exo}
\begin{sol}
ABD
\end{sol}
\section{Solutions}
\shipoutAnswer
\end{document}
答案1
线路
\renewcounter{Exercise}[chapter]
每次章节计数器增加时重置练习的计数器。这样即使章节增加,练习的编号也始终为 1。但是这样做会导致练习的所有标签都相同。
要解决这个问题,你只需要改变
\begin{Exercise}[title={#1},label={\the\value{Exercise}}]
到
\begin{Exercise}[title={#1},label={\the\value{chapter}}]
从而获得正确的递增编号(包含章节)。
编辑
我上面的回复有点马虎,因为我真的只修复了你提到的非常具体的问题,但我没有考虑每章都有多个练习/答案的情况。我稍微修改了代码来解决这个问题,并增加了在页边空白处打印/不打印 Sol 的可能性。看看这是否有效:
\documentclass[11pt]{scrbook}
\usepackage{marginnote}
\usepackage{xcolor}
\usepackage[linkcolor=red,urlcolor=red]{hyperref}
\usepackage{ifthen}
\usepackage[answerdelayed]{exercise}
\renewcounter{Exercise}[chapter]
\renewcounter{Answer}[chapter]
\renewcommand{\theExercise}{\arabic{Exercise}}
\newcounter{myexerciselabel}
\newcounter{myexercisenumber}[chapter]
%
\newenvironment{exo}[2][\unskip]{\stepcounter{myexerciselabel}\stepcounter{myexercisenumber}
\begin{Exercise}[title={#1},label={\the\value{myexerciselabel}}, number={\the\value{myexercisenumber}}, counter={myexercisenumber}]
\normalmarginpar
\ifthenelse{\boolean{#2}}{\marginnote{\footnotesize\sffamily [Sol~\refAnswer{\ExerciseLabel}]}}{}
}{%
\end{Exercise}
}
%
\newenvironment{sol}{\begin{Answer}[ref=\ExerciseLabel]}
{\end{Answer}
}
\begin{document}
\chapter{ABCD}
\begin{exo}[Shows Sol]{true}
ABCD
\end{exo}
\begin{sol}
ABD
\end{sol}
\begin{exo}[No Sol]{false}
EFGH
\end{exo}
\begin{sol} % THIS WOULD NOT BE INCLUDED
EFG
\end{sol}
\begin{exo}[Shows Sol]{true}
HIJK
\end{exo}
\begin{sol}
HIJ
\end{sol}
\section{Solutions}
\shipoutAnswer
\chapter{ABCD}
\begin{exo}[No Sol]{false}
ABCD
\end{exo}
\begin{sol} % THIS WOULD NOT BE INCLUDED
ABD
\end{sol}
\begin{exo}[Shows Sol]{true}
EFGH
\end{exo}
\begin{sol}
EFG
\end{sol}
\section{Solutions}
\shipoutAnswer
\end{document}
你可以将其更改ifthenelse
为更高级的内容,例如软件包 xargs如果您想自定义参数,使用默认值等,有很多关于如何使用的例子。