如何重新定义一个命令\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}