灵感来自这个问题在数学 StackExchange 上,假设你想排版数字 144...4 的平方根,即 1 后面跟着n4。如果你写$\sqrt{1\underbrace{44\ldots4}_{n\ \text{times}}}$
,就像当前版本的题目一样,你会得到一个巨大的激进分子符号,它向下延伸以匹配“n次”文本位于数字下方。有没有一种优雅的方式来排版这个,以便根号看起来像是$\sqrt{144\ldots4}$
,但同时保持下划线的文本在正确的位置?
答案1
我建议如下:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\sqrt{\smash[b]{1\! \underbrace{44\cdots4\,}_\text{$n$ times}}}$
\end{document}
请注意,将其放在宏$n$ times
中在语法上更清晰\text
。\smash[b]
命令会“隐藏”基线以下的内容,使其不出现在 TeX 中,从而不是使平方根符号的下端向下倾斜太远。该\!
指令删除了下括号左端插入的不必要的空格,同时\,
避免了下括号右端与最后的 发生冲突。最后,我意识到有些人会不同意我的观点,我认为在这种情况下4
最好使用\cdots
而不是。\ldots
附录:此 MWE 旨在生成单个公式的图像,其中平方根符号的“根”不会不必要地向下延伸。如果此公式是一些较长文本的一部分,则会立即出现问题:以下一行文本和数学 - 并且,根据下括号内容的深度,甚至下一行 - 都会直接覆盖下括号材料。正如 @egreg 在他的评论中指出的那样,正如 @Werner 在他的回答中所展示的那样,为了防止这种情况发生,应该将公式扩充为包含\vphantom
外部平方根的深度与公式\smash
未使用时完全相同。例如,可以按如下方式完成:
$\vphantom{\underbrace{4}_{n}} \sqrt{\smash[b]{1\! \underbrace{44\cdots4\,}_\text{$n$ times}}}$
答案2
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\[
\sqrt{144\ldots4\smash{\llap{$\underbrace{\phantom{44\ldots4}}_{\text{$n$ times}}$}}}
\vphantom{1\underbrace{44\ldots4}_{\text{$n$ times}}}
\]
\end{document}
“整个”数字都排版好了,后面跟着一个ed的l
eft 。额外的(几乎重复的)是为了确保表达式的垂直高度与可见的高度相匹配,否则下括号可能会延伸到其下方的文本中。lap
\smash
\vphantom
amsmath
提供\text
。
答案3
使用臭名昭著的标准过度 TikZ 解决方案\tikzmark
非常适合此类情况:
笔记:
- 这确实需要两次运行。第一次确定位置,第二次进行绘图。
参考:
- 这是在对表格列使用 \underbrace, 和在 amsmath 对齐环境中过度支撑。
- 该支架改编自在正文旁边添加一个大括号
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathreplacing}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
% Tweak these as necessary
\newcommand*{\BraceAmplitude}{0.4em}%
\newcommand*{\VerticalOffset}{0.4ex}%
\newcommand*{\HorizontalOffset}{0.0em}%
\newcommand*{\SquareBraceVOffset}{-0.4ex}%
\newcommand*{\InsertUnderBrace}[4][]{%
\begin{tikzpicture}[overlay,remember picture]
\draw [decoration={brace,amplitude=\BraceAmplitude},decorate, thick,draw=blue,text=black,#1]
($(#3)+(\HorizontalOffset,-\VerticalOffset)$) --
($(#2)+(-\HorizontalOffset,-\VerticalOffset)$)
node [below=\VerticalOffset, midway] {#4};
\end{tikzpicture}%
}%
\newcommand*{\InsertUnderSquareBrace}[4][]{%
\begin{tikzpicture}[overlay,remember picture]
\draw [text=black,line width=0.7pt, #1]
($(#3)+(0,\VerticalOffset+\SquareBraceVOffset)$) --
($(#3)+(\HorizontalOffset,-\VerticalOffset+\SquareBraceVOffset)$) --
($(#2)+(-\HorizontalOffset,-\VerticalOffset+\SquareBraceVOffset)$)
node [below, midway] {#4} --
($(#2)+(0,\VerticalOffset+\SquareBraceVOffset)$);
\end{tikzpicture}%
}%
\begin{document}
\[
\sqrt{1\tikzmark{StartBraceA}44\cdots4\tikzmark{EndBraceA}\,}
\quad
\sqrt{1\tikzmark{StartBraceB}44\cdots4\tikzmark{EndBraceB}\,}
\]
\InsertUnderBrace[draw=red,text=blue]{StartBraceA}{EndBraceA}{$n$ times}
\InsertUnderSquareBrace[draw=red,text=blue]{StartBraceB}{EndBraceB}{$n$ times}
\end{document}
答案4
答案很棒,但这次我忍不住要写一个答案,尽管已经有 4 个答案了。我有点着迷的细节是当参数很短时,下括号和它们的粗体外观。感谢mathtools
包这个问题在很大程度上得到了解决,而且你也可以使用侵入性更低的\underbracket
。以下是两个例子:
\documentclass{article}
\usepackage{amsmath,mathtools}
\begin{document}
\[\sqrt{\smash[b]{1\kern-2pt\underbracket[0.5pt][1pt]{4\cdots 44}_\text{$n$ many}}}\]
\[\sqrt{\smash[b]{1\kern-2pt\underbrace{4\cdots 44}_\text{$n$ many}}}\]
\end{document}
请注意,支撑臂的呈现方式很平滑,而不是相当粗糙的连接。