添加 xsim 练习的完整解决方案

添加 xsim 练习的完整解决方案

我刚刚读过这个帖子链接在xsim_手册在第 71 页示例 35 中,我遇到了一些困难才能使其适应我的目标。

我想resolution为我的数据库的每个练习添加一个环境。这个环境将包含练习的完整解决方案。使用方程式、图片、tikz 方案……在链接的帖子中,目标是编写一个shortsolution环境并使用常规命令进行解析。但我更喜欢保留常规环境solution以获得简短的解决方案,因为它允许我在文档中定义一些选项,而且我会更频繁地使用这个环境。

不幸的是,当我在分辨率环境中添加一些长东西时,我遇到了一个问题。特别是,|围绕矢量的双垂直线(对于范数)会产生以下错误: ! File ended while scanning use of \__tl_rescan:NNw.

你能帮我解决这个问题吗?我的尝试是:

  • |在我的矢量周围使用双垂直线;
  • 让练习没有解决方案是没有问题的。我现在无法为我计算过的每个练习写出完整的计算机解决方案。
  • 保持常规solution环境不变。

下面的代码是MWE:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xsim}
\usepackage{environ}

%%Adapted from https://texwelt.de/fragen/23968/xsim-ubung-losung-zusatzlich-kurzlosung
\DeclareExerciseProperty{resolution}

% we'll use a description list for the resolutions:
\newcommand\printresolutions{%
    \begin{description}
        \ForEachUsedExerciseByType{%
            \def\ExerciseType{##1}%
            \def\ExerciseID{##2}%
            \GetExercisePropertyT{resolution}
            {%
                \item[Résolution ##3]
                ####1%
            }%
        }%
    \end{description}
}

\NewEnviron{resolution}{\SetExpandedExerciseProperty{resolution}{\expandonce{\BODY}}}


\begin{document}
    \section{My section}
    \begin{exercise}
        Foo exercise with no resolution
    \end{exercise}
    \begin{solution}
        Foo solution with no resolution.
    \end{solution}

    \begin{exercise}
        Bar exercise with a resolution
    \end{exercise}
    \begin{resolution}
        This is the resolution of my \textbf{bar} exercise.

        \begin{equation*}
            ||\vec{F}|| %%here is the trouble
        \end{equation*}
    \end{resolution}
    \begin{solution}
        This is a solution for bar
    \end{solution}

    \printsolutions

    \section{Resolutions}
    \printresolutions
\end{document}

答案1

正如您所发现的,||这会产生问题。原因是在其属性列表中xsim使用||作为分隔符。如果您打开文件,.xsim您将看到类似以下行

\XSIM{id}{exercise-1=={1}||exercise-2=={2}}

在您的情况下,这会产生问题,因为您的决议被用作此类列表中的条目:

\XSIM{resolution}{exercise-2=={This is the resolution of my \textbf {bar} exercise. \par \begin {equation*} ||\vec {F}|| \end {equation*}}}

(您可能会注意到,例如,这也会阻止在您的决议中使用逐字材料)。

有两种可能的解决方案:

  1. 使用不同的分隔符,一些在普通文本中不太可能使用的分隔符,也许是这样的:

    \xsimsetup{split-aux-lists = |&|}
    

    手册xsim确实记录了这一点,但已经过时了。它记录了一个|作为列表分隔符的单一字符(在早期版本中是这样的)。

  2. 我更倾向于采用不同的解决方案并完全避免该问题:使用\lVert\vec{F}\rVert。或者 – 更好的是 – 加载mathtools包并执行如下操作:

    \usepackage{mathtools}
    \DeclarePairedDelimiter\norm{\lVert}{\rVert}
    

    你可以使用更具语义的\norm{\vec{F}}

相关内容