この質問から新しいパッケージが生まれました:
abraces
オーバーブレースのスパイクの位置を制御するにはどうすればいいですか?
例えば、私は以下を望んでいます:
/------^----------------------\
aksdj ajksdnkajs ajsdknakjsnd jaknd
とは対照的に:
/--------------^--------------\
aksdj ajksdnkajs ajsdknakjsnd jaknd
答え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}
中括弧の下に配置するテキスト。
ノート:
- これには 2 回の実行が必要です。1 回目は場所を決定するため、2 回目は描画を行うためです。
参考文献:
- ブレースは本文の横に大きな中括弧を追加する。
コード:
\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}