带括号和不带括号的数学运算符

带括号和不带括号的数学运算符

我在序言中做了几个数学运算符,但现在我想做一个小改动(在输出中)。我将在下面使用梯度运算符作为示例。下面的 MWE 显示了我的梯度定义,其中包括一个小的使用示例。

\documentclass{memoir} 

\usepackage{amsmath}
\usepackage{mathtools}

\DeclarePairedDelimiter\parentheses{\lparen}{\rparen}
\newcommand{\grad}[1]{\operatorname{grad} \parentheses*{#1}}

\begin{document}

\begin{align}
\grad{\vec{x}} = \grad{2y}
\end{align}

\begin{align}
\sin x = \sin (2y)
\end{align}

\end{document}

目前,我总是在输出中看到括号: 坡度

问题是,我希望左侧没有括号,但右侧仍然有括号---取决于是否有单个还是多个输入/参数,如正弦所示:

正弦

我想根据上述示例全局更改此设置,而无需更正整个文档中的任何运算符符号。这可能吗?或者最佳选择?一般来说,如何最好地完成(从头开始)?

(我更喜欢自动缩放括号。)

答案1

根据 Paul 的评论,我的工作实际上可能变得更容易了。在这里,我对 的参数进行测试\grad。如果参数是单个标记(或包含的数量)或者如果它是\vec{<single token or embraced quantity>},则不使用括号。否则,使用括号。

\documentclass{memoir} 
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{ifthen}
\DeclarePairedDelimiter\parentheses{\lparen}{\rparen}
\newcommand{\npgrad}[1]{\operatorname{grad} {#1}}
\newcommand{\pgrad}[1]{\operatorname{grad} \parentheses*{#1}}
\newcommand\grad[1]{\gradx#1\relax\relax\relax\relax}
\def\gradx#1#2#3\relax{%
  \ifx\relax#2\relax%
    \npgrad{#1}%
  \else
    \ifx\relax#3\relax%
      \ifx\vec#1\npgrad{#1{#2}}\else\pgrad{#1{#2}}\fi
    \else
      \pgrad{#1{#2}{#3}}%
    \fi
  \fi
}
\begin{document}

\begin{align}
\grad{\vec{x}}          &= \grad{2y}\\
\grad{\frac{2w}{y}}     &= \grad{\vec{z}}\\
\grad{p}                &= \grad{\vec{a}\times\vec{b}}\\
\grad{\vec{\mathcal{P}}} &= \grad{\alpha}
\end{align}
\end{document}

在此处输入图片描述

答案2

利用包的功能xparse,这里有一个\grad宏,用于检查下一个字符是否为(;如果是,它会将括号的内容视为参数,并\parens*{#1}自动将参数括起来。因此,您可以使用\grad A\grad(A),后者将\grad\parens*{A}自动变为。此外,由于有xparse,宏确实会抓取匹配的括号,因此\grad(\foo(x))可以正确处理\foo(x)

\documentclass{scrartcl}
\usepackage{xparse,mathtools}
\DeclarePairedDelimiter\parens{\lparen}{\rparen}
\NewDocumentCommand\grad{d()}{\operatorname{grad}\IfValueT{#1}{\parens*{#1}}}

\begin{document}
\[ \grad \vec x = \grad(\frac{y}{z}) \]
\end{document}

答案3

为了获得最大的灵活性,我建议您设置两个宏:\grad作为基本数学运算符,和\gradp,它接受一个由自动大小的括号包围的参数。

在此处输入图片描述

\documentclass{memoir}
\usepackage{mathtools}
\DeclareMathOperator{\grad}{grad}
\DeclarePairedDelimiter\parens{\lparen}{\rparen}
\newcommand{\gradp}[1]{\grad\parens*{#1}}

\begin{document}
\[
\grad\vec{x} = \gradp{\frac{y}{z}}
\]
\end{document}

相关内容