不接受其他宏作为参数的宏

不接受其他宏作为参数的宏

我正在尝试将计数器传递给使用包中的宏的宏fp

我可以传递硬编码值并\resultsfp包中传递,但是如果我传递计数器,它会抱怨它不是一个有效的浮点值。

有什么方法可以让它工作吗?当为 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\endcsnamecount0\arabic{count0}\arabiccount0

计数器没有其名称中的数字处理起来要容易得多(如上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} 

相关内容