我想\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
,其参数数量取决于变体的数量。