diff options
author | Karl Berry <karl@freefriends.org> | 2013-12-12 22:54:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-12-12 22:54:58 +0000 |
commit | b2e97cd1b691e067fe3a30311a099576cf31257e (patch) | |
tree | 9f2149e7a37b9811e3913367573b4292c9fa26a4 /Master/texmf-dist/source | |
parent | 7991cab643e93ba549e06207a24036d4cd8d598a (diff) |
rulercompass (12dec13)
git-svn-id: svn://tug.org/texlive/trunk@32392 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/rulercompass/rulercompass.dtx | 811 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/rulercompass/rulercompass.ins | 84 |
2 files changed, 895 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/rulercompass/rulercompass.dtx b/Master/texmf-dist/source/latex/rulercompass/rulercompass.dtx new file mode 100644 index 00000000000..58034995083 --- /dev/null +++ b/Master/texmf-dist/source/latex/rulercompass/rulercompass.dtx @@ -0,0 +1,811 @@ +% \iffalse meta-comment +%<*internal> +\iffalse +%</internal> +%<*readme> +--------------------------------------------------------------- +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 +--------------------------------------------------------------- + +This package defines some commands and styles intended for +drawing straight-edge and compass diagrams. +%</readme> +%<*internal> +\fi +\def\nameofplainTeX{plain} +\ifx\fmtname\nameofplainTeX\else +\expandafter\begingroup +\fi +%</internal> +%<*install> +\input docstrip.tex +\keepsilent +\askforoverwritefalse +\preamble +--------------------------------------------------------------- +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 +--------------------------------------------------------------- + +\endpreamble +\postamble + +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 + + +\endpostamble +\usedir{tex/latex/rulercompass} +\generate{\file{tikzlibraryrulercompass.code.tex}{\from{rulercompass.dtx}{tikzlibrary}}} +%</install> +%<install>\endbatchfile +%<*internal> +\usedir{source/latex/rulercompass} +\generate{ + \file{\jobname.ins}{\from{\jobname.dtx}{install}} +} +\nopreamble\nopostamble +\generate{ + \file{README.txt}{\from{\jobname.dtx}{readme}} +} +\ifx\fmtname\nameofplainTeX + \expandafter\endbatchfile +\else + \expandafter\endgroup +\fi +%</internal> +%<*driver> +\documentclass[full]{l3doc} +\usepackage[T1]{fontenc} +\usepackage{csquotes} +\usepackage{lmodern} +\usepackage{alphalph} +\usepackage{tikz} +\usetikzlibrary{rulercompass} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} +\DocInput{\jobname.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{785} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% +% +% \DoNotIndex{\newcommand,\newenvironment} +% +% \providecommand*{\url}{\texttt} +% \title{The \textsf{rulercompass} package: code} +% \author{Andrew Stacey \\ \url{stacey@math.ntnu.no}} +% \maketitle +% +% +% \StopEventually{\PrintChanges} +% \section{Implementation} +% +% \iffalse +%<*tikzlibrary> +% \fi +% +% Load in useful tikzlibraries. +% \begin{macrocode} +\usetikzlibrary{intersections,calc} +% \end{macrocode} +%^^A +% Are we in draft mode (so display point labels)? +% \begin{macrocode} +\newif\ifrc@draft +% \end{macrocode} +%^^A +% Is beamer loaded? +% \begin{macrocode} +\newif\ifrc@beamer +% \end{macrocode} +%^^A +% When drawing arc segments, do we flip the segment? +% \begin{macrocode} +\newif\ifrc@fliparc +% \end{macrocode} +%^^A +% A picture id that stays the same on beamer frames to make it easier to compare bounding boxes and other information of the ``same'' tikzpicture. +% \begin{macrocode} +\newcount\rc@picture@id +% \end{macrocode} +%^^A +% Counter for our point labels. +% \begin{macrocode} +\newcounter{pointlabels} +% \end{macrocode} +%^^A +% Set the beamer boolean. +% \begin{macrocode} +\@ifclassloaded{beamer}{% + \rc@beamertrue +}{} +% \end{macrocode} +%^^A +% Internal separator for the path-naming scheme +% \begin{macrocode} +\def\rc@pathsep{@} +% \end{macrocode} +%^^A +% Are we running under beamer? +% \begin{macrocode} +\ifrc@beamer +% \end{macrocode} +% Make our counters reset on frames +% \begin{macrocode} +\resetcounteronoverlays{pointlabels} +\resetcountonoverlays{rc@picture@id} +% \end{macrocode} +%^^A +% Define an overlay-aware style +% \begin{macrocode} +\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}% + }% + }% + }, +% \end{macrocode} +% Save a path when it is used to compute a point +% \begin{macrocode} + 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 + }% + } +} +% \end{macrocode} +%^^A +% Define overlay-aware versions of the main macros. +% \begin{macrocode} +\newcommand<>\compass[3][]{% + \draw#4[#1,ruler compass/compass={#2}{#3}]; +} + +\newcommand<>\ruler[3][]{% + \draw#4[#1,ruler compass/ruler={#2}{#3}]; +} +% \end{macrocode} +%^^A +% The \verb+\point+ macro is doubly overlay aware. +% If the intersection has already been computed (say, on another slide of the same picture), reuse it. +% \begin{macrocode} +\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 +} +% \end{macrocode} +%^^A +% Now for the non-beamer versions +% \begin{macrocode} +\else +% \end{macrocode} +%^^A +% The overlay-aware style defaults to the first option. +% \begin{macrocode} +\tikzset{ + alt if exist/.code args={#1#2#3}{% + \pgfkeysalso{#2}% + }, +% \end{macrocode} +% Saving this means we don't have to have two versions of a more complicated bit of code. +% \begin{macrocode} + 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 + } +} +% \end{macrocode} +%^^A +% Non-overlay aware versions of the primary commands. +% \begin{macrocode} +\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] {}; +} +% \end{macrocode} +%^^A +% End of non-beamer specific section +% \begin{macrocode} +\fi +% \end{macrocode} +%^^A +% The following macros process the path/point specifications. +% The first looks to see if the first character is a period. +% \begin{macrocode} +\def\rc@processpt#1{% + \pgfutil@ifnextchar.{\rc@processpt@@#1}{\rc@processpt@#1}} +% \end{macrocode} +% Nope, so now look for a plus or a minus. +% \begin{macrocode} +\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 +} +% \end{macrocode} +%^^A +% Okay, we got a period. +% That means the current point, possibly with an offset. +% \begin{macrocode} +\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 +} +% \end{macrocode} +%^^A +% We need to add an offset to the given label, so need to compute the index of the label. +% \begin{macrocode} +\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 +} +% \end{macrocode} +%^^A +% Same, but with a minus. +% \begin{macrocode} +\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 +} +% \end{macrocode} +%^^A +% Simplest case. +% \begin{macrocode} +\def\rc@processpt@bare#1#2\pgf@stop{% + \def#1{#2}} +% \end{macrocode} +%^^A +% Reverse lookup the counter value from its displayed format. +% \begin{macrocode} +\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} +% \end{macrocode} +%^^A +% Compute the actual path name from the three token (lists). +% \begin{macrocode} +\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}% +} +% \end{macrocode} +%^^A +% Now we install all our styles +% \begin{macrocode} +\tikzset{ +% \end{macrocode} +%^^A +% Code which initialises our counters at the start of a picture. +% \begin{macrocode} + every picture/.append style={ + ruler compass/at begin picture + }, +% \end{macrocode} +%^^A +% Passes the paths to the intersection but also takes note of their use. +% \begin{macrocode} + 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, + } + }, +% \end{macrocode} +%^^A +% \verb+to path+ for a circle through a given point. +% \begin{macrocode} + 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) + } + }, +% \end{macrocode} +%^^A +% Flip an arc when drawing a segment. +% \begin{macrocode} + arc flip/.is if=rc@fliparc, +% \end{macrocode} +%^^A +% Arc from one point to another centred on specified point. +% \begin{macrocode} + 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} + }, +% \end{macrocode} +%^^A +% Most of our keys are in this family. +% \begin{macrocode} + ruler compass/.is family, + ruler compass/.cd, +% \end{macrocode} +%^^A +% Draft mode displays the labels. +% \begin{macrocode} + draft mode/.is if=rc@draft, +% beamer mode/.is if=rc@beamer, +% \end{macrocode} +%^^A +% This is the actual code for resetting the counters. +% \begin{macrocode} + at begin picture/.style={ + execute at begin picture={ + \global\advance\rc@picture@id by 1\relax + \setcounter{pointlabels}{0}% + }, + }, +% \end{macrocode} +%^^A +% Styling the point labels. +% \begin{macrocode} + 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}% + }, +% \end{macrocode} +%^^A +% Styling the point labels with the \verb+alphalph+ package. +% \begin{macrocode} + 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}% + }% + }, +% \end{macrocode} +%^^A +% Styles for if the path is still in use or not. +% \begin{macrocode} + construction in use/.style={ + draw=blue + }, + construction not in use/.style={ + draw=gray!75, + }, +% \end{macrocode} +%^^A +% Code for drawing a circle. +% \begin{macrocode} + 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}] {} + }, + }, +% \end{macrocode} +%^^A +% Code for drawing a straight line. +% \begin{macrocode} + 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}] {} + }, + }, +% \end{macrocode} +%^^A +% Sets the ruler length. +% \begin{macrocode} + ruler length/.initial=20, +% \end{macrocode} +%^^A +% Auxiliary point style. +% \begin{macrocode} + aux point/.style={ + node contents/.try={}, + at={(#1)}, + ruler compass/every aux point/.try + }, +% \end{macrocode} +%^^A +% Draws a point as a coordinate with another node for styling. +% \begin{macrocode} + 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, + ] {} + } + }, +% \end{macrocode} +%^^A +% Forces a point to be named. +% \begin{macrocode} + 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, +} +% \end{macrocode} +%^^A +% Sets the initial scale and offset of the enclosing box. +% \begin{macrocode} +\def\rc@scale{1} +\def\rc@offset{0pt} +% \end{macrocode} +%^^A +% Sets the bounding box from the auxiliary file. +% \begin{macrocode} +\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}}% + } +} +% \end{macrocode} +%^^A +% Installs the code to save the bounding box. +% \begin{macrocode} +\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 + }, + }, +% \end{macrocode} +%^^A +% Scales the picture to fit inside a given rectangle. +% \begin{macrocode} + 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}% + } + }, +% \end{macrocode} +%^^A +%^^A +% \begin{macrocode} + enclosing box/offset/.store in=\rc@offset, + constrain/.style={ + execute at begin picture=\constrain + } +} +% \end{macrocode} +%^^A +% Defines a clip to the enclosing box. +% \begin{macrocode} +\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 + }% +} + +% \end{macrocode} +%^^A +% Defines the enclosing box node. +% \begin{macrocode} +\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} + + +% \end{macrocode} +%^^A +% Defines the layer code for individual paths and nodes. +% \begin{macrocode} +\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} +% \end{macrocode} +%^^A +% Sets the point label style. +% \begin{macrocode} +\@ifpackageloaded{alphalph}% +{ + \tikzset{ruler compass/point labels=alphalph} +} +{ + \tikzset{ruler compass/point labels=alph} +} + +\endinput +% \end{macrocode} +% \iffalse +%</tikzlibrary> +% \fi +% +%\Finale
\ No newline at end of file diff --git a/Master/texmf-dist/source/latex/rulercompass/rulercompass.ins b/Master/texmf-dist/source/latex/rulercompass/rulercompass.ins new file mode 100644 index 00000000000..b370b06876c --- /dev/null +++ b/Master/texmf-dist/source/latex/rulercompass/rulercompass.ins @@ -0,0 +1,84 @@ +%% +%% This is file `rulercompass.ins', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% rulercompass.dtx (with options: `install') +%% --------------------------------------------------------------- +%% 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 +%% --------------------------------------------------------------- +%% +\input docstrip.tex +\keepsilent +\askforoverwritefalse +\preamble +--------------------------------------------------------------- +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 +--------------------------------------------------------------- + +\endpreamble +\postamble + +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 + +\endpostamble +\usedir{tex/latex/rulercompass} +\generate{\file{tikzlibraryrulercompass.code.tex}{\from{rulercompass.dtx}{tikzlibrary}}} +\endbatchfile +%% +%% 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 `rulercompass.ins'. |