如何评估表达式并在新命令中使用结果?

如何评估表达式并在新命令中使用结果?

我正在尝试声明一个新命令

\newcommand{\seq}[3]{#1_#2, #1_{#2 + 1} \cdots ,#1_#3}

$v_0, v_1, \cdots, v_N$我想要的基本上是通过调用 来打印序列\seq{v}{0}{N},但它正在打印$v_0, v_{0+1}, \cdots, v_N$。基本上,我想评估并使用表达式的结果#2 + 1

我该如何做呢?

答案1

如果您可以使用 LuaLaTeX,您的目标就很容易实现。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}  
\newcommand{\seq}[3]{#1_{#2}, #1_{\directlua{tex.sprint(#2+1)}}, \dots ,#1_{#3}}
\begin{document}
$\seq{v}{0}{N}$
\end{document}

答案2

这将检查是否#2为(无符号)整数,如果为,则执行操作;否则,它仅附加+1

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\seq}{mmm}
 {
  \chelsea_seq:nnn { #1 } { #2 } { #3 }
 }

\cs_new_protected:Nn \chelsea_seq:nnn
 {
  #1\sb{#2}, % first item
  \regex_match:nnTF { \A [0-9]+ \Z } { #2 }
   {% #2 is a number
    #1\sb{ \int_eval:n { #2 + 1 } }
   }
   {% #2 is not a number
    #1\sb{ #2+1 }
   }
  ,\dots,#1\sb{#3}
 }

\ExplSyntaxOff

\begin{document}

$\seq{v}{0}{N}$

$\seq{v}{1}{N}$

$\seq{w}{n}{N}$

\end{document}

在此处输入图片描述

相关内容