我正在尝试创建一个命令,该命令将在 esami 包中为正数显示“+”号,为数字显示无符号。我认为问题在于我试图传递给 \rtink 函数的随机变量的格式。如果我使用整数,该函数可以工作,但我一直无法弄清楚如何传递变量。任何帮助都将不胜感激。
以下是在 eachtest.tex 文件中设计的问题:
\newproblem{prob12
\FPsetpar{a}{1}{9}[-1,1]
\FPsetpar{b}{1}{9}[-1,1]
\newcommand{\rtink}[1]{%
\FPifneg #1 \par $$ \else $+$ \fi
}
\item If
\begin{equation*} \a (x \rtink{\a} \b)=\a x+m \end{equation*} what is the value of $m$?
\vspace{10 mm}
\begin{answers}{2}\bChoices
\Ans1 \FPsv{\a*\b} \eAns
\Ans0 \FPsv{-\a*\b} \eAns \eFreeze
\Ans0 \FPsv{\a} \eAns \eFreeze
\Ans0 \FPsv{\b} \eAns
\eChoices\end{answers}
}
这是从 eachtest.tex 文件中提取的 master_new.tex 文件:
\documentclass[a4paper,UKenglish]{article}
\usepackage[shufflerandom,xyz,twocolumns,solutions]{esami}
\usepackage{lmodern,textcomp}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% +=============================+
% | DEFINITIONS |
% +=============================+
\def\examname{The name of the exam}
\def\numcompiti{1}%%% The number of the versions
\date{2013/3/22}%%% THE DATE IN THE FORMAT YYYY/MM/DD
\def\Data{\longdate}%%% or \shortdate: the date in the heading
\begin{document}
\testversioni
\pagestyle{esame}
\whiledo{\thevers<\numcompiti}{\stepvers
% +=============================+
% | THE SEED |
% +=============================+
\FPeval\seme{round((\thenomefile+(3*\thevers)):0)}
\randomi=\seme
\permuta
\section*{Mathematics Achievement}
\begin{test}
\begin{questions}
\esercizi{eachtest}
\end{questions}
\end{test}
\closevers
}
\end{document}
答案1
@egreg 对这个命令的看法肯定是正确的。正确的定义\rtink
是
\newcommand{\rtink}[1]{\FPifneg{#1}-\else+\fi}
此外,您的代码包含一些小问题,可能会导致与您想要的结果不同的结果。
\newproblem{prob12
:该命令\newpbroblem
只有一个强制参数,即问题的文本,应在定义之后开始\FPsetpar
。在构造时,\newproblem
不能接受标签或类似的东西。\FPsetpar{a}{1}{9}[-1,1]
:此处您想要一个参数\a
,该参数假定为 1 到 9 之间的随机值。您已排除值 -1 和 1,但这不是必需的:参数始终不同于 -1,因为它大于或等于 1,并且要排除值 1,您只需写入\FPsetpar{a}{2}{9}
。此外,如果排除的值不止一个,则必须将其放在括号中。\FPsv{\a*\b}
:即使通常你不会收到错误,里面\FPsv
最好不要使用\a
和\b
,而只是使用a
和b
,这样你的操作就变成\FPsv{a*b}
\FPsv{\b}
:最好写\b
,没有\FPsv
第二和第三个答案中的两个
\eFreeze
不是必需的:因为您没有使用[random]
后面的可选参数\bChoices
,所以您的答案不会被打乱。