用于任务环境在我的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
答案选项。
在下面的例子中,如果您单击练习编号,您将获得答案,反之亦然。
请注意,使用 Adobe 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}