\newcommand
我在以下代码中定义了一个类似函数:
\documentclass{scrartcl}
\usepackage{pbox,calc}
\newcounter{pointsExo}
\setcounter{pointsExo}{4}
\newcounter{pointsSousTotal}
\setcounter{pointsSousTotal}{0}
\newcounter{souspointsExo}
\newcommand{\sousPoints}[1]{
\setcounter{souspointsExo}{#1}
\setcounter{pointsSousTotal}{\value{pointsSousTotal} + #1}
{\scriptsize{(#1~\ifthenelse{#1<2}{point}{points}}/\arabic{pointsExo})}
}
\newcommand{\subexo}[2]{
#1\hfill\sousPoints{#2}% Points
\medskip
}
\begin{document}
\subexo{Anything}{2}
\subexo{Something}{0.5}
\end{document}
我希望能够同时调用命令真实的或者整数数字:
\subexo{Anything}{2}
或者
\subexo{Something}{0.5}
但是我当前的代码有这样的错误:
! Package calc Error: `.' invalid at this point.
我应该修改我的\newcommand
定义中的哪些部分来做到这一点?
答案1
计数器只能包含整数。如果要处理实数,则必须使用长度。
以下 MWE 使用长度而不是计数器(打印长度时\strip@pt
使用内部宏来剥离):pt
\documentclass{scrartcl}
\usepackage{pbox,calc}
\makeatletter
\newcommand*{\strippt}[1]{\strip@pt#1}
\makeatother
\newlength{\pointsExo}
\setlength{\pointsExo}{4pt}
\newlength{\pointsSousTotal}
\setlength{\pointsSousTotal}{0pt}
\newlength{\souspointsExo}
\newcommand{\sousPoints}[1]{
\setlength{\souspointsExo}{#1pt}
\setlength{\pointsSousTotal}{\pointsSousTotal + #1pt}
{\scriptsize{(#1~\ifdim#1pt=1pt point\else points\fi/\strippt\pointsExo)}}
}
\newcommand{\subexo}[2]{
#1\hfill\sousPoints{#2}% Points
\medskip
}
\begin{document}
\subexo{Anything}{2}
\subexo{Something}{0.5}
\end{document}
输出: