我正在尝试使用 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}
这也能正确打印边距中的点……