我希望有一个允许在其中设置对齐点的宏。作为一个具体示例,我希望能够说:
\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\bracrhelper{%
\mathopen{\left(\vphantom{#1#2}\right.}#1%
\mathclose{\left.\vphantom{#1#2}\right)}%
}
\begin{document}
\begin{align*}
a &= b\\
\bracr{\frac1c &= d}
\end{align*}
\end{document}
为了解释这里发生的事情,\bracr
宏读取其参数,然后将其“传递”给\bracrhelper
使用分隔参数的宏。第一个参数是直到 的所有内容&
。第二个参数是直到 的所有内容\bracrhelper
。因此,#1
是左侧,#2
是右侧。然后两个\vphantom
s 构成适当高度的括号。