任务环境和答案包发生冲突

任务环境和答案包发生冲突

用于任务环境在我的moquestion 环境(如下所示)更改解决方案的项目标签(1.、2.、3. 等)。在mymosolution 环境,项目标签被替换为(四)(从任务环境恢复)而不是1.请为我提供一种方法来正确标记解决方案的项目标签 1.2.3.等,提供超链接每个问题和相应答案之间的(一一链接)被保留。

\documentclass{article}
\usepackage[paperwidth=6in, paperheight=9in]{geometry}
\usepackage{answers}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage{tasks}
\settasks{item-indent=8.75mm, column-sep=3mm, after-skip=1mm, label-format=\bfseries, counter-format=(tsk[A]), label-offset=1em, label-width=1.25em}

\hypersetup{colorlinks=true,
linkcolor=blue}

\Opensolutionfile{mymosolutions}
\Newassociation{mymosolution}{mymoSoln}{mymosolutions}
\newcounter{moquestion}
\newenvironment{moquestion}{%
\refstepcounter{moquestion}%
     \hypertarget{moquestion:{\themoquestion}}{}%
     \Writetofile{mymosolutions}{\protect\hypertarget{msoln:\themoquestion}{}}%
     \begin{enumerate}[leftmargin=*,label=\bfseries\protect\hyperlink{msoln:\themoquestion}{\themoquestion.},ref=\themoquestion]
     \item%
    }%
    {%
    \end{enumerate}}

\begin{document}

\section*{Questions}
\begin{moquestion}
a
\begin{tasks}[](4)
\task f.
\task g.
\task h.
\task i.
\end{tasks}
\begin{mymosolution}
b\end{mymosolution}
\end{moquestion}

\begin{moquestion}
c
\begin{mymosolution}
d
\end{mymosolution}
\end{moquestion}


\Closesolutionfile{mymosolutions}
\renewenvironment{mymoSoln}[1]{%
     \begin{enumerate}    [leftmargin=*,label=\bfseries\protect\hyperlink{moquestion:#1}{#1.}]
     \item%
}%
{%
    \end{enumerate}}

\clearpage
\section*{Answers!}
\IfFileExists{mymosolutions.tex}{\input{mymosolutions.tex}}{}
\end{document} 

输出如下所示。

在此处输入图片描述

在此处输入图片描述

答案1

我通过您的 MWE 找到了解决方案(我正在写一个新答案,因为它与之前的答案不同,可能对其他人有用)。

我不明白为什么task环境会弄乱引用,即使计数器moquestion是正确的(您可以使用在答案之前/之后显示它\themoquestion),但由于您在最后打印答案,所以您可以将\ begin{mymosolution} ... \end{mymosolution}环境移动到答案之前task,并且它可以正常工作,并使用正确的缩进。

\documentclass{article}
\usepackage[paperwidth=6in, paperheight=9in]{geometry}
\usepackage{answers}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage{tasks}
\settasks{item-indent=8.75mm, column-sep=3mm, after-skip=1mm, label-format=\bfseries, counter-format=(tsk[A]), label-offset=1em, label-width=1.25em}

\hypersetup{colorlinks=true,
    linkcolor=blue}

\Opensolutionfile{mymosolutions}
\Newassociation{mymosolution}{mymoSoln}{mymosolutions}
\newcounter{moquestion}
\newenvironment{moquestion}{%
    \refstepcounter{moquestion}%
    \hypertarget{moquestion:{\themoquestion}}{}%
    \Writetofile{mymosolutions}{\protect\hypertarget{msoln:\themoquestion}{}}%
    \begin{enumerate}[leftmargin=*,label=\bfseries\protect\hyperlink{msoln:\themoquestion}{\themoquestion.},ref=\themoquestion]
        \item%
    }%
    {%
\end{enumerate}}

\usepackage{mwe}% for testing purpose only

\begin{document}

    \section*{Questions}
    \begin{moquestion}
        a \blindtext
        \begin{mymosolution}
        b \blindtext
        \end{mymosolution}
        \begin{tasks}[](4)
            \task f.
            \task g.
            \task h.
            \task i.
        \end{tasks}
    \end{moquestion}

    \begin{moquestion}
        c \blindtext
        \begin{mymosolution}
            d \blindtext
        \end{mymosolution}
    \end{moquestion}

    \Closesolutionfile{mymosolutions}
    \renewenvironment{mymoSoln}[1]{%
        \begin{enumerate}    [leftmargin=*,label=\bfseries\protect\hyperlink{moquestion:#1}{#1.}]
            \item%
        }%
        {%
    \end{enumerate}}

    \clearpage
    \section*{Answers!}
    \IfFileExists{mymosolutions.tex}{\input{mymosolutions.tex}}{}
\end{document} 

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

答案2

也许带有包的解决方案exercise是可以接受的,即使当问题文本长于一行时我无法获得您的缩进。

但是,获取一对一链接非常简单,使用label={\the\value{Exercise}}作为练习选项和ref=\ExerciseLabel答案选项。

在下面的例子中,如果您单击练习编号,您将获得答案,反之亦然。

请注意,使用 Adob​​e Acrobat Reader DC(我不知道其他阅读器是否也是如此)时,您必须放大文档才能看到链接正常工作(至少放大 60%,因为示例中的练习只有很少的文本行)。

\documentclass{article}
\usepackage[paperwidth=6in, paperheight=9in]{geometry}
\usepackage{calc}
\usepackage{tasks}
\newlength{\mylen}
\setlength{\mylen}{\widthof{9.~}}% if the exercises are more than 9, set 99. If more than 99, set 999, and so on.
\settasks{item-indent=\mylen, column-sep=3mm, after-skip=-1ex,
    label-format=\bfseries, counter-format=(tsk[A]), label-offset=1em, label-width=2.5em}
\usepackage{hyperref}% you must load it before the exercise package
\hypersetup{colorlinks=true,
    linkcolor=blue}
\usepackage[answerdelayed]{exercise}
\renewcommand{\ExerciseListHeader}{\textbf{\color{blue}\refAnswer{\ExerciseLabel}.}~}
\renewcommand{\AnswerListHeader}{\textbf{\color{blue}\ExerciseHeaderNB.}~}
\newcommand{\myexer}{\Exercise[label={\the\value{Exercise}}]\setlength{\parskip}{1em}}
\newcommand{\myansw}{\Answer[ref=\ExerciseLabel]}

\begin{document}
    \section*{Questions}
    \begin{ExerciseList}
        \myexer a
        \begin{tasks}[](4)
            \task f.
            \task g.
            \task h.
            \task i.
        \end{tasks}
        \myansw b 
        \myexer c 
        \myansw d 
        \myexer Another exercise 
        \myansw Another answer
        \myexer Another exercise again
        \myansw Another answer again
    \end{ExerciseList}  

    \clearpage
    \section*{Answers!}\vspace{-1em}
    \shipoutAnswer
\end{document} 

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

相关内容