%% %% This is file `testsample.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% ontesting.dtx (with options: `testbed') %% %% Copyright (C) 2013 by Adrian P Robson %% adrian.robson@nepsweb.co.uk %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either %% version 1.3c 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 %% %% This work has the LPPL maintenance status `maintained'. %% The Current Maintainer of this work is Adrian Robson. %% %% This work consists of the files makeshape.ins %% makeshape.dtx and %% ontesting.dtx %% and the derived files makeshape.sty %% makeshape.pdf %% sampleshape.tex %% ontesting.pdf %% testsample.tex and %% testsample.pdf %% %%-------------------------------------------------------- %% %% This is a test bed for the makeshape package's %% sampleshape in sampleshape.tex %% %% It can be easily adapted for other shapes. %% %% 22 January 2013 \documentclass[10pt,a4paper]{article} \usepackage{enumitem} \usepackage{tikz} \usetikzlibrary{backgrounds} \usetikzlibrary{arrows} %%------------------------------------------------- %% file and shape being tested \def\filename{sampleshape} % file being tested \input{\filename} % It is a .tex %%\usepackage{\filename} % It is a .sty \def\testshape{sample} % shape being tested %%------------------------------------------------- %%-------------------------------------------------------- %% Utility macros %%-------------------------------------------------------- %% \spot{x}{y} \newcommand{\spot}[2]{ \draw[help lines,red] (#1,#2) circle (1pt); } %% \markOrig \def\mrksz{4pt} \def\mrkcol{yellow} \newcommand{\markOrig}{ \draw[help lines,\mrkcol] (0,0) circle (\mrksz); \draw[help lines,\mrkcol] (-\mrksz,0) -- (\mrksz,0); \draw[help lines,\mrkcol] (0,-\mrksz) -- (0,\mrksz); } %% \markOrigC{colour} \def\mrksz{4pt} \newcommand{\markOrigC}[1]{ \draw[help lines,#1] (0,0) circle (\mrksz); \draw[help lines,#1] (-\mrksz,0) -- (\mrksz,0); \draw[help lines,#1] (0,-\mrksz) -- (0,\mrksz); } %% Anchors ... %% \***{node}{size}{colour} \def\centeranchor#1#2#3{ \draw[help lines,#3] (#1.center) circle (#2); } \def\textanchor#1#2#3{ \draw[help lines,#3] (#1.text) circle (#2); } \def\cardinalanchors#1#2#3{ \draw[help lines,#3] (#1.north) circle (#2); \draw[help lines,#3] (#1.west) circle (#2); \draw[help lines,#3] (#1.south) circle (#2); \draw[help lines,#3] (#1.east) circle (#2); } \def\corneranchors#1#2#3{ \draw[help lines,#3] (#1.north west) circle (#2); \draw[help lines,#3] (#1.south west) circle (#2); \draw[help lines,#3] (#1.south east) circle (#2); \draw[help lines,#3] (#1.north east) circle (#2); } \def\allanchors#1#2#3{ \corneranchors{#1}{#2}{#3} \cardinalanchors{#1}{#2}{#3} } %%-------------------------------------------------------- \title{The {\sf makeshape} package\\ Shape Test Bed \vspace{-3ex} } \author{} \date{ \begin{tabular}{rl} File & {\tt \filename}\\ Shape & {\tt \testshape} \end{tabular} \\[2ex] \today} \begin{document} \maketitle %%-------------------------------------------------------- \section*{Basic Shape} \begin{center} \begin{tikzpicture} \node at (0,0) [\testshape, draw ] (test) {\verb|x x|} ; \allanchors{test}{2pt}{red} \textanchor{test}{2pt}{green} \draw[help lines,green] (test.text) -- ++(7pt,0); \draw[help lines,green] (test.text) -- ++(0,5pt); \centeranchor{test}{2pt}{blue} %% mark the anchors with arrows from enclosing rectangle \node at (0,0) [rectangle, red, minimum width=4cm, minimum height=2cm ] (outer) {} ; \begin{scope}[>=latex'] \draw[->,help lines,red] (outer.north) -- (test.north); \draw[->,help lines,red] (outer.east) -- (test.east); \draw[->,help lines,red] (outer.south) -- (test.south); \draw[->,help lines,red] (outer.west) -- (test.west); \draw[->,help lines,red] (outer.north east) -- (test.north east); \draw[->,help lines,red] (outer.south east) -- (test.south east); \draw[->,help lines,red] (outer.south west) -- (test.south west); \draw[->,help lines,red] (outer.north west) -- (test.north west); \end{scope} \begin{scope}[on background layer] \node at (4cm,0) [rectangle, draw ] (rectRmin) {\verb|x x|}; \node at (0,-1.7cm) [rectangle, draw ] (rectBmin) {\verb|x x|}; \draw[help lines,green] (rectRmin.north west) -- ++(-4.5cm,0); \draw[help lines,green] (rectRmin.south west) -- ++(-4.5cm,0); \draw[help lines,green] (rectBmin.north west) -- ++(0,2.3cm); \draw[help lines,green] (rectBmin.north east) -- ++(0,2.3cm); \markOrig \end{scope} \end{tikzpicture} \end{center} \vfill %%-------------------------------------------------------- \section*{Minimum Dimensions} \def\minh{30pt} \def\minw{80pt} {\tt minimum width = \minw}\\ {\tt minimum height = \minh} \begin{center} \begin{tikzpicture} %% The test shape \node at (0,0) [\testshape, draw, minimum width=\minw, minimum height=\minh, ] (test) {\verb|x x|} ; \allanchors{test}{1pt}{red} %% Guide lines \begin{scope}[on background layer] \node at (4.5cm+\minw,0) [rectangle, draw ] (rectRmin) {\verb|x x|}; \node at (1.5cm+\minw,0) [rectangle, draw, minimum width=\minw, minimum height=\minh ] (rectR) {\verb|x x|}; \node at (0,-1cm-\minh) [rectangle, draw, minimum width=\minw, minimum height=\minh ] (rectB) {\verb|x x|}; \node at (0,-2.5cm-\minh) [rectangle, draw, ] (rectBmin) {\verb|x x|}; \markOrig \draw[help lines,yellow] (rectR.north west) -- ++(-1.7cm-\minw,0); \draw[help lines,yellow] (rectR.south west) -- ++(-1.7cm-\minw,0); \draw[help lines,yellow] (rectR.west) -- ++(-1.7cm-\minw,0); \draw[help lines,yellow] (rectR.west) -- ++(\minw+0.2cm,0); \draw[help lines,yellow] (rectB.north west) -- ++(0,1.2cm+\minh); \draw[help lines,yellow] (rectB.north east) -- ++(0,1.2cm+\minh); \draw[help lines,yellow] (rectB.north) -- ++(0,1.2cm+\minh); \draw[help lines,yellow] (rectB.north) -- ++(0,-\minh-0.2cm); \draw[help lines,green] (rectRmin.north west) -- ++(-4.6cm-\minw,0); \draw[help lines,green] (rectBmin.north west) -- ++(0,2.6cm+\minh); \end{scope} \end{tikzpicture} \end{center} \vfill \newpage %%-------------------------------------------------------- \section*{Inner Separation} \def\insepx{20pt} \def\insepy{10pt} {\tt inner x seperation = \insepx}\\ {\tt inner y seperation = \insepy} \begin{center} \begin{tikzpicture} %% The test shape \node at (0,0) [\testshape, draw, inner xsep=\insepx, inner ysep=\insepy ] (test) {\verb|x x|} ; \allanchors{test}{1pt}{red} %% Guide lines \begin{scope}[on background layer] \markOrig \node at (2.5cm,0) [rectangle, draw ] (rectRmin) {\verb|x x|}; \node at (0,-1.5cm) [rectangle, draw ] (rectBmin) {\verb|x x|}; \node at (4cm,0) [rectangle, draw, inner ysep=\insepy ] (rectRwithSep) {\verb|x x|}; \node at (0,-2.2cm) [rectangle, draw, inner xsep=\insepx ] (rectBwithSep) {\verb|x x|}; \draw[help lines,green] (rectRmin.north west) -- ++(-3.4cm,0); \draw[help lines,green] (rectBmin.north west) -- ++(0,2cm); \draw[help lines,blue] (rectRwithSep.north west) -- ++(-4.9cm,0); \draw[help lines,blue] (rectBwithSep.north west) -- ++(0,2.7cm); \end{scope} \end{tikzpicture} \end{center} %%-------------------------------------------------------- \section*{Outer Separation} \def\minh{20pt} \def\minw{60pt} \def\outerx{20pt} \def\outery{10pt} {\tt outer x separation = \outerx}\\ {\tt outer y separation = \outery} \begin{center} \begin{tikzpicture} \markOrig %% the shape with outer separation \node at (0,0) [\testshape, draw, minimum width=\minw, minimum height=\minh, outer xsep=\outerx, outer ysep=\outery ] (test) {\verb|x x|} ; %% shape expanded to outer separation boundary \node at (0,0) [\testshape, draw, help lines, green, minimum width=\minw+2*\outerx, minimum height=\minh+2*\outery, ] (bigger) {} ; %% mark the anchors with arrows from enclosing rectangle \node at (0,0) [rectangle, minimum width=\minw+1cm, minimum height=\minh+1cm, outer xsep=\outerx, outer ysep=\outery ] (outer) {} ; \begin{scope}[>=latex'] \draw[->,help lines,red] (outer.north) -- (test.north); \draw[->,help lines,red] (outer.east) -- (test.east); \draw[->,help lines,red] (outer.south) -- (test.south); \draw[->,help lines,red] (outer.west) -- (test.west); \draw[->,help lines,red] (outer.north east) -- (test.north east); \draw[->,help lines,red] (outer.south east) -- (test.south east); \draw[->,help lines,red] (outer.south west) -- (test.south west); \draw[->,help lines,red] (outer.north west) -- (test.north west); \end{scope} %% mark anchors with circles \allanchors{test}{2pt}{red} %% mark text and centre anchors \textanchor{test}{2pt}{green} \draw[help lines,green] (test.text) -- ++(7pt,0); \draw[help lines,green] (test.text) -- ++(0,5pt); \centeranchor{test}{2pt}{blue} \end{tikzpicture} \end{center} %%-------------------------------------------------------- \section*{Anchorborder } %%-------------------------------------------------------- \subsection*{External Points with Outer Separation and\\Minimum Dimensions} \def\width{2cm} \def\height{1cm} \def\testouter{10pt} {\tt outer sep = \testouter}\\ {\tt minimum height = \height}\\ {\tt minimum width = \width} \begin{center} \begin{tikzpicture} \markOrig %% The test shape \node at (0,0) [\testshape, draw, font={\sf \small}, minimum width=\width, minimum height=\height, outer sep=\testouter ] (test) {Test}; %% green path where anchors should be \node at (0,0) [\testshape, draw, help lines, green, minimum width=\width+2*\testouter, minimum height=\height+2*\testouter, ] (bigger) {} ; \def\n{20} \def\radius{3cm} \draw[dotted] (0,0) circle (\radius); \foreach \s in {1,...,\n} { \draw[->, >=latex'] ({360/\n * (\s - 1)}:\radius) -- (test); } \end{tikzpicture} \end{center} %%-------------------------------------------------------- \subsection*{Internal Points with Minimum Dimensions} \def\width{3cm} \def\height{3cm} {\tt minimum height = \height}\\ {\tt minimum width = \width} \vspace{-3ex} \begin{center} \begin{tikzpicture} \markOrig %% The test shape \node at (0,0) [\testshape, draw, font={\sf \small}, minimum width=\width, minimum height=\height, ] (test) {}; \def\n{20} \def\radius{1cm} \draw[dotted] (0,0) circle (\radius); \foreach \s in {1,...,\n} { \draw[->, >=latex', red] ({360/\n * (\s - 1)}:\radius) -- (test); } \end{tikzpicture} \end{center} %%-------------------------------------------------------- \subsection*{Angles with Outer Separation and Minimum Dimensions} \def\angle{120} \def\width{2cm} \def\height{1cm} \def\testouterx{20pt} \def\testoutery{10pt} Marked angle = \angle\\ {\tt outer xsep = \testouterx}\\ {\tt outer ysep = \testoutery}\\ {\tt minimum height = \height}\\ {\tt minimum width = \width} \vspace{-5ex} \begin{center} \begin{tikzpicture} \markOrig %% red path where anchors should be ? \node at (0,0) [\testshape, draw, help lines, red, minimum width=\width+2*\testouterx, minimum height=\height+2*\testoutery, ] (bigger) {}; \node at (0,0) [\testshape, draw, minimum width=\width, minimum height=\height, outer xsep=\testouterx, outer ysep=\testoutery ] (test) {}; \foreach \angle in {0,5,...,355} { \fill[blue] (test.\angle) circle[radius=1pt]; } %% single angle test \def\angle{120} \draw [help lines] (test.center) -- ++(\angle:1.5cm); \draw[green] (test.\angle) circle[radius=2pt]; \draw[green] (test.\angle) -- ++(3pt,3pt); \draw[green] (test.\angle) -- ++(-3pt,-3pt); \draw[green] (test.\angle) -- ++(-3pt,3pt); \draw[green] (test.\angle) -- ++(3pt,-3pt); \end{tikzpicture} \end{center} %%-------------------------------------------------------- \section*{Simple Node Connections} \begin{center} \begin{tikzpicture} \def\ra{0} \def\rb{60pt} \def\rc{120pt} \def\ca{0} \def\cb{100pt} \def\cc{200pt} \draw[help lines,step=20pt,dotted] (0pt,0pt) grid (\cc,\rc); \tikzset{node style/.style={ minimum width=40pt,minimum height=20pt}} \markOrig \node at (\ca,\ra) [draw, \testshape, node style] (A) {A}; \node at (\cb,\ra) [draw, \testshape, node style] (B) {B}; \node at (\cc,\ra) [draw, \testshape, node style] (C) {C}; %% \node at (\ca,\rb) [draw, \testshape, node style] (D) {D}; \node at (\cb,\rb) [draw, \testshape, node style] (E) {E}; \node at (\cc,\rb) [draw, \testshape, node style] (F) {F}; %% \node at (\ca,\rc) [draw, \testshape, node style] (G) {G}; \node at (\cb,\rc) [draw, \testshape, node style] (H) {H}; \node at (\cc,\rc) [draw, \testshape, node style] (I) {I}; \draw (E) -- (F); \draw (E) -- (D); \draw (E) -- (B); \draw (E) -- (H); \draw (E) -- (G); \draw (E) -- (A); \draw (E) -- (I); \draw (E) -- (C); \end{tikzpicture} \end{center} %%-------------------------------------------------------- \section*{Scaling} \def\minh{20pt} \def\minw{80pt} \def\exd{5pt} \begin{center} \begin{tikzpicture} \node at (0,0) [\testshape, draw, minimum width=\minw, minimum height=\minh, ] (test1) {} ; \node at (0,0) [\testshape, draw, blue, minimum width=\minw+1cm, minimum height=\minh+1cm, ] (test2) {} ; \node at (0,0) [\testshape, draw, red, minimum width=\minw+2cm, minimum height=\minh+2cm, ] (test3) {} ; \def\tgridA#1#2{ \draw[help lines] ({0.5*(\minw+#1)+\exd},{0.5*(\minh+#1)}) -- ({-0.5*(\minw+#1)-\exd},{0.5*(\minh+#1)}); \draw[help lines] ({0.5*(\minw+#1)+\exd},{-0.5*(\minh+#1)}) -- ({-0.5*(\minw+#1)-\exd},{-0.5*(\minh+#1)}); \draw[help lines] ({0.5*(\minw+#1)},{0.5*(\minh+#1)+\exd}) -- ({0.5*(\minw+#1)},{-0.5*(\minh+#1)-\exd}); \draw[help lines] ({-0.5*(\minw+#1)},{0.5*(\minh+#1)+\exd}) -- ({-0.5*(\minw+#1)},{-0.5*(\minh+#1)-\exd}); } \begin{scope}[on background layer] \tgridA{0pt}{0pt} \tgridA{1cm}{1cm} \tgridA{2cm}{2cm} \markOrig \end{scope} \end{tikzpicture} \end{center} %%-------------------------------------------------------- \section*{Package Tests} %%-------------------------------------------------------- \subsection*{Text Alignment and the Text Box} \begin{center} \begin{tikzpicture} \node at (0,0) [\testshape, draw ] (test1) {\verb|x x|} ; \node[ \testshape, draw, below of=test1, node distance=1cm ] (test2) {\verb|x dx|} ; \node[ \testshape, draw, below of=test2, node distance=1cm ] (test3) {\verb|xp x|} ; \node[ \testshape, draw, below of=test3, node distance=1cm ] (test4) {\verb|xp dx|} ; \allanchors{test1}{1pt}{red} \corneranchors{test2}{1pt}{red} \corneranchors{test3}{1pt}{red} \corneranchors{test4}{1pt}{red} \centeranchor{test1}{2pt}{blue} \centeranchor{test2}{2pt}{blue} \centeranchor{test3}{2pt}{blue} \centeranchor{test4}{2pt}{blue} \textanchor{test1}{1pt}{green} \draw[help lines,green] (test1.text) -- ++(7pt,0); \draw[help lines,green] (test1.text) -- ++(0,5pt); \textanchor{test2}{1pt}{green} \textanchor{test3}{1pt}{green} \textanchor{test4}{1pt}{green} \begin{scope}[on background layer] \markOrig \node at(4cm,0) [ rectangle, draw ] (ref1) {\verb|x x|} ; \draw[green] (ref1.north west) -- ++(-5cm,0); \draw[green] (ref1.south west) -- ++(-5cm,0); \node[rectangle, draw, below of=ref1, node distance=1cm ] (ref2) {\verb|x dx|} ; \draw[green] (ref2.north west) -- ++(-5cm,0); \draw[green] (ref2.south west) -- ++(-5cm,0); \node[rectangle, draw, below of=ref2, node distance=1cm ] (ref3) {\verb|xp x|} ; \draw[green] (ref3.north west) -- ++(-5cm,0); \draw[green] (ref3.south west) -- ++(-5cm,0); \node[rectangle, draw, below of=ref3, node distance=1cm ] (ref4) {\verb|xp dx|} ; \draw[green] (ref4.north west) -- ++(-5cm,0); \draw[green] (ref4.south west) -- ++(-5cm,0); \end{scope} \end{tikzpicture} \end{center} %%-------------------------------------------------------- \subsection*{Inner, Outer and Angle for Shape Off Origin} The box should closely contain picture if {\tt anchorborder} is working correctly. \bigskip \begin{center} \begin{tikzpicture}[framed] \markOrigC{black} \draw (2pt,0) node[anchor=west]{\tt \tiny origin}; %% The test shape \node at (70pt,40pt) [\testshape, draw, red, minimum width=60pt, minimum height=40pt ] (node) {}; %% outer test line \path (node); \pgfgetlastxy{\macrox}{\macroy} \coordinate (Xout) at (\macrox+20pt,\macroy+40pt); \draw (Xout) circle(3pt); \draw [help lines] (node.center) -- (Xout); \draw [->, >=latex',green] (Xout) -- (node); % <<< %% inner test line \path (node); \pgfgetlastxy{\macrox}{\macroy} \coordinate (Xin) at (\macrox-5pt,\macroy-5pt); \draw (Xin) circle(3pt); \draw [help lines,shorten >=-1cm] (node.center) -- (Xin); \draw [->, >=latex',green] (Xin) -- (node); % <<< %% test angle \def\angle{120} \draw [help lines] (node.center) -- ++(\angle:1.5cm); \draw[green] (node.\angle) circle[radius=2pt]; % <<< \end{tikzpicture} \end{center} \end{document} \endinput %% %% End of file `testsample.tex'.