获取 \TotalExerciseGoal 的值

获取 \TotalExerciseGoal 的值

我正在尝试使用 siunitx 的“\num”命令打印我的练习的总分,以便获得逗号分隔的格式。

我在尝试时收到无效令牌错误

 \num{\TotalExerciseGoal{points}{}{}} 

这可能是因为 xsim 命令已经打印了一个不适用于“\num”功能的字符串。

我认为以下 MWE 可以使事情更清楚:

\documentclass{report}
\usepackage{xsim}
\usepackage{siunitx}

\sisetup{locale=DE}

\begin{document}
    % Not working:
    % Total Points: \num{\TotalExerciseGoal{points}{}{}}

    % Should Do:
    Total Points: \num{8.5}

    \begin{exercise}[points=5]
        Test exercise 1
    \end{exercise}
    \begin{exercise}[points=3.5]
        Test exercise 2
    \end{exercise}

\end{document}

有任何想法吗?

答案1

\TotalExerciseGoal不可扩展,但是可以得以实现。

\documentclass{report}
\usepackage{xsim}
\usepackage{siunitx}

\ExplSyntaxOn
\cs_set:Npn \xsim_print_goal:nnn #1#2#3
  {
    \fp_to_decimal:n {#1}
    \fp_compare:nTF { (#1) = 1 } {#2} {#3}
  }
\cs_set:Npn \xsim_print_goal_sum:nnnn #1#2#3#4
  {
    \xsim_print_goal:nnn { \fp_use:c {g__xsim_total_#1_goal_#2_fp} } {#3} {#4}
  }
\cs_set:Npn \xsim_print_total_goal_sum:nnn #1#2#3
  {
    \xsim_print_goal:nnn { \fp_use:c {g__xsim_total_goal_#1_fp} } {#2} {#3}
  }

\RenewExpandableDocumentCommand \TotalExerciseGoal {mmm}
  { \xsim_print_total_goal_sum:nnn {#1} {#2} {#3} }
\ExplSyntaxOff

\sisetup{locale=DE}

\begin{document}

Total Points: \num{\TotalExerciseGoal{points}{}{}}

Total Points: \num{8.5}

\begin{exercise}[points=5]
  Test exercise 1
\end{exercise}

\begin{exercise}[points=3.5]
  Test exercise 2
\end{exercise}

\end{document}

我想你可以要求软件包作者做适当的修改。

在此处输入图片描述

答案2

你可以告诉xsim使用\num

\documentclass{report}
\usepackage{xsim}
\usepackage{siunitx}

\sisetup{locale=DE}
\xsimsetup{ goal-print = \num{#1} }

\RenewDocumentCommand\printpoints{}{%
  \TotalExerciseTypeGoal{exercise}{points}{}{}%
}

\begin{document}
    Total Points: \printpoints

    \begin{exercise}[points=5]
        Test exercise 1
    \end{exercise}
    \begin{exercise}[points=3.5]
        Test exercise 2
    \end{exercise}

\end{document}

在此处输入图片描述

这也能正确打印边距中的点……

相关内容