我正在写考试题目。其中一些题目应该在方格纸上作答,所以我写了一个宏,以便 (a) 节省时间,避免多次重复输入相同的说明,以及 (b) 确保使用一致的措辞给出说明。几个月前更新我的 LaTeX 安装后,我发现这个宏不再按预期运行。有人能帮忙吗?我怀疑这siunitx
可能是(至少部分)原因,但我真的不知道从哪里开始。
ETA:预期输出为Answer parts (i), (ii) and (iii) of this question on the graph paper provided.
平均能量损失
\documentclass[a4paper,twoside,addpoints,12pt]{exam}
\usepackage{etextools}
\usepackage{xstring}
\usepackage{siunitx}
\newcommand{\usegraphpaper}[1]{
\textbf{Answer part\IfSubStr{#1}{;}{s}{} (\expandnext{\numlist[list-separator = {), (},list-final-separator = {) and (},list-pair-separator = {) and (},parse-numbers = false]}{\text{#1}}) of this question on the graph paper provided.} % Erroneous output
\expandnext{\numlist[parse-numbers = false]}{#1} % Included to show what should appear between the parentheses
}
\begin{document}
\usegraphpaper{i;ii;iii}
\usegraphpaper{1;2;3}
\end{document}
答案1
\expandnext
对 不会产生任何作用\numlist
,因为扩展后 不起作用。
我尝试了 TeX Live 上从 2012 年到现在的代码,但从未得到想要的输出。
这是可用版本。请记住,它对etextools
其他软件包和 LaTeX 内核一直不太友好,因此不鼓励使用它。
\documentclass[a4paper,twoside,addpoints,12pt]{exam}
\usepackage{siunitx}
\ExplSyntaxOn
\NewDocumentCommand{\usegraphpaper}{m}
{
\justint_graphpaper_prologue:n { #1 }
}
\seq_new:N \l__justint_graphpaper_items_seq
\seq_new:N \l__justint_graphpaper_items_paren_seq
\cs_new_protected:Nn \justint_graphpaper_prologue:n
{
\seq_set_split:Nnn \l__justint_graphpaper_items_seq { ; } { #1 }
\textbf
{
Answer~part
\int_compare:nT { \seq_count:N \l__justint_graphpaper_items_seq > 1 } { s }
\ % space
\seq_set_map:NNn
\l__justint_graphpaper_items_paren_seq % new seq
\l__justint_graphpaper_items_seq % old seq
{ (##1) } % parenthesize items
\seq_use:Nnnn \l__justint_graphpaper_items_paren_seq
{~and~} % between two
{,~} % between more than two
{~and~} % between last two
\ % space
of~this~question~on~the~graph~paper~provided.
}
} % Erroneous output
\ExplSyntaxOff
\begin{document}
\usegraphpaper{i;ii;iii}
\usegraphpaper{1;2;3}
\usegraphpaper{4;5}
\usegraphpaper{6}
\end{document}