如何使用 \xdef 将 \sqrt 存储到宏

如何使用 \xdef 将 \sqrt 存储到宏

如果这是一个微不足道的问题,我很抱歉,但我对乳胶还很陌生。我一直在尝试使用将几个数学表达式保存到一个变量中\xdef(在循环内,但这不是这里的问题)。似乎我可以使用将任何数学表达式存储到一个变量中,\xdef但我不能存储任何包含的表达式\sqrt。例如在以下程序中:

\documentclass{article}
\begin{document}
\xdef\TestFun{e^{x+1}}
$\TestFun$
\xdef\TestFunA{{\sqrt{x+1}}}
$\TestFunA$
\end{document}

$TestFun$工作并打印预期的内容,而当我运行时\TestFunA,我收到以下错误消息:

 l.14 \xdef\TestFun{\sqrt
                        {x+1}}
? 
! Undefined control sequence.

如果您能提出任何有关如何实现此项工作的想法,我们将不胜感激!

更新:

我的目标是循环遍历函数列表以创建函数的线性组合。如果有帮助,完整的循环代码如下:

\documentclass{article}
\usepackage{listofitems}
\usepackage{pgffor}

\begin{document}

\readlist\FUNS{X,X^2,e^{x+1},\sqrt{X}}

\xdef\SUMFUNS{\FUNS[1]}
\foreach \x in {2,...,\FUNSlen} {
\xdef\SUMFUNS{\SUMFUNS+{\noexpand\FUNS[\x]}}
}
$\SUMFUNS$
\end{document}

我采纳了@clemens 的建议,它目前能完成我想要它做的事情,但前提是该\sqrt函数是列表中的最后一个,这对我来说不算什么。但是,我会欢迎任何改进!

答案1

如果你只想构建线性组合,你可以尝试

\documentclass{article}
\usepackage{listofitems}
\usepackage{pgffor}

\begin{document}

\readlist\FUNS{X,X^2,e^{X+1},\sqrt{X},X^{1/2},X}

$\foreachitem\i\in\FUNS{\ifnum\icnt>1\relax+\else\fi{\i}}$

\end{document}

在此处输入图片描述

当然,这并没有回答标题中提出的问题。

答案2

使用\xdef是危险的,扩展应该限制在所需的水平。对于你的情况,你需要扩展一次\SUMFUNS和两次\FUNS[\x]

\documentclass{article}
\usepackage{listofitems}
\usepackage{pgffor}

\providecommand\expandonce{% etoolbox has it
  \unexpanded\expandafter
}
\newcommand\expandtwice{%
  \unexpanded\expandafter\expandafter\expandafter
}

\begin{document}

\readlist\FUNS{X,X^2,e^{x+1},\sqrt{X}}

\xdef\SUMFUNS{\expandtwice{\FUNS[1]}}
\foreach \x in {2,...,\FUNSlen} {%
  \xdef\SUMFUNS{%
    \expandonce{\SUMFUNS}+\expandtwice{\FUNS[\x]}%
  }%
}

$\SUMFUNS$

\end{document}

在此处输入图片描述

一种更简单的方法expl3

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\definelist}{mm}
 {
  \clist_clear_new:c { l_babis_list_#1_clist }
  \clist_set:cn { l_babis_list_#1_clist } { #2 }
 }
\NewDocumentCommand{\sumlist}{m}
 {
  \clist_use:cn { l_babis_list_#1_clist } { + }
 }
\ExplSyntaxOff

\begin{document}

\definelist{FUNS}{X,X^2,e^{x+1},\sqrt{X}}

$\sumlist{FUNS}$

\end{document}

相关内容