是否需要为 xsim 中的 \blank 提供额外的解决方案?

是否需要为 xsim 中的 \blank 提供额外的解决方案?

我想知道是否/为什么有必要为\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}

在此处输入图片描述

这也适用于收藏品。

相关内容