练习包:练习和答案之间的链接。章节问题

练习包:练习和答案之间的链接。章节问题

我想使用练习包在答案和练习之间创建链接。我在章节开头重置了练习计数器。

但有时超链接无效(章节之间乱序)。例如,在下面的 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如果您想自定义参数,使用默认值等,有很多关于如何使用的例子。

相关内容