如何用括号括住多元素参数?

如何用括号括住多元素参数?

不带括号的命令指定参数时,只将其后的第一个元素作为参数,因此a^bc将只有上标 b。我想利用 LaTex 中的排版函数(如、等)来利用这一点\ln\sin如果只有一个参数(如\ln{a}bc或)\ln abc,则函数不会使用括号排版。如果参数中有多个元素(如)\ln{abc},则会在参数周围排版括号,即显示的三重乘积。

这样做的动机是对数中括号的可变需求和代码的可读性。例如,我可以写成\ln{a + b}明确地引用和的对数,并\ln ab明确地引用乘积的对数(按照大多数惯例)。由于对数或其他数学运算符只是一个独立的排版,因此在没有括号的情况下,虚假参数(\ln ab相当于\ln{a}b)不会对排版产生影响。这在可读性方面具有优势,例如,对比\ln\left(a + \frac bc\right)\ln{a + \frac bc}

如何定义一个命令来识别参数中有多少个元素,并且如果有多个元素则添加括号?

答案1

我的解决方案使用\@gobble一个简单的 if 语句来测试宏参数是否包含多个字符。可能有更好的方法来做到这一点。一旦你有一个在某些条件下添加括号的宏,你可以将它添加到任何带有的函数中\g@addto@macro

以下是包含您提到的示例的 MWE:

\documentclass{article}

\makeatletter
\newcommand{\addparentheses}[1]{%
    \if\@gobble#1\relax\relax#1\else\left(#1\right)\fi
}
\g@addto@macro{\ln}{\addparentheses}
\makeatother

\begin{document}
Tests:

$\ln ab$

$\ln{a}b$

$\ln{a + b}$

$\ln{a + \frac bc}$
\end{document}

输出:

带或不带括号的 ln

相关内容