如何制作 \newcommand 将 +1 添加到涉及符号和数字部分的表达式中?

如何制作 \newcommand 将 +1 添加到涉及符号和数字部分的表达式中?

该函数应该输出\alpha+2输入,\alpha+1但我无法在不弄乱符号部分的情况下将 +1 添加到输入的数字部分。到目前为止,我有这样的事情:

\newcommand{func}[1]{#1+1}

func[\alpha+1]

>>\alpha+1+1

答案1

在此处输入图片描述

\documentclass{article}

\ExplSyntaxOn
\seq_new:N\l_func_seq
\cs_new_protected:Npn\func#1{
\regex_extract_once:nnNTF
{^(.*[\+]\ *)?(\d+)\ *$}
{#1}
\l_func_seq
{ 
\seq_item:Nn\l_func_seq{2}
\int_eval:n{\seq_item:Nn\l_func_seq{3}+1}
}
{#1+1}
}

\ExplSyntaxOff

\newcommand\test[1]{#1 :\quad \func{#1}}

\begin{document}

\test{3}

\test{42}

\test{-3}

\test{x}

\test{x+2}

\test{x+22}

\end{document}

这实际上并不解释表达式,但尝试确保安全,因此 -3 变为 -3+1 。基本上,如果表达式全是数字或结尾+后跟数字,它只是在数字上加一。

答案2

这只会在(如果存在)处拆分参数+,并将两者转发到另一个测试两个现在拆分的参数的宏。

当后面的部分+不是整数时,此操作将会失败。

代码

\documentclass{article}
\usepackage{xstring}
\NewDocumentCommand{\funcA}  { > {\SplitArgument{1}{+}} m }{\funcADo#1}
\NewDocumentCommand{\funcADo}{ m m }
  {#1+\inteval{\IfNoValueTF{#2}{0}{#2}+1}}

\NewDocumentCommand{\funcB}  { > {\SplitArgument{1}{+}} m }{\funcBDo#1}
\NewDocumentCommand{\funcBDo}{ m m }{%
  \IfNoValueTF{#2}{%
    \IfInteger{#1}
      {\inteval{#1+1}}
      {#1+1}%
  }{#1+\inteval{#2+1}}}

\newcommand*\test[1]{%
  \noindent\texttt{\string\funcA\{#1\}}: \funcA{#1}\\
           \texttt{\string\funcB\{#1\}}: \funcB{#1}\par\vspace{1ex}}
\begin{document}
\test{3}
\test{42}
\test{-3}
\test{+-3}
\test{4+1}
\test{x}
\test{x+2}
\test{x+22}
\end{document}

输出

在此处输入图片描述 在此处输入图片描述

相关内容