Diese Frage führte zu einem neuen Paket:
abraces
Wie kann ich die Position des Dorns einer Überstrebe steuern?
zB ich will:
/------^----------------------\
aksdj ajksdnkajs ajsdknakjsnd jaknd
Im Gegensatz zu:
/--------------^--------------\
aksdj ajksdnkajs ajsdknakjsnd jaknd
Antwort1
\overbrace
und \underbrace
bestehen aus 5 Teilen:
- linkes Ende;
- (links) horizontale Linie;
- Tipp (hoch/runter);
- (rechts) horizontale Linie;
- rechtes Ende.
Da beide horizontalen Linien Führungslinien sind, ist es einfach genug, sie mit einem „geteilten“ Ansatz zu ändern. Das heißt, Sie können den Anteil der linken Führungslinie im Vergleich zur rechten ändern und dadurch die Spitze nach links oder rechts verschieben. Wenn Sie beispielsweise die linke/rechte Führungslinie im Verhältnis 1:2 teilen, würde die Spitze 1/3 des Wegs hineinliegen, während sie bei einem Verhältnis von 3:2 60 % des Wegs hineinliegen würde. Die Standardeinstellung wäre ein zentriertes Verhältnis von 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>}
Legt das Verhältnis zwischen dem linken und rechten Teil der Klammern fest und \resetbraceratio
stellt den Standardwert (oder 1:1) wieder her.
Das Problem bei diesem Ansatz ist, dass die horizontale Mitte von der Position der Spitze abweichen kann. Daher müsste der hinzugefügte Text als Hoch-/Tiefstellung an die entsprechende Position verschoben werden. Es wäre möglich, diese Lösung so zu erweitern, dass sie mit Längen statt mit Verhältniswerten arbeitet. Dies würde jedoch einige Tests erfordern, um sicherzustellen, dass Sie die Breite des Felds nicht überschreiten – die Verhältniswerte kümmern sich auf natürliche Weise darum.
Derabraces
Paketbietet jetzt eine zeichentastengesteuerte Schnittstelle zur Klammernerstellung. Einige Beispiele aus demDokumentation:
Die Klammernkonstruktion basiert auf Zeichenkombinationen:
Antwort2
Eine andere Möglichkeit besteht darin, das berüchtigte zu verwenden \tikzmark
und eine Klammerdekoration mit dem zu verwenden, aspect=<percent>
um die Position des Spikes zu steuern. Hier ist eine Version, die von angepasst wurdeGeschweifte Klammer, um etwas in eine Gleichung einzufügen? Wie eine umgekehrte UnterklammerDas bietet Ihnen die gesamte Flexibilität von tikz
:
Die übergebenen Parameter \InsertUnderBrace
sind:
[#1]
Tikz-Zeichenoptionen,[#2]
Tikz-Klammeroptionen,{#3}
Name von links\tikzmark
,{#4}
Name des Rechts\tikzmark
,{#5}
Text, der unter der Klammer platziert werden soll.
Anmerkungen:
- Hierzu sind zwei Durchgänge erforderlich. Zunächst zum Bestimmen der Standorte und dann zum Anfertigen der Zeichnung.
Verweise:
- Die Zahnspange ist angepasst vonHinzufügen einer großen Klammer neben einem Textkörper.
Code:
\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}