宏允许在其参数内对齐点

宏允许在其参数内对齐点

我希望有一个允许在其中设置对齐点的宏。作为一个具体示例,我希望能够说:

\begin{align*}
         a &= b\\
  \bracr{c &= d} 
\end{align*}

其中,\bracr参数被放在圆括号内。

此命令将解析标记,直到遇到对齐字符。此时,它将插入一个\right.,添加对齐点,然后开始一个\left

我意识到这个例子手动完成似乎有点简单,但是现在如果我能有一个像上面的括号这样的命令来转换:

\bracr{c &= d}

到:

\left( c \right. & \left. = d\right)

最后,我想\vphantom{c = d}在等式的两边都添加一个,以获得正确的括号大小。我想用这个做更多的事情,但需要一些帮助才能开始,因为我不知道如何解析#1中的字符。

下面是一个代码示例。基本上,我想取消注释下面的行,并使其与上面的行等效(对宏进行适当的更改)。

另一个例子是我想为特定的公式着色,如下所示。

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}

\newcommand{\bracr}[1]{\left(  #1 \right)}    % not quite what is needed
\newcommand{\makeRed}[1]{\textcolor{red}{#1}} % also not quite as versatile as desired

\begin{document}
\begin{align*}
         a         &=        b \\
  \left( c \right. &= \left. d \right)\\
%\bracr{ c         &=        d }\\  % would prefer something like this instead
 \makeRed{c}&\makeRed{= d}
%\makeRed{c &= d} % would prefer something like this instead
\end{align*}

\end{document}

澄清:我希望它能够独立于提供的对齐点数量工作。

答案1

为什么不使用更简单的

\def\BRACKETS#1#2%
    {\left(\vphantom{#1#2}\right.#1%
     &%
     #2\left.\vphantom{#1#2}\right)}

\begin{align*}
  a &= b\\
  \BRACKETS{c}{= d} 
\end{align*}

请注意,我改变了定义(根据您所建议的)以获得正确的间距。

答案2

我认为这可以满足您的要求,并且应该能够正确设置间距。这与 Aditya 的答案非常相似,但宏用法正如您所建议的那样,它使用\mathopen\mathclose来在括号周围产生适当的间距。

\documentclass{article}
\usepackage{amsmath}

\newcommand*\bracr[1]{\bracrhelper#1\bracrhelper}
\def\bracrhelper#1&#2\bracrhelper{%
        \mathopen{\left(\vphantom{#1#2}\right.}#1%
        &#2\mathclose{\left.\vphantom{#1#2}\right)}%
}

\begin{document}
\begin{align*}
        a &= b\\
 \bracr{\frac1c &= d}
\end{align*}
\end{document}

为了解释这里发生的事情,\bracr宏读取其参数,然后将其“传递”给\bracrhelper使用分隔参数的宏。第一个参数是直到 的所有内容&。第二个参数是直到 的所有内容\bracrhelper。因此,#1是左侧,#2是右侧。然后两个\vphantoms 构成适当高度的括号。

相关内容