Esta questão levou a um novo pacote:
abraces
Como posso controlar a posição da ponta de um overbrace?
por exemplo, eu quero:
/------^----------------------\
aksdj ajksdnkajs ajsdknakjsnd jaknd
Ao contrário de:
/--------------^--------------\
aksdj ajksdnkajs ajsdknakjsnd jaknd
Responder1
\overbrace
e \underbrace
são construídos em 5 partes:
- extremidade esquerda;
- (esquerda) régua horizontal;
- ponta (para cima/para baixo);
- (direita) régua horizontal;
- extremidade direita.
Como ambas as regras horizontais são líderes, é bastante fácil modificá-las usando uma abordagem “compartilhada”. Ou seja, você pode alterar a participação do líder esquerdo em comparação com o direito, movendo assim a ponta para a esquerda ou para a direita. Por exemplo, compartilhar o líder esquerdo/direito em uma proporção de 1:2 colocaria a ponta em 1/3 da entrada, enquanto uma proporção de 3:2 colocaria a ponta em 60% da entrada. Proporção /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>}
define a proporção entre as partes esquerda e direita das chaves, enquanto \resetbraceratio
restaura o padrão (ou 1:1).
O problema com esta abordagem é que o centro horizontal pode ser diferente do local onde está a ponta. Como tal, adicionar texto como sobrescrito/subscrito teria que ser movido para a posição apropriada. Seria possível estender esta solução para trabalhar com comprimentos em vez de proporções. No entanto, isso exigiria alguns testes para garantir que você não excedesse a largura da caixa - as proporções cuidam disso naturalmente.
Oabraces
pacoteagora fornece uma interface baseada em chave de caractere para criação de chaves. Alguns exemplos dodocumentação:
A construção de chaves é baseada em combinações de caracteres:
Responder2
Outra opção é usar o infame \tikzmark
, e usar uma decoração de suporte com o aspect=<percent>
para controlar a localização do espigão. Aqui está uma versão adaptada deChave para inserir algo em uma equação? Como um suporte invertidoo que lhe dá toda a flexibilidade inerente de tikz
:
Os parâmetros passados \InsertUnderBrace
são:
[#1]
opções de desenho tikz,[#2]
opções de chaves tikz,{#3}
nome da esquerda\tikzmark
,{#4}
nome do direito\tikzmark
,{#5}
texto a ser colocado sob a chave.
Notas:
- Isso requer duas execuções. O primeiro para determinar os locais e o segundo para fazer o desenho.
Referências:
- A cinta é adaptada deadicionando uma chave grande ao lado de um corpo de texto.
Código:
\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}