From b2e97cd1b691e067fe3a30311a099576cf31257e Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 12 Dec 2013 22:54:58 +0000
Subject: rulercompass (12dec13)

git-svn-id: svn://tug.org/texlive/trunk@32392 c570f23f-e606-0410-a88d-b1316a301751
---
 .../rulercompass/tikzlibraryrulercompass.code.tex  | 495 +++++++++++++++++++++
 1 file changed, 495 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/rulercompass/tikzlibraryrulercompass.code.tex

(limited to 'Master/texmf-dist/tex/latex/rulercompass/tikzlibraryrulercompass.code.tex')

diff --git a/Master/texmf-dist/tex/latex/rulercompass/tikzlibraryrulercompass.code.tex b/Master/texmf-dist/tex/latex/rulercompass/tikzlibraryrulercompass.code.tex
new file mode 100644
index 00000000000..76cda67eb09
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/rulercompass/tikzlibraryrulercompass.code.tex
@@ -0,0 +1,495 @@
+%%
+%% This is file `tikzlibraryrulercompass.code.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% rulercompass.dtx  (with options: `tikzlibrary')
+%% ---------------------------------------------------------------
+%% rulercompass --- a TikZ/PGF library for drawing straight-edge
+%%                  and compass diagrams
+%% E-mail: stacey@math.ntnu.no
+%% Released under the LaTeX Project Public Licence v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ---------------------------------------------------------------
+%% 
+\usetikzlibrary{intersections,calc}
+\newif\ifrc@draft
+\newif\ifrc@beamer
+\newif\ifrc@fliparc
+\newcount\rc@picture@id
+\newcounter{pointlabels}
+\@ifclassloaded{beamer}{%
+  \rc@beamertrue
+}{}
+\def\rc@pathsep{@}
+\ifrc@beamer
+\resetcounteronoverlays{pointlabels}
+\resetcountonoverlays{rc@picture@id}
+\tikzset{
+  alt if exist/.code args={#1#2#3}{%
+    \@ifundefined{path@\the\rc@picture@id @#1}{%
+      \pgfkeysalso{#2}%
+    }{
+      \alt<.-\csname path@\the\rc@picture@id @#1\endcsname>{%
+        \pgfkeysalso{#2}%
+      }{
+        \pgfkeysalso{#3}%
+      }%
+    }%
+  },
+  intersection/save/.code={%
+    \only<.>{%
+      \begingroup
+      \tikz@intersect@path@names@parse#1\tikz@stop
+      \protected@write\pgfutil@auxout{}{%
+        \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@a}{\the\beamer@slideinframe}%
+        \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@b}{\the\beamer@slideinframe}%
+      }%
+    \endgroup
+    }%
+  }
+}
+\newcommand<>\compass[3][]{%
+  \draw#4[#1,ruler compass/compass={#2}{#3}];
+}
+
+\newcommand<>\ruler[3][]{%
+  \draw#4[#1,ruler compass/ruler={#2}{#3}];
+}
+\newcommand<>\point[4][]{%
+  {%
+    \advance\c@pointlabels by 1\relax
+    \xdef\rc@temp{\thepointlabels}%
+  }%
+  \edef\rc@tempa{\the\rc@picture@id}%
+  \expandafter\ifx\csname rc@id@\rc@temp\endcsname\rc@tempa
+    \path#5 (\rc@temp) node[ruler compass/point,#1] {};
+  \else
+    \path#5 [name intersections={use=#2 and #3}] (intersection-#4) node[ruler compass/point,#1] {};
+  \fi
+}
+\else
+\tikzset{
+  alt if exist/.code args={#1#2#3}{%
+    \pgfkeysalso{#2}%
+  },
+  intersection/save/.code={%
+    \begingroup
+    \tikz@intersect@path@names@parse#1\tikz@stop
+    \protected@write\pgfutil@auxout{}{%
+        \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@a}{\thepage}%
+        \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@b}{\thepage}%
+    }%
+    \endgroup
+  }
+}
+\newcommand\compass[3][]{%
+  \draw [#1,ruler compass/compass={#2}{#3}];
+}
+
+\newcommand\ruler[3][]{%
+  \draw [#1,ruler compass/ruler={#2}{#3}];
+}
+
+\newcommand\point[4][]{%
+  \path [name intersections={use=#2 and #3}] (intersection-#4) node[ruler compass/point,#1] {};
+}
+\fi
+\def\rc@processpt#1{%
+  \pgfutil@ifnextchar.{\rc@processpt@@#1}{\rc@processpt@#1}}
+\def\rc@processpt@#1#2\pgf@stop{%
+  \pgfutil@in@+{#2}%
+  \ifpgfutil@in@
+   \let\@next=\rc@processpt@plus
+  \else
+   \pgfutil@in@-{#2}%
+   \ifpgfutil@in@
+    \let\@next=\rc@processpt@minus
+   \else
+    \let\@next=\rc@processpt@bare
+   \fi
+  \fi
+  \@next#1#2\pgf@stop
+}
+\def\rc@processpt@@#1.#2\pgf@stop{%
+  \def\rc@temp{#2}%
+  \ifx\rc@temp\pgfutil@empty
+  \edef\rc@temp{\thepointlabels}%
+  \else
+  \pgfmathparse{int(\the\c@pointlabels + #2)}%
+  \begingroup
+  \c@pointlabels=\pgfmathresult\relax
+  \xdef\rc@temp{\thepointlabels}%
+  \endgroup
+  \fi
+  \let#1\rc@temp
+}
+\def\rc@processpt@plus#1#2+#3\pgf@stop{%
+  \pgfmathsetmacro\rc@temp{0}%
+  \rc@reverse#2\pgf@stop%
+  \pgfmathparse{int(\rc@temp + #3)}%
+  \begingroup
+  \c@pointlabels=\pgfmathresult\relax
+  \xdef\rc@temp{\thepointlabels}%
+  \endgroup
+  \let#1\rc@temp
+}
+\def\rc@processpt@minus#1#2-#3\pgf@stop{%
+  \pgfmathsetmacro\rc@temp{0}%
+  \rc@reverse#2\pgf@stop%
+  \pgfmathparse{int(\rc@temp - #3)}%
+  \begingroup
+  \c@pointlabels=\pgfmathresult\relax
+  \xdef\rc@temp{\thepointlabels}%
+  \endgroup
+  \let#1\rc@temp
+}
+\def\rc@processpt@bare#1#2\pgf@stop{%
+  \def#1{#2}}
+\def\rc@reverse#1{%
+  \ifx#1\pgf@stop
+    \let\@next=\pgfutil@empty
+  \else
+    \let\@next=\rc@reverse
+    \pgfutil@tempcnta=`#1\relax
+    \pgfmathsetmacro\rc@temp{\rc@temp * \rc@factor + \the\pgfutil@tempcnta - \rc@initial}%
+  \fi
+  \@next}
+\def\rc@parsepath#1#2#3#4\pgf@stop{%
+  \rc@processpt\rc@tempa#3\pgf@stop
+  \rc@processpt\rc@tempb#4\pgf@stop
+  \xdef#1{#2\rc@pathsep\rc@tempa\rc@pathsep\rc@tempb}%
+}
+\tikzset{
+  every picture/.append style={
+    ruler compass/at begin picture
+  },
+  intersection/use/.code args={#1 and #2}{%
+    \rc@parsepath\rc@pta#1\pgf@stop
+    \rc@parsepath\rc@ptb#2\pgf@stop
+    \pgfkeysalso{
+      of={\rc@pta} and \rc@ptb,
+      save={\rc@pta} and \rc@ptb,
+    }
+  },
+  circle through/.style={
+    to path={
+      \pgfextra{
+        \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
+        \pgf@xa=\pgf@x
+        \pgf@ya=\pgf@y
+        \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
+        \pgfmathsetmacro\rc@radius{veclen(\pgf@x - \pgf@xa,\pgf@y - \pgf@ya)}%
+      }
+      circle[radius=\rc@radius pt] (\tikztotarget)
+    }
+  },
+  arc flip/.is if=rc@fliparc,
+  centred arc to/.code 2 args={%
+    \tikz@scan@one@point\pgfutil@firstofone(#1)\relax
+    \pgfmathsetmacro\rc@radius{veclen(\tikz@lastx-\pgf@x,\tikz@lasty-\pgf@y)}%
+    \pgfmathsetmacro\rc@sangle{atan2(\tikz@lasty - \pgf@y,\tikz@lastx - \pgf@x)}%
+    \pgf@xa=\pgf@x
+    \pgf@ya=\pgf@y
+    \tikz@scan@one@point\pgfutil@firstofone(#2)\relax
+    \pgfmathsetmacro\rc@eangle{atan2(\pgf@y - \pgf@ya,\pgf@x - \pgf@xa)}%
+    \pgfmathsetmacro\rc@eangle{\rc@eangle < \rc@sangle ? \rc@eangle +       360 : \rc@eangle}%
+    \ifrc@fliparc
+    \pgfmathsetmacro\rc@eangle{\rc@eangle - 360}%
+    \fi
+    \pgfkeysalso{start angle=\rc@sangle, end angle=\rc@eangle, radius=\rc@radius pt}
+  },
+  ruler compass/.is family,
+  ruler compass/.cd,
+  draft mode/.is if=rc@draft,
+  at begin picture/.style={
+    execute at begin picture={
+      \global\advance\rc@picture@id by 1\relax
+      \setcounter{pointlabels}{0}%
+    },
+  },
+  point labels/.is choice,
+  point labels/arabic/.code={%
+    \renewcommand\thepointlabels{\@arabic \c@pointlabels}%
+    \def\rc@initial{48}%
+    \def\rc@factor{10}%
+  },
+  point labels/alph/.code={%
+    \renewcommand\thepointlabels{\@alph \c@pointlabels}%
+    \def\rc@initial{96}%
+    \def\rc@factor{26}%
+  },
+  point labels/Alph/.code={%
+    \renewcommand\thepointlabels{\@Alph \c@pointlabels}%
+    \def\rc@initial{64}%
+    \def\rc@factor{26}%
+  },
+  point labels/alphalph/.code={%
+    \@ifundefined{alphalph}{%
+      \message{The "alphalph" option only works if the 'alphalph' package has been loaded (using "alph" instead).}%
+      \renewcommand\thepointlabels{\@alph \c@pointlabels}%
+      \def\rc@initial{96}%
+      \def\rc@factor{26}%
+    }{%
+      \renewcommand\thepointlabels{\alphalph \c@pointlabels}%
+      \def\rc@initial{96}%
+      \def\rc@factor{26}%
+    }%
+  },
+  point labels/AlphAlph/.code={%
+    \@ifundefined{alphalph}{%
+      \message{The "AlphAlph" option only works if the 'alphalph' package has been loaded (using "Alph" instead).}%
+      \renewcommand\thepointlabels{\@Alph \c@pointlabels}%
+      \def\rc@initial{64}%
+      \def\rc@factor{26}%
+    }{%
+      \renewcommand\thepointlabels{\AlphAlph \c@pointlabels}%
+      \def\rc@initial{64}%
+      \def\rc@factor{26}%
+    }%
+  },
+  construction in use/.style={
+    draw=blue
+  },
+  construction not in use/.style={
+    draw=gray!75,
+  },
+  compass/.code 2 args={%
+    \rc@processpt\rc@pta#1\pgf@stop
+    \rc@processpt\rc@ptb#2\pgf@stop
+    \pgfkeysalso{ruler compass/compass aux={\rc@pta}{\rc@ptb}}%
+  },
+  compass aux/.style 2 args={
+    alt if exist={c\rc@pathsep#1\rc@pathsep#2}{
+      ruler compass/construction in use/.try,
+    }{
+      ruler compass/construction not in use/.try
+    },
+    name path=c\rc@pathsep#1\rc@pathsep#2,
+    ruler compass/every construction path/.try,
+    ruler compass/every compass/.try,
+    insert path={
+      (#1) to[circle through] (#2)
+      node[name=c\rc@pathsep#1\rc@pathsep#2\rc@pathsep centre,ruler compass/aux point={#1}] {}
+      node[name=c\rc@pathsep#1\rc@pathsep#2\rc@pathsep rim,ruler compass/aux point={#2}] {}
+    },
+  },
+  ruler/.code 2 args={%
+    \rc@processpt\rc@pta#1\pgf@stop
+    \rc@processpt\rc@ptb#2\pgf@stop
+    \pgfkeysalso{ruler compass/ruler aux={\rc@pta}{\rc@ptb}}%
+  },
+  ruler aux/.style 2 args={
+    overlay,
+    alt if exist={r\rc@pathsep#1\rc@pathsep#2}{
+      ruler compass/construction in use/.try
+    }{
+      ruler compass/construction not in use/.try
+    },
+    name path=r\rc@pathsep#1\rc@pathsep#2,
+    ruler compass/every construction path/.try,
+    ruler compass/every ruler/.try,
+    insert path={
+      ($(#1)!\pgfkeysvalueof{/tikz/ruler compass/ruler length}!(#2)$) -- ($(#2)!\pgfkeysvalueof{/tikz/ruler compass/ruler length}!(#1)$)
+      node[name=r\rc@pathsep#1\rc@pathsep#2\rc@pathsep start,ruler compass/aux point={#1}] {}
+      node[name=r\rc@pathsep#1\rc@pathsep#2\rc@pathsep end,ruler compass/aux point={#2}] {}
+    },
+  },
+  ruler length/.initial=20,
+  aux point/.style={
+    node contents/.try={},
+    at={(#1)},
+    ruler compass/every aux point/.try
+  },
+  point/.style={
+    ruler compass/name it,
+    coordinate,
+    node contents/.try={},
+    insert path={
+      node[
+        fill=#1,
+        circle,
+        minimum width=1mm,
+        inner sep=0mm,
+        reset label anchor,
+        anchor=center,
+        node contents/.try={},
+        ruler compass/every point/.try,
+      ] {}
+    }
+  },
+  name it/.code={%
+    \ifx\tikz@fig@name\pgfutil@empty
+    \stepcounter{pointlabels}%
+    \pgfkeysalso{name=\thepointlabels}%
+    \expandafter\xdef\csname rc@id@\thepointlabels\endcsname{\the\rc@picture@id}%
+    \ifrc@draft
+    \pgfkeysalso{label={[ruler compass/draft label/.try]\thepointlabels}}%
+    \fi
+    \fi
+  },
+  point/.default=black,
+}
+\def\rc@scale{1}
+\def\rc@offset{0pt}
+\def\jump@setbb#1#2#3{%
+  \@ifundefined{jump@#1@maxbb}{%
+    \expandafter\gdef\csname jump@#1@maxbb\endcsname{#3}%
+  }{%
+    \csname jump@#1@maxbb\endcsname
+    \pgf@xa=\pgf@x
+    \pgf@ya=\pgf@y
+    #3
+    \pgfmathsetlength\pgf@x{max(\pgf@x,\pgf@xa)}%
+    \pgfmathsetlength\pgf@y{max(\pgf@y,\pgf@ya)}%
+    \expandafter\xdef\csname jump@#1@maxbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+  }
+  \@ifundefined{jump@#1@minbb}{%
+    \expandafter\gdef\csname jump@#1@minbb\endcsname{#2}%
+  }{%
+    \csname jump@#1@minbb\endcsname
+    \pgf@xa=\pgf@x
+    \pgf@ya=\pgf@y
+    #2
+    \pgfmathsetlength\pgf@x{min(\pgf@x,\pgf@xa)}%
+    \pgfmathsetlength\pgf@y{min(\pgf@y,\pgf@ya)}%
+    \expandafter\xdef\csname jump@#1@minbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+  }
+}
+\tikzset{
+  stop jumping/.style={
+    execute at end picture={%
+      \pgfmathsetlength\pgf@xa{\pgf@picminx/\rc@scale}%
+      \pgfmathsetlength\pgf@ya{\pgf@picminy/\rc@scale}%
+      \pgfmathsetlength\pgf@xb{\pgf@picmaxx/\rc@scale}%
+      \pgfmathsetlength\pgf@yb{\pgf@picmaxy/\rc@scale}%
+      \immediate\write\pgfutil@auxout{%
+        \noexpand\jump@setbb{\the\rc@picture@id}{\noexpand\pgfpoint{\the\pgf@xa}{\the\pgf@ya}}{\noexpand\pgfpoint{\the\pgf@xb}{\the\pgf@yb}}%
+      },
+      \pgf@x=\pgf@picminx
+      \pgf@y=\pgf@picminy
+      \csname jump@\the\rc@picture@id @minbb\endcsname
+      \pgf@xa=\pgf@x
+      \pgf@ya=\pgf@y
+      \pgf@x=\pgf@picmaxx
+      \pgf@y=\pgf@picmaxy
+      \csname jump@\the\rc@picture@id @maxbb\endcsname
+      \edef\rc@temp{\noexpand\path (\the\pgf@xa - \rc@offset,\the\pgf@ya - \rc@offset) -- (\the\pgf@x + \rc@offset,\the\pgf@y + \rc@offset);}%
+      \rc@temp
+    },
+  },
+  max size/.code 2 args={%
+    \pgfutil@ifundefined{jump@\the\rc@picture@id @maxbb}{}{%
+      \csname jump@\the\rc@picture@id @maxbb\endcsname
+      \pgf@xa=\pgf@x
+      \pgf@ya=\pgf@y
+      \csname jump@\the\rc@picture@id @minbb\endcsname
+      \advance\pgf@xa by -\pgf@x
+      \advance\pgf@ya by -\pgf@y
+      \advance\pgf@xa by \rc@offset
+      \advance\pgf@xa by \rc@offset
+      \advance\pgf@ya by \rc@offset
+      \advance\pgf@ya by \rc@offset
+      \pgfmathsetmacro\rc@xratio{\pgf@xa > #1 ? \pgf@xa/#1 : 1}%
+      \pgfmathsetmacro\rc@yratio{\pgf@ya > #2 ? \pgf@ya/#2 : 1}%
+      \pgfmathsetmacro\rc@scale{1/max(\rc@xratio,\rc@yratio)}%
+      \pgfkeysalso{scale=\rc@scale}%
+    }
+  },
+  enclosing box/offset/.store in=\rc@offset,
+  constrain/.style={
+    execute at begin picture=\constrain
+  }
+}
+\newcommand\constrain{%
+  \pgfutil@ifundefined{jump@\the\rc@picture@id @minbb}{}{%
+    \csname jump@\the\rc@picture@id @minbb\endcsname
+    \pgfmathsetlength\pgf@xa{\pgf@x-\rc@offset}%
+    \pgfmathsetlength\pgf@ya{\pgf@y-\rc@offset}%
+    \csname jump@\the\rc@picture@id @maxbb\endcsname
+    \pgfmathsetlength\pgf@xb{\pgf@x+\rc@offset}%
+    \pgfmathsetlength\pgf@yb{\pgf@y+\rc@offset}%
+    \edef\rc@temp{\noexpand\clip (\the\pgf@xa,\the\pgf@ya) rectangle (\the\pgf@xb,\the\pgf@yb);}
+    \ifpgf@relevantforpicturesize
+      \pgf@relevantforpicturesizefalse
+      \rc@temp
+      \pgf@relevantforpicturesizetrue
+    \else
+      \rc@temp
+    \fi
+  }%
+}
+
+\expandafter\def\csname pgf@sh@ns@enclosing box\endcsname{rectangle}
+\expandafter\def\csname pgf@sh@np@enclosing box\endcsname{%
+  \pgfutil@ifundefined{jump@\the\rc@picture@id @minbb}{%
+    \def\southwest{\pgfqpoint{\pgf@picminx}{\pgf@picminy}}%
+    \def\northeast{\pgfqpoint{\pgf@picmaxx}{\pgf@picmaxy}}%
+}{%
+    \csname jump@\the\rc@picture@id @minbb\endcsname
+    \pgfmathsetlength\pgf@xa{\pgf@x-\rc@offset}%
+    \pgfmathsetlength\pgf@ya{\pgf@y-\rc@offset}%
+    \edef\southwest{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+    \csname jump@\the\rc@picture@id @maxbb\endcsname
+    \pgfmathsetlength\pgf@xb{\pgf@x+\rc@offset}%
+    \pgfmathsetlength\pgf@yb{\pgf@y+\rc@offset}%
+    \edef\northeast{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
+  }%
+}
+\expandafter\def\csname pgf@sh@nt@enclosing box\endcsname{{1}{0}{0}{1}{0pt}{0pt}}
+\expandafter\def\csname pgf@sh@pi@enclosing box\endcsname{\pgfpictureid}
+
+\tikzset{
+  on layer/.code={
+    \pgfonlayer{#1}\begingroup
+    \aftergroup\endpgfonlayer
+    \aftergroup\endgroup
+  },
+  node on layer/.code={
+    \gdef\node@@on@layer{%
+      \setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{#1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}
+    \aftergroup\node@on@layer
+  },
+  reset label anchor/.code={%
+    \let\tikz@auto@anchor=\pgfutil@empty
+    \def\tikz@anchor{#1}
+  },
+  reset label anchor/.default=center
+}
+\def\node@on@layer{\aftergroup\node@@on@layer}
+\@ifpackageloaded{alphalph}%
+{
+  \tikzset{ruler compass/point labels=alphalph}
+}
+{
+  \tikzset{ruler compass/point labels=alph}
+}
+
+%% 
+%% Copyright (C) 2013 by Andrew Stacey <stacey@math.ntnu.no>
+%% 
+%% This file may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of this
+%% license or (at your option) any later version.
+%% The latest version of this license is in:
+%% 
+%%    http://www.latex-project.org/lppl.txt
+%% 
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%% 
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Andrew Stacey.
+%% 
+%% This work consists of the files  rulercompass.dtx
+%%                                  rulercompass_doc.tex
+%% and the derived files            tikzlibraryrulercompass.code.tex
+%%                                  rulercompass.ins
+%%                                  rulercompass.pdf
+%%                                  rulercompass_doc.pdf
+%%                                  README.txt
+%% 
+%% 
+%%
+%% End of file `tikzlibraryrulercompass.code.tex'.
-- 
cgit v1.2.3

