我正在尝试将计数器传递给使用包中的宏的宏fp
。
我可以传递硬编码值并\results
从fp
包中传递,但是如果我传递计数器,它会抱怨它不是一个有效的浮点值。
有什么方法可以让它工作吗?当为 1时,\cmd{1}
和之间\cmd{\count0}
在逻辑上和数学上应该没有区别。\count0
我不确定幕后发生了什么,但应该有办法让它工作。这将省去我创建\result
计数器后面变量的麻烦,因为这样会造成不必要的混乱。
答案1
从表面上看,或者就当前问题而言,似乎您只是对将计数器值传递给“某个命令”感兴趣,这些命令甚至可能是由fp
包裹。
以下是将计数器值传递给包宏的最小示例fp
:
\documentclass{article}
\usepackage{fp}% http://ctan.org/pkg/fp
\begin{document}
\newcounter{count0} \newcounter{test}
\setcounter{count0}{5} \setcounter{test}{6}
\csname thecount0\endcsname \par
\thetest \par
\FPeval\result{clip(2*3+5*6)}\result \par
\FPeval\result{clip(2*3+\csname thecount0\endcsname*6)}\result \par
\FPeval\result{clip(2*3+5*\thetest)}\result
\end{document}
请注意,如果您使用count0
作为计数器名称,则值提取并不像说 那样简单\thecount0
,因为带有数字的宏定义需要特别小心。此外,\value{count0}
( 的内部表示)可能与的排版count0
不同,后者可能与的固定表示不同。\csname thecount0\endcsname
count0
\arabic{count0}
\arabic
count0
计数器没有其名称中的数字处理起来要容易得多(如上test
例所示)。
答案2
你不能指望\FretDist
你在这个问题被输入到另一个宏中,以便\FretDist{3}
将其解释为计算得出的数字。
如下指令
\FPmul\resulta{-1}{3}
告诉 LaTeX 将乘法结果存储在宏中\resulta
。因此你不能指望
\cmd{\FPmul\resulta{-1}{3}}
相当于调用\cmd{-3}
,也不将计算隐藏在另一个宏中,比如
\newcommand{\mycalc}[1]{\FPmul\resulta{-1}{#1}}
打电话\cmd{\mycalc{3}}
会有帮助。另外
\newcommand{\mycalc}[1]{\FPmul\resulta{-1}{#1}\resulta}
行不通,因为\cmd
必须知道要使用什么数字,而不是获取它的过程。根据 的定义\cmd
,说
\FPmul\resulta{-1}{3}\cmd{\resulta}
\resulta
可能会奏效。请注意不是某些可能适用的东西\the
,\value
或者\arabic
可能适用的东西,也不是你的\FretDist
宏。
答案3
如果没有 MWE,就很难找到正确答案
\documentclass{scrartcl}
\usepackage{fp,tikz}
\newcount\cnt
\newcommand\addline[2][]{%
\FPeval\resulta{#2*#2}
\FPeval\resultb{2*#2}
\tikz \draw[#1] (0,0)--(\resulta,\resultb);}
\begin{document}
\cnt=2 %
\addline[red,thick]{\the\cnt}
\end{document}