如果表达式是复合表达式,则自动添加括号

如果表达式是复合表达式,则自动添加括号

我正在尝试编写一个宏,如果参数是复合的,它会自动将括号添加到表达式中。具体来说,我想使用符号定义一个用于两个向量内积的命令$v\cdot w$。所以我会定义

\newcommand{\inner}[2]{#1\cdot #2}

但是,如果一个参数是复合表达式,如\inner{v}{w_1+w_2},则结果应该是$v\cdot(w_1+w_2)$。我希望自动添加括号。原因是以后某个时候我可能会决定切换到角度符号<v,w_1+w_2>,这样就不需要括号了。

我研究了类似这样的软件包xstring来测试字符串长度。但是,我无法让它与下标表达式$x_i$(不应添加括号)一起工作。

这样的事可能吗?

答案1

\documentclass{article}
\usepackage{xstring}
\newif\ifsum
\newcommand{\inner}[2]{%
\IfSubStr{#1}{+}{\sumtrue}{\sumfalse}%
\unless\ifsum
\IfSubStr{#1}{-}{\sumtrue}{\sumfalse}%
\fi%
\ifsum%
(#1)%
\else
#1%
\fi
\cdot%
\IfSubStr{#2}{+}{\sumtrue}{\sumfalse}%
\unless\ifsum
\IfSubStr{#2}{-}{\sumtrue}{\sumfalse}%
\fi%
\ifsum%
(#2)%
\else
#2%
\fi}
\begin{document}
$\inner{v}{w_1+w_2}$ $\inner{w_1+w_2}{v}$
\end{document}

相关内容