如何获取浮点数作为 \newcommand 的参数

如何获取浮点数作为 \newcommand 的参数

\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} 

输出:

在此处输入图片描述

相关内容