summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/jigsaw/jigsaw.sty
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/jigsaw/jigsaw.sty')
-rw-r--r--graphics/pgf/contrib/jigsaw/jigsaw.sty36
1 files changed, 24 insertions, 12 deletions
diff --git a/graphics/pgf/contrib/jigsaw/jigsaw.sty b/graphics/pgf/contrib/jigsaw/jigsaw.sty
index ad8bcc9674..49f2b618be 100644
--- a/graphics/pgf/contrib/jigsaw/jigsaw.sty
+++ b/graphics/pgf/contrib/jigsaw/jigsaw.sty
@@ -12,7 +12,7 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesPackage{jigsaw}[2018/11/09 v0.1 Draw jigsaw pieces in TikZ]
+\ProvidesPackage{jigsaw}[2023/02/21 version v0.4 Draw jigsaw pieces in TikZ]
\RequirePackage{tikz}
@@ -31,37 +31,45 @@
\pgfmathparse{int(random(1,120))}
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+\newcommand{\jigsaw@getscaling}{
+ \pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+ \pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))*sqrt(abs((\pgf@xx/1cm)*(\pgf@yy/1cm)-(\pgf@xy/1cm)*(\pgf@yx/1cm)))}%
+}
+
\newcommand{\side}[1]{
(0.0,#1*0.00) .. controls (0.0,#1*0.00) and (0.4,#1*-0.04) ..
(0.4,#1*0.04) .. controls (0.4,#1*0.11) and (0.2,#1*0.26) ..
(0.5,#1*0.26) .. controls (0.8,#1*0.26) and (0.6,#1*0.11) ..
(0.6,#1*0.04) .. controls (0.6,#1*-0.04) and (1.0,#1*0.00) ..
-(1.0,#1*0.00) -- ++(.5\pgflinewidth,0)
+(1.0,#1*0.00) -- ++(.5\pgflinewidth/\scalingfactor,0)
}
-\newcommand{\halfpiece}[2]{
+\newcommand{\halfpiece}[2]{%
+ \jigsaw@getscaling%
\draw \side{#1} [rotate around={90:(0.5,0.5)}] \side{#2};
}
-\newcommand{\piece}[5][\@nil]{
- \def\tmp{#1}%
- \ifx\tmp\@nnil
- \else
+\NewDocumentCommand{\piece}{ommmm}{%
+ \jigsaw@getscaling%
+ \IfValueT{#1}{%
\fill[#1]
\side{#2}
[rotate around={90:(0.5,0.5)}] -- \side{#3}
[rotate around={90:(0.5,0.5)}] -- \side{#4}
[rotate around={90:(0.5,0.5)}] -- \side{#5}
-- cycle;
- \fi
+ }%
\draw
\side{#2}
[rotate around={90:(0.5,0.5)}] -- \side{#3}
[rotate around={90:(0.5,0.5)}] -- \side{#4}
- [rotate around={90:(0.5,0.5)}] -- \side{#5};
+ [rotate around={90:(0.5,0.5)}] -- \side{#5}
+ -- cycle;
}
-\newcommand{\tile}[5][\@nil]{%
+\NewDocumentCommand{\tile}{ommmm}{%
\begin{tikzpicture}
\path (0,0) rectangle (1,0.97);
\begin{pgfinterruptboundingbox}
@@ -97,8 +105,10 @@
\tikzset{
pics/piece/.style n args={4}{
- inherit options/.code={\csname tikz@options\endcsname},inherit options,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
code = {
+ \jigsaw@getscaling%
\path (0,0) rectangle (1,1);
\begin{pgfinterruptboundingbox}
\path[pic actions]
@@ -107,8 +117,10 @@
[rotate around={90:(0.5,0.5)}] -- \side{#3}
[rotate around={90:(0.5,0.5)}] -- \side{#4}
-- cycle;
+ % expansion trick from https://topanswers.xyz/tex?q=3340#a3677
+ \node[draw=none,fill=none,style/.expand once=\tikzpictextoptions] at (0.5,0.5) {\tikzpictext};
\end{pgfinterruptboundingbox}
}
},
piece/.search also={,/tikz,/pgf},
-} \ No newline at end of file
+}