From 00b764608b49e935ad539da36471f5bf7b60a949 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 4 Oct 2012 19:49:13 +0000 Subject: new latex package abraces (3sep12) git-svn-id: svn://tug.org/texlive/trunk@27880 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/abraces/abraces.sty | 111 ++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/abraces/abraces.sty (limited to 'Master/texmf-dist/tex/latex/abraces') diff --git a/Master/texmf-dist/tex/latex/abraces/abraces.sty b/Master/texmf-dist/tex/latex/abraces/abraces.sty new file mode 100644 index 00000000000..3c13e82cea5 --- /dev/null +++ b/Master/texmf-dist/tex/latex/abraces/abraces.sty @@ -0,0 +1,111 @@ +\ProvidesPackage{abraces}% http://ctan.org/pkg/abraces + [2012/08/24 v1.0 Arbitrary and asymmetric braces] +\newif\if@overload +\DeclareOption{overload}{\@overloadtrue} +\ProcessOptions +\newsavebox{\bracebox}% stores content contained under/over brace + +\newcommand{\newbracespec}[2]{% Add a new brace specification based on existing ones + \@defbracecharcode{#1}{\@genbrace#2\@nnil\@genbrace} +} +% Brace components +\newcommand{\bracescript}[1]{{% Add a script above/below an over-/underbrace + \let\@@bfil\@@bunfil% Make line leaders into void/empty leaders + \let\@use@rl@se\phantom% Phantomize some brace components + \makebox[\wd\bracebox]{$\genbrace{#1}$}% Place the text in a box of width \bracebox +}} +\def\@@bunfil{\leaders\hbox{\ }\hfill}% Empty filler +\newcommand{\bracefil}[1]{% + \csname brace@char@#1'\endcsname% +} +\def\@@bfil{\leaders \vrule \@height \ht\z@ \@depth \z@ \hfill}% default brace filler +%\def\bfil{\@@bfil}% +%\def\@bLfil{\@@bfil}% left leader filler +%\def\@bRfil{\@@bfil}% right leader filler +\def\aupbracefill#1{$\m@th\setbox\z@\hbox{$\braceld$}\genbrace{#1}$} +\def\adownbracefill#1{$\m@th\setbox\z@\hbox{$\braceld$}\genbrace{#1}$} + +% Repetition structure. Reference: +% Repeat command n times? +% http://tex.stackexchange.com/q/16189/5764 +% Alternatively +% \RequirePackage{expl3}% http://ctan.org/pkg/expl3 +% \ExplSyntaxOn +% \cs_new_eq:NN \Repeat \prg_replicate:nn +% \ExplSyntaxOff + +\newcommand{\Repeat}[1]{% + \expandafter\@Repeat\expandafter{\the\numexpr #1\relax}% +} +\def\@Repeat#1{% + \ifnum#1>0 + \expandafter\@@Repeat\expandafter{\the\numexpr #1-1\expandafter\relax\expandafter}% + \else + \expandafter\@gobble + \fi +} +\def\@@Repeat#1#2{% + \@Repeat{#1}{#2}#2% +} +% Taken from mathtools package (http://ctan.org/pkg/mathtools) +\newcommand{\aunderbrace}[2][l1D1r]{% + \begin{lrbox}{\bracebox}$\displaystyle{#2}$\end{lrbox}% + \mathop{\vtop{\m@th\ialign{##\crcr + $\hfil\displaystyle{#2}\hfil$\crcr + \noalign{\kern.7\fontdimen5\textfont2\nointerlineskip}% + \aupbracefill{#1}\crcr\noalign{\kern.5\fontdimen5\textfont2}}}}\limits} +\newcommand{\aoverbrace}[2][L1U1R]{% + \begin{lrbox}{\bracebox}$\displaystyle{#2}$\end{lrbox}% + \mathop{\vbox{\m@th\ialign{##\crcr + \noalign{\kern.5\fontdimen5\textfont2}% + \adownbracefill{#1}\crcr + \noalign{\kern.7\fontdimen5\textfont2\nointerlineskip}% + $\hfil\displaystyle{#2}\hfil$\crcr}}}\limits} + +% Parsing structure. Reference: +% Parsing a macro argument character-by-character for conditional execution +% http://tex.stackexchange.com/q/33197/5764 + +\let\@use@rl@se\relax +\def\@defbracecharcode#1{% Macro to define brace character "codes" + \@namedef{brace@char@#1}% +} +\@defbracecharcode{L}{\@use@rl@se\braceld\@genbrace}% Left down +\@defbracecharcode{R}{\@use@rl@se\bracerd\@genbrace}% Right down +\@defbracecharcode{l}{\@use@rl@se\bracelu\@genbrace}% Left up +\@defbracecharcode{r}{\@use@rl@se\braceru\@genbrace}% Right up +\@defbracecharcode{U}{\@use@rl@se\braceru\@use@rl@se\bracelu\@genbrace}% Tip up +\@defbracecharcode{D}{\@use@rl@se\bracerd\@use@rl@se\braceld\@genbrace}% Tip down +\@defbracecharcode{0}{\@@bunfil\@genbrace}% Do nothing +\@defbracecharcode{1}{\@@bfil\@genbrace}% 1 filler +\@defbracecharcode{2}{\@@bfil\@@bfil\@genbrace}% 2 fillers +\@defbracecharcode{3}{\@@bfil\@@bfil\@@bfil\@genbrace}% 3 fillers +\@defbracecharcode{4}{\@@bfil\@@bfil\@@bfil\@@bfil\@genbrace}% 4 fillers +\@defbracecharcode{5}{\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@genbrace}% 5 fillers +\@defbracecharcode{6}{\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@genbrace}% 6 fillers +\@defbracecharcode{7}{\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@genbrace}% 7 fillers +\@defbracecharcode{8}{\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@genbrace}% 8 fillers +\@defbracecharcode{9}{\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@@bfil\@genbrace}% 9 fillers +\@defbracecharcode{@}{\@firstofone@go}% Insert arbitrary stuff +\@defbracecharcode{!}{\@firstofone@len}% Insert a leader of specific length +\@defbracecharcode{*}{\@repeat@num@times}% Repeat stuff a number of times + +\newcommand{\@firstofone@go}[1]{#1\@genbrace}% +\newcommand{\@firstofone@len}[1]{\hb@xt@#1{\@@bfil}\@genbrace}% +\newcommand{\@repeat@num@times}[2]{\Repeat{#1}{\@genbrace#2\@nnil}\@genbrace}% + +\newcommand{\@genbrace}[1]{% + \ifx\@nnil#1\relax\else + \@nameuse{brace@char@#1\expandafter}% + \fi% +} +\newcommand{\genbrace}[1]{% + \@genbrace#1\@nnil% +} + +% If package was loaded with \usepackage[overload]{abraces} +\if@overload + \let\overbrace\aoverbrace + \let\underbrace\aunderbrace +\fi +\endinput \ No newline at end of file -- cgit v1.2.3