이 질문으로 인해 새로운 패키지가 탄생했습니다.
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}
중괄호 아래에 배치할 텍스트입니다.
노트:
- 이를 위해서는 두 번의 실행이 필요합니다. 첫 번째는 위치를 결정하고 두 번째는 도면을 작성합니다.
참고자료:
- 버팀대는 다음에서 조정됩니다.텍스트 본문 옆에 큰 중괄호 추가.
암호:
\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}