我有一个 \hg 和 \hgunits 包这里
我想像这样使用它:
\item svoboda a volnost {\jednotky{22}}
\item \def\aa{\value\modulo{152123}{10}}
{\hg
\hgunits{\aa}
}
这里
{\hg
\hgunits{2}
}
作品但
{\hg
\hgunits{\aa}
}
才不是。
另外,当单独调用时, \jednotky{22} 也会打印正确的值 2。
我想知道如何修复它。
包裹:
\usepackage[nomessages]{fp}
\newcommand{\modulo}[2]{%
\FPeval{\result}{trunc(#1-(#2*trunc(#1/#2,0)),0)}\result%
}
\newcommand\jednotky[1]{
$\modulo{#1}{10}$
}
答案1
正如评论中所述
\def\aa{\value\modulo{152123}{10}}
命令名称不应该\aa
像覆盖标准 latex 命令那样。\value
是一个接受单个参数的宏,因此这里没有括号,它会获取参数\modulo
(不是\modulo{152123}{10}
)。
预期用途是,\hgunits{\aa}
但\hgunits
只是\ifcase
检查 0-9 的值,因此参数必须扩张到一个数字。
fp
包计算不能通过扩展进行,
\FPeval{\result}{trunc(#1-(#2*trunc(#1/#2,0)),0)}\result%
第一的分配一个值\result
(如\def
或 \newcommand`)并使用该结果,您不能使用这样的分配作为必须扩展为数字的代码。
有些包可以进行可扩展的算术运算(xfp
例如),但对于预期的用例,您只需从数字的十进制形式中提取数字,而不需要进行模 10 算术运算,请参阅更新后的答案