我正在尝试制作一个宏,以便给它提供如下参数
\sqrtnorm{x,y,z}
使其扩展为,
\sqrt{x^2+y^2+z^2}
我正在尝试(没有特殊原因)用\@for
命令来做这件事,这就是我尝试过的
\makeatletter
\newcommand\sqrtnorm[1]{
\sqrt{
\@for\levar:=#1\do{
{\levar}^2+}
}
}
\makeatother
一切都很完美,只是最后有一个小“+”。有办法解决这个问题吗?
答案1
和expl3
:
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\sqrtnorm}{m}
{
% make a sequence from the argument
\seq_set_from_clist:Nn \l_tmpa_seq { #1 }
% add ^2 to every item
\seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { ##1^2 }
% deliver the sequence with + between items
\sqrt{\seq_use:Nn \l_tmpb_seq { + }}
}
\ExplSyntaxOff
\begin{document}
$\sqrtnorm{x,y,z}$
\end{document}