这个问题导致了一个新的方案的出现:
abraces
我如何控制过度支撑的尖钉的位置?
例如我想要:
/------^----------------------\
愛克斯迪克
相反的是:
/--------------^--------------\
愛克斯迪克
答案1
\overbrace
\underbrace
由 5 个部分组成:
- 左端;
- (左)水平线;
- 提示(向上/向下);
- (右)水平线;
- 右端。
由于两条水平线都是引线,因此使用“共享”方法很容易修改它们。也就是说,您可以更改左引线相对于右引线的份额,从而将尖端向左或向右移动。例如,以 1:2 的比例共享左/右引线将使尖端进入 1/3 的位置,而 3:2 的比例将使尖端进入 60%。默认为居中/1:1 的比例。
\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{multido}% http://ctan.org/pkg/multido
\makeatletter
\def\@@bfil{\leaders \vrule \@height \ht\z@ \@depth \z@ \hfill}% default brace filler
\def\@bLfil{\@@bfil}% left leader filler
\def\@bRfil{\@@bfil}% right leader filler
\def\resetbraceratio{\gdef\@bLfil{\@@bfil}\gdef\@bRfil{\@@bfil}}% reset to default braces
\def\setbraceratio#1#2{% \setbraceratio{<left>}{<right>}
\let\@bLfil\relax% clear left filler
\multido{\iA=1+1}{#1}{\gappto\@bLfil{\@@bfil}}% increase left ratio
\let\@bRfil\relax% clear right filler
\multido{\iA=1+1}{#2}{\gappto\@bRfil{\@@bfil}}% increase right ratio
}
\def\upbracefill{$\m@th\setbox\z@\hbox{$\braceld$}\bracelu\@bLfil\bracerd\braceld\@bRfil\braceru$}
\def\downbracefill{$\m@th\setbox\z@\hbox{$\braceld$}\braceld\@bLfil\braceru\bracelu\@bRfil\bracerd$}
\makeatother
\begin{document}
\setbraceratio{3}{1}% 3:1 ratio
$\underbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
\setbraceratio{1}{5}% 1:5 ratio
$\underbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
\setbraceratio{7}{2}% 7:2 ratio
$\overbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
\end{document}
\setbraceratio{<left>}{<right>}
设置大括号左右部分的比例,\resetbraceratio
恢复默认(或 1:1)。
这种方法的问题是水平中心可能与尖端的位置不同。因此,添加上标/下标文本必须移动到适当的位置。可以扩展此解决方案以使用长度而不是比率。但是,这需要进行一些测试以确保您不超过框宽度 - 比率自然会解决这个问题。
这abraces
包裹现在提供了一个字符键驱动的接口来创建括号。以下是一些示例文档:
括号构造基于字符组合:
答案2
另一个选择是使用臭名昭著的\tikzmark
,并使用带有的括号装饰来aspect=<percent>
控制尖峰的位置。以下是改编自的版本花括号用于在等式中插入内容?例如倒置的下括号它为您提供了所有固有的灵活性tikz
:
传递给的参数\InsertUnderBrace
为:
[#1]
tikz 绘图选项,[#2]
tikz 括号选项,{#3}
左边的名字\tikzmark
,{#4}
权利名称\tikzmark
,{#5}
放置在括号下方的文本。
笔记:
- 这确实需要两次运行。第一次确定位置,第二次进行绘图。
参考:
- 该支架改编自在正文旁边添加一个大括号。
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\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*{\BraceAspect}{0.5}%
\newcommand*{\VerticalOffset}{0.4ex}%
\newcommand*{\HorizontalOffset}{0.0em}%
\NewDocumentCommand{\InsertUnderBrace}{%
O{} % #1 = draw options
O{} % #2 = optional brace options
m % #3 = left tikzmark
m % #4 = right tikzmark
m % #5 = text to place underbrace
}{%
\begin{tikzpicture}[overlay,remember picture]
\draw [decoration={brace, amplitude=\BraceAmplitude, aspect=\BraceAspect, #2}, decorate, thick, draw=blue, text=black, #1]
($(#4)+(\HorizontalOffset,-\VerticalOffset)$) --
($(#3)+(-\HorizontalOffset,-\VerticalOffset)$)
node [below=\VerticalOffset, midway] {#5};
\end{tikzpicture}%
}%
\begin{document}
\[
\tikzmark{StartBraceA} \sin^2 \alpha + \cos^2 \theta \tikzmark{EndBraceA}
\qquad
\tikzmark{StartBraceB} \sin^2 \alpha + \cos^2 \theta \tikzmark{EndBraceB}
\qquad
\tikzmark{StartBraceC} \sin^2 \alpha + \cos^2 \theta \tikzmark{EndBraceC}
\]
\InsertUnderBrace[draw=red,text=blue]{StartBraceA}{EndBraceA}{default}
\InsertUnderBrace[draw=violet,text=blue][aspect=0.25]{StartBraceB}{EndBraceB}{$\mathrm{aspect} = 0.25$}
\InsertUnderBrace[draw=brown,text=blue, densely dotted][aspect=0.75]{StartBraceC}{EndBraceC}{$\mathrm{aspect} = 0.75$}
\end{document}