不對稱過度支撐

不對稱過度支撐

這個問題導致了一個新的包:
abraces

如何控制上支架尖刺的位置?

例如我想要:

/------^----------------------\

aksdj ajksdnkajs ajsdknakjsnd jaknd

相對於:

/----------^--------------\

aksdj ajksdnkajs ajsdknakjsnd jaknd

答案1

\overbrace\underbrace由 5 個部分組成:

  1. 左端;
  2. (左)水平尺;
  3. 尖端(上/下);
  4. (右)水平尺;
  5. 右端。

由於兩條水平規則都是領導者,因此使用「共享」方法很容易修改它們。也就是說,您可以變更左側引線相對於右側引線的份額,從而向左或向右移動尖端。例如,以 1:2 的比例共享左/右引線將使尖端進入 1/3,而 3:2 的比例將使尖端進入 60%。

在此輸入影像描述

\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

另一個選擇是使用 inknown \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}

相關內容