我想知道是否/为什么有必要为\blank
练习提供额外的解决方案,因为问题已经包含了所有信息。
提出这个问题的一个原因是,将内容复制并粘贴到解决方案中是一项额外的工作,而这个额外的步骤可能会产生错误......另一个原因是,我希望有可能在两个不同的等级中使用该解决方案/练习。
一年级:只填缺失单词(用于答案表),现写为:
\begin{solution}
\blank{a}, \blank{b}
\end{solution}
输出:
解决方案 1
a,b
2 年级(也许是练习的变体而不是解决方案):整个文本填空,现在写成:
\begin{solution}
\blank{a} and \blank{b} are the first letters of the alphabet.
\end{solution}
输出:
解决方案 1
a 和 b 是字母表的首字母。
这样,我可以将整个文本(2 年级)中的填充空白用于培训师练习册,其中学生有空白,另外还可以使用浓缩解决方案(1 年级)作为练习册末尾所有练习的所有解决方案的组合答案表。
也许可以有一种\printcollection[print=exercise*]{foo}
打印练习的可能性,但是会以填充格式留下空白。
这里有 MWE,显示了可能的结果,只要训练器布尔值是假的,它就会编译。
\documentclass{article}
\usepackage{xsim}
\usepackage{etoolbox}
\newcounter{sections}
\newbool{trainer}
%\booltrue{trainer} % if trainer version, activate
\DeclareExerciseCollection{foo}
\DeclareExerciseCollection{ba}
\begin{document}
\section{A}
\collectexercises{foo}
\begin{exercise}
The \blank{a} is the first letter of the alphabet.
\end{exercise}
\begin{solution}
The \blank{a} is the first letter of the alphabet.
\end{solution}
\begin{exercise}
The \blank{b} is the second letter of the alphabet.
\end{exercise}
\begin{solution}
The \blank{b} is the second letter of the alphabet.
\end{solution}
\collectexercisesstop{foo}
\ifbool{trainer}
{\printcollection[print=solution]{foo}} %that is how it should look in the trainers workbook, but I don't want the whole text in the collection of all solutions
{\printcollection{foo}}
\section{B}
\collectexercises{ba}
\begin{exercise}
The \blank{z} is the last letter of the alphabet.
\end{exercise}
\begin{solution}
\blank{z}
\end{solution}
\collectexercisesstop{ba}
\ifbool{trainer}
{\printcollection[print=exercises*]{ba}} %that is what I would like for a kind of command that it prints the filled exercise like in section A if you put the whole text in the solution - perhaps it is rather a \printcollection*[print=exercises]
{\printcollection{ba}}
\section{Answersheet} % solution to number 3 shows how all solutions should look like in the answers-only-sheet
\setcounter{sections}{1}
\whileboolexpr
{ test {\ifnumless{\value{sections}}{\value{section}+1}} }
{
\printsolutions[section=\value{sections},headings-template=per-section]
\stepcounter{sections}
}
\end{document}
答案1
如果我正确理解了这个问题,那么以下应该是一种解决方法。下面的代码实现了一个blank/fill
选项(将添加到 的下一个版本中xsim
):
\documentclass{article}
\usepackage{xsim}
\ExplSyntaxOn
\bool_new:N \l__xsim_fill_blank_bool
\keys_define:nn {xsim/blank}
{
fill .bool_set:N = \l__xsim_fill_blank_bool ,
fill .initial:n = false
}
\cs_set_protected:Npn \xsim_blank:n #1
{
\box_clear:N \l__xsim_blank_box
\mode_if_math:TF
{ \hbox_set:Nn \l__xsim_blank_box { $ \m@th \mathpalette{}{#1} $ } }
{ \hbox_set:Nn \l__xsim_blank_box {#1} }
\bool_if:nTF
{ \xsim_if_inside_solution_p: || \l__xsim_fill_blank_bool }
{ \xsim_write_cloze_filled:n {#1} }
{
\bool_if:NTF \l__xsim_blank_width_bool
{ \__xsim_blank_skip:V \l__xsim_blank_dim }
{ \__xsim_blank_skip:n { \box_wd:N \l__xsim_blank_box } }
}
}
\ExplSyntaxOff
\begin{document}
\begin{exercise}
This is \blank{a} and \blank{b}.
\end{exercise}
\xsimsetup{blank/fill=true}
\printexercise{exercise}{1}
\end{document}
这也适用于收藏品。