![在数学环境中使用 \underbrace 时出现意外的 displaymath](https://linux22.com/image/286262/%E5%9C%A8%E6%95%B0%E5%AD%A6%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Cunderbrace%20%E6%97%B6%E5%87%BA%E7%8E%B0%E6%84%8F%E5%A4%96%E7%9A%84%20displaymath.png)
我想使用 $ 分隔符保持数学模式。但是当我使用此代码时:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\begin{document}
$\big(\sum_{j=1}^n\delta_{j,k}x_k\big)_{1\leq k\leq n}
=\big(\underbrace{\sum_{j=1}^n\delta_{j,k}}_{1_A}x_k\big)_{1\leq k\leq n}$
\end{document}
我明白了:
在右侧,看起来好像我在 displaymath 中。为什么?\textstyle
每次使用 时我都应该使用 吗\underbrace
?
答案1
underbrace 在 latex 格式中定义为
\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
$\hfil\displaystyle{#1}\hfil$\crcr
%%%%%%%%%%%%
\noalign{\kern3\p@\nointerlineskip}%
\upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
有一种(并非不合理:-)假设,即这里没有人想要 textstyle。因此,如果您确实想要,则必须按照您在问题中所建议的那样在论证中重新主张这一点。
答案2
因此,既然 David 已经告诉了您为什么会这样,您可以利用这些信息做几件事。您可以通过更改现有定义来创建自己的宏\tunderbrace
,该宏与文本样式的宏类似。\underbrace
\Tunderbrace
或者,只是为了好玩,使用堆栈创建自己的版本:
\documentclass{article}
\usepackage{stackengine, scalerel, graphicx}
\makeatletter
\def\tunderbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
$\hfil\textstyle{#1}\hfil$\crcr
%%%%%%%%%%%%
\noalign{\kern3\p@\nointerlineskip}%
\upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
\makeatother
\newcommand\Tunderbrace[2]{\mathop{\ensurestackMath{%
\def\tmp{#1}%
\setbox0=\hbox{$\tmp$}%
\stackunder[1pt]{%
\stackunder[0pt]{\tmp}{\rotatebox{90}{\scaleto[2ex]{\{}{\wd0}}}%
}{%
\scriptstyle #2%
}%
}}}
\parskip 1em
\begin{document}
$\tunderbrace{\sum_{j=1}^n \delta_{j,k}}_{1_A}x_k$\par
$\Tunderbrace{\sum_{j=1}^n \delta_{j,k}}{1_A}x_k$
\end{document}