替换函数,如何使用 + 作为分隔符

替换函数,如何使用 + 作为分隔符

我正在使用一个函数来对类似论文中的数字进行求和,并且我在参数中的输入如下: \showsum{123+456}

我需要代替自定义函数与来自包xlop-的其他函数。我想要相同的函数名,但和\opadd中有两个独立的参数\opadd我想{123+456}用来\opadd争论. 如何制作这个分隔符?

\documentclass{article}
\usepackage{xlop}
\usepackage{amsmath}
 \usepackage{setspace}
\newcommand{\showsum}[2][c]{%
    $\edef\originalplusmathcode{\the\mathcode`+}%
    \begingroup\lccode`~=`+ \lowercase{\endgroup\def~}{\\\mathchar\originalplusmathcode&}%
    \edef\originalminusmathcode{\the\mathcode`-}%
    \begingroup\lccode`~=`- \lowercase{\endgroup\def~}{\\\mathchar\originalminusmathcode&}%
    \mathcode`+ "8000
    \mathcode`- "8000
    \begin{array}[#1]{@{}r@{\;}r@{}}
    & #2 \\
    \hline
    & \the\numexpr#2\relax
    \end{array}%
    $%
}

\begin{document}
 Original function(don't need anymore)\showsum{123+456}
 \\
 \\
 Replacement needed \opadd{123}{456}

\end{document}

答案1

您可以使用带有分隔参数的宏:

\documentclass{article}
\usepackage{xlop}

\newcommand{\showsum}[1]{\doshowsum#1\doshowsum}
\def\doshowsum#1+#2\doshowsum{\opadd{#1}{#2}}

\begin{document}

\showsum{123+456} \qquad \opadd{123}{456}

\end{document}

在此处输入图片描述

您还可以支持减法:

\documentclass{article}
\usepackage{xparse}
\usepackage{xlop}

\ExplSyntaxOn
\NewDocumentCommand{\showsum}{m}
 {
  \regex_match:nnTF { \+ } { #1 }
   {
    \simeon_showsum:nnn { #1 } { \+ } { opadd }
   }
   {
    \simeon_showsum:nnn { #1 } { \- } { opsub }
   }
 }
\cs_new_protected:Nn \simeon_showsum:nnn
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  % remove all spaces
  \regex_replace_all:nnN { \s } { } \l_tmpa_tl
  % replace <number>+<number> with \opadd{<number>}{<number>} or
  % replace <number>-<number> with \opsub{<number>}{<number>}
  \regex_replace_once:nnN
   { \A ([^#2]*) #2 (.*) \Z }
   { \c{#3}\cB\{\1\cE\}\cB\{\2\cE\} }
   \l_tmpa_tl
  % deliver the result
  \tl_use:N \l_tmpa_tl
 }
\ExplSyntaxOff

\begin{document}

\showsum{123+456} \qquad \showsum{456-123}

\end{document}

在此处输入图片描述

相关内容