对 \@for 中最后一个元素的特殊处理

对 \@for 中最后一个元素的特殊处理

我正在尝试制作一个宏,以便给它提供如下参数

\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}

在此处输入图片描述

相关内容