exsheets 与 siunitx

exsheets 与 siunitx

我想\vary使用exsheets以及\SI来自siunitx\SI宏解析第一个参数(它需要一个数字),但它可以用 禁用parse-numbers=false,但在这种情况下\SI不会格式化数字。(在我的示例中,2和之间没有出现小空格3。)

\documentclass[a4paper]{article}
\usepackage[per=frac,decimalsymbol=comma,expproduct=cdot]{siunitx}
\usepackage[load-headings,load-tasks,]{exsheets}
%
\begin{document}
\section{Exam-test}
\SetVariations{2}
\variant{1}
\begin{question}
    What is 
    % Does not work: $\SI{\vary{1000}{2000}}{m}$ 
    % Works:
    $\SI[parse-numbers=false]{\vary{12345}{23456}}{m}$  
    in centimeters?
    Check the small space between 2 and 3: $\SI{12345}{m}$
\end{question}
\end{document}

我怎样才能一起使用它们?

答案1

您可以定义一个接口来\vary{\SI{12345}{m}}{\SI{23456}{m}}

\documentclass[a4paper]{article}
\usepackage[per=frac,decimalsymbol=comma,expproduct=cdot]{siunitx}
\usepackage[load-headings,load-tasks,]{exsheets}

\ExplSyntaxOn
\NewDocumentCommand{\varySI}{mm}
 {% #1 are the values, #2 is the unit
  \uzsolt_vary_si:nn { #1 } { #2 }
 }

\tl_new:N \l_uzsolt_values_tl

\cs_new_protected:Npn \uzsolt_vary_si:nn #1 #2
 {
  \tl_clear:N \l_uzsolt_values_tl
  \tl_map_inline:nn { #1 }
   {
    \tl_put_right:Nn \l_uzsolt_values_tl { {\SI{##1}{#2}} }
   }
  \exp_last_unbraced:NV \exsheets_vary:w \l_uzsolt_values_tl
 }
\ExplSyntaxOff

\begin{document}
\section{Exam-test}
\SetVariations{2}
\variant{1}
\begin{question}
    What is 
    $\varySI{{12345}{23456}}{m}$  
    in centimeters?
\end{question}
\variant{2}
\begin{question}
    What is 
    $\varySI{{12345}{23456}}{m}$  
    in centimeters?
\end{question}
\end{document}

我在这里假设所有变体的单位都是相同的,但可以将单位合并到一些其他工作中。但是,在这种情况下,语法与键入

\vary{\SI{12345}{m}}{\SI{23456}{m}}

这也许是最简单的方法。

在此处输入图片描述

评论我发现的语法很糟糕\vary,其参数数量取决于变体的数量。

相关内容