输入“x”代替“#1”

输入“x”代替“#1”

是否有可能在宏中用x代替#1变量名称?

我尝试过\regex_replace_all:nnN,但是没有效果。

非常感谢您的帮助。

在此处输入图片描述

\documentclass{article}
\usepackage{siunitx}

\begin{document}

\ExplSyntaxOn

\NewDocumentCommand{\FuncValue}{ O{} m m }
 {% #1 = option list, #2 = value, #3 = function
  \group_begin:
    \ensuremath{f(x)=x^2; \qquad 
    f\left(#2\right) = \thomas_function_value:nn { #2 } { #3 } }
  \group_end:
 }

\cs_new_protected:Nn \thomas_function_value:nn
 {
    \tl_set:Nn \l_thomas_funk_tl { #2 }
    \regex_replace_all:nnN { x } { \c{\#}1 } \l_thomas_funk_tl
    \cs_set:Nn \__thomas_functionValue_function:n  { #2 }
        \fp_eval:n
         {
          round( \__thomas_functionValue_function:n { \fp_eval:n { #1 } }, 3 )
         }
 }

\ExplSyntaxOff

\FuncValue{2^3}{#1^2}

\end{document}

答案1

虽然我不太明白你中间的步骤,但我猜下面的代码会做你想做的事(如果你只想计算你调用的给定点的函数值x)。

功能

\documentclass{article}
\usepackage{siunitx}

\begin{document}

\ExplSyntaxOn

\NewDocumentCommand{\FuncValue}{ O{} m m }
 {% #1 = option list, #2 = value, #3 = function
  \group_begin:
    \ensuremath{f(x)=#3; \qquad 
    f\left(#2\right) = \thomas_function_value:nn { #2 } { #3 } }
  \group_end:
 }

\cs_new_protected:Nn \thomas_function_value:nn
 {
    \tl_set:Nn \l_thomas_funk_tl { #2 }
    \regex_replace_all:nnN { x } { ( #1 ) } \l_thomas_funk_tl
    \fp_eval:n
       {
         round( \l_thomas_funk_tl , 3 )
       }
 }

\ExplSyntaxOff

\FuncValue{2^3}{x^2}

\end{document}

答案2

以下是一个符合您思路的解决方案,尽管还有更简单的方法。问题在于如何正确替换:\#不代表参数标记,而\cP\#代表。接下来,您必须将替换文本设置\__thomas_functionValue_function:n价值修改后的令牌列表。

\documentclass{article}
\usepackage{siunitx}

\begin{document}

\ExplSyntaxOn

\NewDocumentCommand{\FuncValue}{ O{} m m }
 {% #1 = option list, #2 = value, #3 = function
  \ensuremath % <-- is it really needed?
   {
    f(x)=#3;
    \qquad 
    f(#2) = \thomas_function_value:nn { #2 } { #3 }
   }
 }

\cs_new_protected:Nn \thomas_function_value:nn
 {
  \tl_set:Nn \l_thomas_funk_tl { #2 }
  \regex_replace_all:nnN { x } { \cP\#1 } \l_thomas_funk_tl
  \cs_set:NV \__thomas_functionValue_function:n  \l_thomas_funk_tl
  \fp_eval:n
   {
    round( \__thomas_functionValue_function:n { \fp_eval:n { #1 } }, 3 )
   }
 }
\cs_generate_variant:Nn \cs_set:Nn { NV }

\ExplSyntaxOff

\FuncValue{2^3}{x^2}

\FuncValue{pi}{sin(x)+cos(x)}

\FuncValue{pi/2}{sin(x)+cos(x)}

\end{document}

当然,函数的排版很糟糕;我相信您的选择会解决这个问题。

在此处输入图片描述

相关内容