交换 DeclarePairedDelimiter 的星号版本和非星号版本而不破坏其他参数

交换 DeclarePairedDelimiter 的星号版本和非星号版本而不破坏其他参数

我经常使用\DeclarePairedDelimitermathtools包中的命令,并且几乎总是希望分隔符能够自动调整大小。因此,我切换了命令的星号和非星号版本的定义,如中所述这个问题问题是这样做会完全破坏可选的大小参数:

以下是 MWE:

\documentclass{article}

\usepackage{amsmath}
\usepackage{mathtools}

\DeclarePairedDelimiter\abs{\lvert}{\rvert}

\makeatletter
\let\oldabs\abs
\def\abs{\@ifstar{\oldabs}{\oldabs*}}
\makeatother


\begin{document}
\[ \abs{\frac{1}{x}} \quad \abs*{\frac{1}{x}} \quad \abs[\Bigg]{\frac{1}{x}} \]
\end{document}

有没有办法在不破坏尺寸参数的情况下交换星型和非星型的定义?

答案1

您可以使用它\RenewDocumentCommand来获得所需的行为。

\documentclass{article}

% \usepackage{amsmath} % loaded by mathtools
\usepackage{mathtools}

\DeclarePairedDelimiter\abs{\lvert}{\rvert}
\NewCommandCopy{\oldabs}{\abs}
\RenewDocumentCommand{\abs}{som}{%
  \IfBooleanTF{#1}
    {\oldabs{#3}}
    {%
      \IfNoValueTF{#2}
        {\oldabs*{#3}}
        {\oldabs[#2]{#3}}%
    }%
  }

\begin{document}
\[ \abs{\frac{1}{x}} \quad \abs*{\frac{1}{x}} \quad \abs[\Bigg]{\frac{1}{x}} \]
\end{document}

相关内容