“esami”包中的命令\randestrai
允许定义一组元素,以便从中进行随机选择,例如一组公式。它适用于包含 latex 命令的公式,例如,我可以安全地使用
\randestrai{\frac{1}{2}x+1,2x-\frac{1}{2}}{formula}
或者
\randestrai{A \to B, \overline{A} \land B}{formula}
但是,一旦我\sqrt
在其中一个元素中使用该命令,就会出现一条错误消息,告诉我有一个实际上不存在的多余的“}”。
例如:如果我写
\randestrai{\sqrt 2, 1}{formula}
我收到错误信息:
! \reserved@a 的参数有一个额外的 }。\par l.10 \randestrai{\sqrt 2, 1}{formula} 我遇到了一个似乎不匹配任何内容的 `}'。
这是为什么?有解决方法吗?
答案1
\sqrt
是一个放在那里有风险的命令(这取决于如何\randestrai
实施方式)。
用不同的方式让它变得健壮:
\documentclass{article}
\usepackage{esami}
\usepackage{etoolbox}
\robustify{\sqrt}
\date{2018/11/02}
\begin{document}
\randestrai{\frac{1}{2}x+1,2x-\frac{1}{2}}{formula}
$\formulai$
\randestrai{A \to B, \overline{A} \land B}{formula}
$\formulai$
\randestrai{\sqrt{4+3}, \sqrt{2+5}}{formula}
$\formulai$
\end{document}
答案2
的定义\sqrt
是\@ifnextchar [\@sqrt \sqrtsign
(见\sqrtsign 和 \sqrt),它检查可选参数(根号)。似乎\randestrai
由于这个定义,列表处理在某种程度上中断了。作为一种解决方法,您可以绕过检查并直接使用\sqrtsign
不带数字的平方根。
梅威瑟:
\documentclass{article}
\usepackage{esami}
\date{2018/04/21}%%% THE DATE IN THE FORMAT YYYY/MM/DD
\begin{document}
\randestrai{\frac{1}{2}x+1,2x-\frac{1}{2}}{formula}
$\formulai$
\randestrai{A \to B, \overline{A} \land B}{formula}
$\formulai$
\randestrai{\sqrtsign{4+3}, \sqrtsign{2+5}}{formula}
$\formulai$
\end{document}
结果:
编辑:一般来说,特别是对于添加索引,解决egreg问题是首选。但是,您可以定义一个平方根命令,该命令可以在\randestrai
不健壮的情况下使用:
\def\sqsciatto#1#2{{}^{\scriptscriptstyle #2}\mkern-11mu\sqrtsign{#1}}
\randestrai{\sqsciatto{4+3}{7}, \sqsciatto{2+5}{3}}{formula}
$\formulai$
结果: