(重新)定义使用括号以外的分隔符的命令(例如 \underbrace)

(重新)定义使用括号以外的分隔符的命令(例如 \underbrace)

如何重新定义一个命令\underbrace,例如,它在两个参数之间使用“不常见的”分隔符(即)_,以便重新定义的命令可以以与原始命令完全相同的方式使用?

作为示例,考虑\redub下面基于以下内容定义的命令(“红色下支撑”)\underbrace

\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}

\newcommand\redub[2]{%
    \colorlet{currentcolor}{.}%
    \color{red}%
    \underbrace{\color{currentcolor}#1}_{\color{red}#2}%
    \color{currentcolor}%
}
\begin{document}
\[
  \redub{e^{-x^2}}{\text{foo}} + \redub{e^{-2x^2}}{\text{bar}}
\]
\end{document}

在此处输入图片描述

对于经常使用的人来说\underbrace,使用类似的命令会更容易\underbrace,即像这样:

\redub{}_{}

不是这样的:

\redub{}{}

答案1

最简单的方法是

\newcommand{\redub}{} % make sure it's definable
\def\redub#1_#2{%
    \colorlet{currentcolor}{.}%
    \color{red}%
    \underbrace{\color{currentcolor}#1}_{\color{red}#2}%
    \color{currentcolor}%
}

使用较低级别的特征。

您可能需要添加对缺失的检查_

\makeatletter
\newcommand{\redub}{} % make sure it's definable
\def\redub#1{%
  \@ifnextchar_%
    {\@redub{#1}}
    {\@latex@warning{Missing argument for \string\redub}\@redub{#1}_{}}%
}
\def\@redub#1_#2{%
    \colorlet{currentcolor}{.}%
    \color{red}%
    \underbrace{\color{currentcolor}#1}_{\color{red}#2}%
    \color{currentcolor}%
}
\makeatother

最小示例:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}

\makeatletter
\newcommand{\redub}{} % make sure it's definable
\def\redub#1{%
  \@ifnextchar_%
    {\@redub{#1}}
    {\@latex@warning{Missing argument for \string\redub}\@redub{#1}_{}}%
}
\def\@redub#1_#2{%
    \colorlet{currentcolor}{.}%
    \color{red}%
    \underbrace{\color{currentcolor}#1}_{\color{red}#2}%
    \color{currentcolor}%
}
\makeatother

\begin{document}
\[
  \redub{e^{-x^2}}_{\text{foo}} + \redub{e^{-2x^2}}_{\text{bar}}
\]

$\redub{A}X$
\end{document}

在此处输入图片描述

相关内容