summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/braids
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-08-26 22:08:04 +0000
committerKarl Berry <karl@freefriends.org>2011-08-26 22:08:04 +0000
commit19102fcd457ba2a564f2e357a331ee95063a565e (patch)
treec2c142fbe2461f7bdd0476c5cc7f04dedbaac668 /Master/texmf-dist/tex/latex/braids
parent94d8eec871be0ca8f1b658e064b3786333b288ef (diff)
new pgf package braids 1.0 (26aug11)
git-svn-id: svn://tug.org/texlive/trunk@23696 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/braids')
-rw-r--r--Master/texmf-dist/tex/latex/braids/braids.sty398
1 files changed, 398 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/braids/braids.sty b/Master/texmf-dist/tex/latex/braids/braids.sty
new file mode 100644
index 00000000000..f7edd15f724
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/braids/braids.sty
@@ -0,0 +1,398 @@
+%%
+%% This is file `braids.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% braids.dtx (with options: `package')
+%% ----------------------------------------------------------------
+%% braids --- a style file for drawing braid diagrams with TikZ/PGF
+%% E-mail: stacey@math.ntnu.no
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{braids}[2011/05/07 v1.0 Tikz/PGF commands for drawing braid diagrams]
+\def\braid@pgfversion{2.10}%
+\ifx\pgfversion\braid@pgfversion
+\else
+\PackageWarning{braids}{This package was designed using PGF2.10; you are using \pgfversion.}%
+\fi
+\long\def\ge@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter\expandafter\expandafter{\expandafter#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup}
+\newcommand{\braid}[1][]{%
+ \begingroup
+ \braid@start{#1}}
+\def\braid@process{%
+ \afterassignment\braid@handle\let\braid@token=%
+}
+\def\braid@process@start{%
+ \afterassignment\braid@handle@start\let\braid@token=%
+}
+\def\braid@handle@start{%
+ \let\braid@next=\braid@handle
+ \ifx\braid@token a
+ \let\braid@next=\braid@maybe@locate
+ \else
+ \ifx\braid@token(%)
+ \iffalse)\fi %Indentation hack!
+ \let\braid@next=\braid@assign@name
+ \else
+ \ifx\braid@token\@sptoken
+ \let\braid@next=\braid@process@start
+ \fi
+ \fi
+ \fi
+ \braid@next%
+}
+\let\braid@semicolon=;
+\let\braid@bar=|
+\def\braid@handle{%
+ \let\braid@next=\braid@process
+ \ifnum\the\catcode`\;=\active
+ \expandafter\let\expandafter\braid@semicolon\tikz@activesemicolon
+ \fi
+ \ifnum\the\catcode`\|=\active
+ \expandafter\let\expandafter\braid@bar\tikz@activebar
+ \fi
+ \ifx\braid@token\braid@semicolon
+ \let\braid@next=\braid@render
+ \else
+ \ifx\braid@token^
+ \let\braid@next=\braid@sup
+ \else
+ \ifx\braid@token_
+ \let\braid@next=\braid@sub
+ \else
+ \ifx\braid@token-
+ \braid@increase@levelfalse
+ \else
+ \ifx\braid@token[
+ \let\braid@next=\braid@process@options
+ \else
+ \ifx\braid@token\braid@bar
+ \edef\braid@tmp{,\expandafter\the\value{braid@level}}%
+ \ge@addto@macro\braid@floors\braid@tmp%
+ \else
+ \ifx\braid@token\bgroup
+ \braid@beginscope
+ \else
+ \ifx\braid@token\egroup
+ \braid@endscope
+ \else
+ \ge@addto@macro\braid@label{\braid@token}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \braid@next%
+}
+\def\braid@maybe@locate{%
+ \afterassignment\braid@@maybe@locate\let\braid@token=%
+}
+\def\braid@@maybe@locate{%
+ \let\braid@next=\braid@handle
+ \ifx\braid@token t
+ \let\braid@next=\braid@find@location
+ \fi
+ \braid@next%
+}
+\def\braid@find@location{%
+ \afterassignment\braid@@find@location\let\braid@token=%
+}
+\def\braid@@find@location{%
+ \let\braid@next=\braid@location@error
+ \ifx\braid@token(%)
+ \let\braid@next=\braid@locate
+ \else
+ \ifx\braid@token\@sptoken
+ \let\braid@next=\braid@find@location
+ \fi
+ \fi
+ \braid@next%
+}
+\def\braid@location@error{%
+ \PackageWarning{braids}{Could not figure out location for braid}%
+ \braid@process@start%
+}
+\def\braid@locate#1){%
+ \tikz@scan@one@point\braid@relocate(#1)%
+}
+\def\braid@relocate#1{%
+ #1\relax
+ \advance\pgf@x by -\braid@width
+ \pgftransformshift{\pgfqpoint{\pgf@x}{\pgf@y}}
+ \braid@process@start%
+}
+\def\braid@assign@name#1){%
+ \def\braid@name{#1}%
+ \braid@process@start%
+}
+\def\braid@process@options#1]{%
+ \tikzset{#1}%
+ \braid@process%
+}
+\def\braid@sup#1_#2{\g@addto@macro\braid@label{_{#2}^{#1}}\braid@add@crossing{#2}{#1}}
+\def\braid@sub#1{\@ifnextchar^{\braid@@sub{#1}}{\g@addto@macro\braid@label{_{#1}}\braid@add@crossing{#1}{1}}}
+\def\braid@@sub#1^#2{\g@addto@macro\braid@label{_{#1}^{#2}}\braid@add@crossing{#1}{#2}}
+\def\braid@ne{1}
+\def\braid@add@crossing#1#2{%
+ \edef\braid@crossing@type{#2}%
+ \edef\braid@this@strand{#1}%
+ \pgfmathtruncatemacro{\braid@next@strand}{#1+1}
+ \ifbraid@increase@level
+ \stepcounter{braid@level}
+ \fi
+ \braid@increase@leveltrue
+ \braid@tx=\braid@this@strand\braid@width
+ \braid@ty=\value{braid@level}\braid@height
+ \advance\braid@ty by \braid@eh
+ \braid@nx=\braid@tx
+ \braid@ny=\braid@ty
+ \advance\braid@nx by \braid@width
+ \advance\braid@ny by \braid@height
+ \braid@cy=\braid@ty
+ \braid@dy=\braid@ny
+ \advance\braid@cy by .5\braid@height
+ \advance\braid@dy by -.5\braid@height
+ \advance\braid@ty by .05\braid@height
+ \advance\braid@ny by -.05\braid@height
+ \expandafter\let\expandafter\braid@this@path@origin\csname braid@strand@\braid@this@strand @origin\endcsname
+\ifx\braid@this@path@origin\relax
+ \let\braid@this@path@origin\braid@this@strand
+ \pgfsyssoftpath@setcurrentpath{\@empty}
+ \pgfpathmoveto{\pgfpoint{\braid@tx}{0pt}}
+ \pgfsyssoftpath@getcurrentpath{\braid@this@path}
+ \else
+ \expandafter\let\expandafter\braid@this@path\csname braid@strand@\braid@this@path@origin\endcsname
+ \fi
+ \expandafter\let\expandafter\braid@next@path@origin\csname braid@strand@\braid@next@strand @origin\endcsname
+ \ifx\braid@next@path@origin\relax
+ \let\braid@next@path@origin\braid@next@strand
+ \pgfsyssoftpath@setcurrentpath{\@empty}
+ \pgfpathmoveto{\pgfpoint{\braid@nx}{0pt}}
+ \pgfsyssoftpath@getcurrentpath{\braid@next@path}
+ \else
+ \expandafter\let\expandafter\braid@next@path\csname braid@strand@\braid@next@path@origin\endcsname
+ \fi
+ \pgfsyssoftpath@setcurrentpath{\braid@this@path}
+ \pgfpathlineto{\pgfqpoint{\braid@tx}{\braid@ty}}
+\ifx\braid@crossing@type\braid@over@cross
+\pgfpathcurveto{\pgfqpoint{\braid@tx}{\braid@cy}}{\pgfqpoint{\braid@nx}{\braid@dy}}{\pgfqpoint{\braid@nx}{\braid@ny}}
+\else
+\pgfpathcurvebetweentimecontinue{0}{.4}{\pgfqpoint{\braid@tx}{\braid@ty}}{\pgfqpoint{\braid@tx}{\braid@cy}}{\pgfqpoint{\braid@nx}{\braid@dy}}{\pgfqpoint{\braid@nx}{\braid@ny}}
+\pgfpathcurvebetweentime{.6}{1}{\pgfqpoint{\braid@tx}{\braid@ty}}{\pgfqpoint{\braid@tx}{\braid@cy}}{\pgfqpoint{\braid@nx}{\braid@dy}}{\pgfqpoint{\braid@nx}{\braid@ny}}
+\fi
+ \pgfsyssoftpath@getcurrentpath{\braid@this@path}
+ \pgfsyssoftpath@setcurrentpath{\braid@next@path}
+ \pgfpathlineto{\pgfqpoint{\braid@nx}{\braid@ty}}
+\ifx\braid@crossing@type\braid@over@cross
+\pgfpathcurvebetweentimecontinue{0}{.4}{\pgfqpoint{\braid@nx}{\braid@ty}}{\pgfqpoint{\braid@nx}{\braid@cy}}{\pgfqpoint{\braid@tx}{\braid@dy}}{\pgfqpoint{\braid@tx}{\braid@ny}}
+\pgfpathcurvebetweentime{.6}{1}{\pgfqpoint{\braid@nx}{\braid@ty}}{\pgfqpoint{\braid@nx}{\braid@cy}}{\pgfqpoint{\braid@tx}{\braid@dy}}{\pgfqpoint{\braid@tx}{\braid@ny}}
+\else
+ \pgfpathcurveto{\pgfqpoint{\braid@nx}{\braid@cy}}{\pgfqpoint{\braid@tx}{\braid@dy}}{\pgfqpoint{\braid@tx}{\braid@ny}}
+\fi
+ \pgfsyssoftpath@getcurrentpath{\braid@next@path}
+ \expandafter\let\csname braid@strand@\braid@this@path@origin \endcsname\braid@this@path
+ \expandafter\let\csname braid@strand@\braid@next@path@origin \endcsname\braid@next@path
+ \expandafter\let\csname braid@strand@\braid@this@strand @origin\endcsname\braid@next@path@origin
+ \expandafter\let\csname braid@strand@\braid@next@strand @origin\endcsname\braid@this@path@origin
+ \pgfmathparse{\value{braid@strands} < \braid@next@strand ? "\noexpand\setcounter{braid@strands}{\braid@next@strand}" : ""}
+ \pgfmathresult
+ \braid@process%
+}
+\def\braid@floors@trim,{}
+\def\braid@render@floor{%
+ \draw (\floorsx,\floorsy) rectangle (\floorex,\floorey);
+}
+\def\braid@render{
+ \ifx\braid@floors\@empty
+ \else
+ \pgfsys@beginscope
+ \pgfsyssoftpath@setcurrentpath{\empty}
+ \edef\braid@floors{\expandafter\braid@floors@trim\braid@floors}
+ \braid@tx=\braid@width
+ \advance\braid@tx by \braid@eh
+ \braid@nx=\value{braid@strands}\braid@width
+ \advance\braid@nx by -\braid@eh
+ \foreach \braid@f in \braid@floors {
+ \pgfsys@beginscope
+ \braid@ty=\braid@f\braid@height
+ \advance\braid@ty by \braid@eh
+ \advance\braid@ty by \braid@height
+ \braid@ny=\braid@ty
+ \advance\braid@ny by \braid@height
+ \edef\floorsx{\the\braid@tx}
+ \edef\floorsy{\the\braid@ty}
+ \edef\floorex{\the\braid@nx}
+ \edef\floorey{\the\braid@ny}
+ \let\tikz@options=\pgfutil@empty
+ \expandafter\tikzset\expandafter{\braid@floors@style}
+ \pgfmathtruncatemacro{\braid@ff}{\braid@f+2}
+ \expandafter\let\expandafter\braid@floor@style\csname braid@options@floor@\braid@ff\endcsname
+ \ifx\braid@floor@style\relax
+ \else
+ \expandafter\tikzset\expandafter{\braid@floor@style}%
+ \fi
+\tikz@options
+\braid@render@floor
+\pgfsys@endscope
+ }
+ \pgfsys@endscope
+ \fi
+ \stepcounter{braid@level}
+ \foreach \braid@k in {1,...,\value{braid@strands}} {
+ \pgfsys@beginscope
+ \tikz@mode@drawtrue%
+ \let\tikz@mode=\pgfutil@empty
+ \let\tikz@options=\pgfutil@empty
+ \braid@tx=\braid@k\braid@width
+ \braid@ty=\value{braid@level}\braid@height
+ \advance\braid@ty by 2\braid@eh
+ \expandafter\let\expandafter\braid@path@origin\csname braid@strand@\braid@k @origin\endcsname
+ \ifx\braid@path@origin\relax
+ \pgfsyssoftpath@setcurrentpath{\@empty}
+ \pgfpathmoveto{\pgfqpoint{\braid@tx}{0pt}}
+ \let\braid@path@origin\braid@k
+ \else
+ \expandafter\let\expandafter\braid@path\csname braid@strand@\braid@path@origin\endcsname
+ \pgfsyssoftpath@setcurrentpath{\braid@path}
+ \fi
+ \pgflineto{\pgfqpoint{\braid@tx}{\braid@ty}}
+ \expandafter\tikzset\expandafter{\braid@style}
+ \expandafter\let\expandafter\braid@style\csname braid@options@strand@\braid@path@origin\endcsname
+ \ifx\braid@style\relax
+ \else
+ \expandafter\tikzset\expandafter{\braid@style}
+ \fi
+\braid@options
+ \tikz@mode
+ \tikz@options
+ \edef\tikz@temp{\noexpand\pgfusepath{%
+ \iftikz@mode@draw draw\fi%
+ }}%
+ \tikz@temp
+\ifx\braid@name\pgfutil@empty
+\else
+\coordinate (\braid@name-\braid@path@origin-e) at (\braid@tx,\braid@ty);
+\coordinate (\braid@name-rev-\braid@k-e) at (\braid@tx,\braid@ty);
+\braid@nx=\braid@path@origin\braid@width
+\coordinate (\braid@name-\braid@path@origin-s) at (\braid@nx,0pt);
+\coordinate (\braid@name-rev-\braid@k-s) at (\braid@nx,0pt);
+\fi
+ \pgfsys@endscope
+ }
+ \ifx\braid@name\pgfutil@empty
+ \else
+ \braid@tx=\value{braid@strands}\braid@width
+ \braid@ty=\value{braid@level}\braid@height
+ \advance\braid@ty by 2\braid@eh
+ \advance\braid@tx by \braid@width
+ \braid@tx=.5\braid@tx
+ \braid@ty=.5\braid@ty
+ \coordinate (\braid@name) at (\braid@tx,\braid@ty);
+ \fi
+ \pgfsys@endscope
+ \endgroup}
+\def\braid@start#1{%
+ \pgfsys@beginscope
+ \setcounter{braid@level}{-1}%
+ \let\braid@label\@empty
+ \let\braid@floors\@empty
+ \let\braid@name\empty
+ \pgfkeys{/pgf/braid/.cd,#1}
+ \let\braid@options\tikz@options
+ \tikz@transform
+ \setcounter{braid@strands}{\pgfkeysvalueof{/pgf/braid/number of strands}}%
+ \braid@width=\pgfkeysvalueof{/pgf/braid/width}
+ \braid@height=\pgfkeysvalueof{/pgf/braid/height}
+ \braid@eh=\pgfkeysvalueof{/pgf/braid/border height}
+ \braid@height=-\braid@height
+ \braid@eh=-\braid@eh
+ \braid@increase@leveltrue
+ \braid@process@start
+}
+\newdimen\braid@width
+\newdimen\braid@height
+\newdimen\braid@tx
+\newdimen\braid@ty
+\newdimen\braid@nx
+\newdimen\braid@ny
+\newdimen\braid@cy
+\newdimen\braid@dy
+\newdimen\braid@eh
+\newif\ifbraid@increase@level
+\let\braid@style\pgfutil@empty
+\let\braid@floors@style\pgfutil@empty
+\def\braid@over@cross{1}
+\newcounter{braid@level}
+\newcounter{braid@strands}
+\pgfkeys{
+ /tikz/braid/.search also={/pgf},
+ /pgf/braid/.search also={/pgf,/tikz},
+ /pgf/braid/.cd,
+ number of strands/.initial=0,
+ height/.initial=1cm,
+ width/.initial=1cm,
+ border height/.initial=.25cm,
+ name/.code={%
+ \def\braid@name{#1}%
+ },
+ at/.code={%
+ \braid@relocate{#1}%
+ },
+ floor command/.code={%
+ \def\braid@render@floor{#1}%
+ },
+ style strands/.code 2 args={%
+ \def\braid@temp{#2}%
+ \braidset{style each strand/.list={#1}}%
+ },
+ style each strand/.code={%
+ \expandafter\edef\csname braid@options@strand@#1\endcsname{\braid@temp}%
+ },
+ style floors/.code 2 args={%
+ \def\braid@temp{#2}%
+ \braidset{style each floor/.list={#1}}%
+ },
+ style each floor/.code={%
+ \expandafter\edef\csname braid@options@floor@#1\endcsname{\braid@temp}%
+ },
+ style all floors/.code={%
+ \def\braid@floors@style{#1}
+ }
+}
+\def\braidset#1{%
+ \pgfkeys{/pgf/braid/.cd,#1}}
+
+%%
+%% Copyright (C) 2011 by Andrew Stacey <stacey@math.ntnu.no>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Andrew Stacey.
+%%
+%% This work consists of the files braids.dtx
+%% braids_doc.tex
+%% and the derived files README.txt,
+%% braids.ins,
+%% braids.pdf,
+%% braids.sty,
+%% braids_doc.pdf.
+%%
+%%
+%% End of file `braids.sty'.