目标:我正在尝试找到一种方法来写出以下方程式:
但是,我失败了,或者至少到目前为止找不到办法,使用 在底部添加用于“磁通量”的最后一层\underbrace
。
这是我目前所拥有的,
$$
\overbrace{ \underbrace{S^1_A \times S^1_B}_{E} \times \underbrace{S^1_C \times \mathbb{R}}_{\mathbb{CP}^{N-1}}
}^{\text{ABCDEFG}}
$$
我的输出是这样的:
你能找到更好的方法吗?实际上,如何在两个“Underbraces”下做“Underbrace”?或者我们也可以尝试使用 TikZ?(即我不介意尝试其他方法)
ps 另外一件事是,就我而言,ABCDEFG 的大小小于S^1_A \times S^1_B \times S^1_C \times \mathbb{R}
——有没有办法调整 ABCDEFG 和其他的大小?
感谢您的帮助!!!
答案1
\documentclass{article}
\usepackage{mathtools,amssymb}
\begin{document}
\begin{gather*}
\overbrace{\underbrace{S^1_A \times S^1_B}_E\times
\underbrace{S^1_C\times\mathbb{R}}_{\mathbb{CP}^{N-1}}}^{\text{ABCDEFG}} \\[-\normalbaselineskip]
\underbrace{\kern5em}_{\text{magnetic flux}}
\end{gather*}
\end{document}
答案2
解决方法1:手动调整。
\documentclass{article}
\usepackage{amsfonts}
\usepackage{mathtools}
\begin{document}
\[
\overbrace{ \underbrace{S^1_A \times S^1_B}_{E}
\makebox[7pt][c]{$\underbrace{\qquad~\times~\qquad\vphantom{\underbrace{S^1_C \times \mathbb{R}}_{\mathbb{CP}^{N-1}}}}_{\text{magnetic flux}}$}
\underbrace{S^1_C \times \mathbb{R}}_{\mathbb{CP}^{N-1}}
}^{\text{ABCDEFG}}
\]
\end{document}
解决方案 2:Ti钾Z。
\documentclass{article}
\usepackage{amsfonts,amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark,decorations.pathreplacing}
\begin{document}
\[
\tikzmarknode{l}{S^1_A \times S^1_B}
\times
\tikzmarknode{r}{S^1_C \times \mathbb{R}}
\]
\begin{tikzpicture}[overlay,remember picture,decoration={brace,raise=2pt},thick]
\draw[decorate] (l.north west) -- (r.north east) node[midway,above=3pt](ABC){ABCDEFG};
\draw[decorate] (l.south east) -- (l.south west) node[midway,below=3pt](E){$E$};
\draw[decorate] (r.south east) -- (r.south west) node[midway,below=3pt](CP){$\mathbb{CP}^{N-1}$};
\draw[decorate] (CP.south east) -- (E.south west|-CP.south) node[midway,below=3pt]{magnetic flux};
\end{tikzpicture}
\end{document}
答案3
解决方案 4(或 5):测量箱
我决定创建下面这个稍微更基础的解决方案的版本。
我在下面定义的宏\bracetree
会创建您想要的输出。它通过将一些参数放入框寄存器中来实现这一点,以便可以测量它们的宽度。然后,它使用这些宽度在正确的位置插入适当的空间,以创建具有正确宽度的括号
\documentclass{article}
\usepackage{amsmath} %% <- not explicitly needed
\usepackage{amsfonts} %% <- for \mathbb
\usepackage{mathtools} %% <- for \mathrlap, loads amsmath
\makeatletter %% <_ make @ usable in macro names
\newcommand*\bracetree[6]{%
\begingroup %% <- limit scope of assignments
\sbox0{$\m@th\displaystyle #1$} %% <- store arguments in box registers
\sbox2{$\m@th #4$}
\sbox4{$\m@th\displaystyle #3$}
\sbox6{$\m@th #5$}
\hspace{\dimexpr.5\wd0-.5\wd2} %% <- insert space
\underbrace{
\hspace{\dimexpr-.5\wd0+.5\wd2} %% <- remove space
\underbrace{\copy0}_{\copy2}
#2
\underbrace{\copy4}_{\copy6} %% <- remove space
\hspace{\dimexpr-.5\wd4+.5\wd6}
}_{\textstyle #6}
\hspace{\dimexpr.5\wd4-.5\wd6} %% <- insert space
\endgroup
}
\makeatother %% <- revert @
\begin{document}
\noindent Words before
\begin{equation}
\overbrace{
\bracetree{S^1_A \times S^1_B}{\times}{S^1_C \times \mathbb{R}}
{E}{\mathbb{CP}^{\mathrlap{N-1}}}
{\textnormal{magnetic fluxxxx}
}
}^{\textstyle\textnormal{ABCDEFG}}
\end{equation}
Words after
\end{document}
几点说明:
ABCDEFG
较小,因为括号上方的文本实际上就像上标,因此设置为相应的字体大小。这可以通过添加 来补救\textstyle
。我使用\textnormal
而不是 ,\text
因为概述的原因这里。我使用正数和负数
\hspace
来精确抵消以设置底部支撑的宽度。我使用
\mathrlap
from 来mathtools
否定所占用的水平空间,{N-1}
因为我认为如果为了放置大括号和相对于大括号的放置而忽略上标,看起来会更好。\sbox<box register>{<contents>}
存储<contents>
在盒子寄存器中。这些盒子可以用 打印\copy<box register>
,它们的宽度由 给出\wd<box register>
。我只使用偶数盒子寄存器,因为这些寄存器可用作暂存器。\m@th
\mathsurround
将(水平空间量)设置$…$
为零。这是默认值,因此实际上它在这里什么也不做。如果你删除它,你也可以删除\makeatletter
和'\makeatother。
解决方案 3(或 4):黑魔法
\bracetree
我之前通过分解原始的定义制作了下面的版本\underbrace
。结果应该基本相同,但解释其工作原理有点困难(可能您也需要适应)。
\documentclass{article}
\usepackage{amsmath} %% <- not explicitly needed
\usepackage{amsfonts} %% <- for \mathbb
\usepackage{mathtools} %% <- for \mathrlap, loads amsmath
\makeatletter %% <- make @ usable in macro names
\newcommand\bracetree[6]{%
\vtop{\m@th
\sbox0{$\mathstrut\displaystyle #1$}%
\sbox2{$\mathstrut\displaystyle #3$}%
\sbox4{$\mathstrut #4$}%
\sbox6{$\mathstrut #5$}%
\ialign{##\crcr
$\displaystyle\copy0#2\copy2$%
\crcr
\noalign{\kern3\p@\nointerlineskip}%
\hbox to \wd0{\upbracefill}\hfil\hbox to \wd2{\upbracefill}%
\crcr
\hskip.5\wd0\hskip-.5\wd4\copy4\hfil\copy6\hskip-.5\wd6\hskip.5\wd2
\crcr
\noalign{\kern3\p@\nointerlineskip}%
\hskip.5\wd0\hskip-.5\wd4\upbracefill\hskip-.5\wd6\hskip.5\wd2
\crcr
\hskip.5\wd0\hskip-.5\wd4\hidewidth\hbox{$#6$}\hidewidth\hskip-.5\wd6\hskip.5\wd2
\crcr
}%
}%
}
\makeatother %% <- revert @
\begin{document}
\noindent Words before.
\begin{equation}
X = \overbrace{
\bracetree{S^1_A \times S^1_B}{\times}{S^1_C \times \mathbb{R}}
{E}{\mathbb{CP}^{\mathrlap{N-1}}}
{\text{magnetic flux}}
}^{\textstyle\text{ABCDEFG}}
\end{equation}
Words after.
\end{document}
我不太清楚从哪里开始解释这一点,但我还是想说一下。
\vtop
创建一个顶部对齐的框:其内容的第一行将与周围的公式共享基线。参见这里。\ialign
有点像tabular
:它允许您将事物排列在一起或叠放在一起。\crcr
\\
在tabular
环境中或多或少地做了什么\noalign{\kern<length>}
插入一点垂直空间\hskip<length>
插入水平空间\hfil
两者\hidewidth
都插入了可伸缩的空间。后者在必要时将为负数。\upbracefill
用下支架填充可用空间
解决方案 2.5:再次使用 Tikz
我已经修改了marmot 的回答(得到了他的祝福)。这个版本与他的版本的区别在于,这增加了方程的深度(因此“之后的单词”实际上位于“磁通量”之下)。
免责声明:这嵌套了 TikZ 环境!
嵌套 TikZ 环境通常不是一个好主意,因为诸如键值和边界框之类的东西可能会从内部环境泄漏到外部环境,反之亦然。虽然 marmot 认为在这种情况下应该没问题,但人们仍然应该小心。参见例如这个问题并且链接到了更多详细信息的页面。
如果在其他地方使用该代码的修改版本,则不能保证其仍能顺利运行。
\documentclass{article}
\usepackage{amsfonts,amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark,decorations.pathreplacing}
\begin{document}
\noindent Words before
\begin{equation}
X = \begin{tikzpicture}[baseline,remember picture,decoration={brace,raise=2pt},thick]
\node[anchor=base] {$\tikzmarknode{l}{S^1_A \times S^1_B} \times \tikzmarknode{r}{S^1_C \times \mathbb{R}}$};
\draw[decorate] (l.north west) -- (r.north east) node[midway,above=3pt](ABC){ABCDEFG};
\draw[decorate] (l.south east) -- (l.south west) node[midway,below=3pt](E){$\strut E\vphantom{^{N}}$};
\draw[decorate] (r.south east) -- (r.south west) node[midway,below=3pt](CP){$\mathbb{CP}^{N-1}$};
\draw[decorate] (CP.south east) -- (E.south west|-CP.south) node[midway,below=3pt]{magnetic flux};
\end{tikzpicture}
\end{equation}
Words after
\end{document}