summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/penrose/penrose_code.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/penrose/penrose_code.dtx')
-rw-r--r--graphics/pgf/contrib/penrose/penrose_code.dtx1588
1 files changed, 995 insertions, 593 deletions
diff --git a/graphics/pgf/contrib/penrose/penrose_code.dtx b/graphics/pgf/contrib/penrose/penrose_code.dtx
index be7030312f..cdc6356965 100644
--- a/graphics/pgf/contrib/penrose/penrose_code.dtx
+++ b/graphics/pgf/contrib/penrose/penrose_code.dtx
@@ -34,7 +34,7 @@ See http://www.latex-project.org/lppl.txt
\endpreamble
\postamble
-Copyright (C) 2014-2018 by Andrew Stacey <loopspace@mathforge.org>
+Copyright (C) 2014-2019 by Andrew Stacey <loopspace@mathforge.org>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -46,18 +46,18 @@ 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 penrose3.dtx
+This work consists of the files penrose_code.dtx
penrose.tex
and the derived files penrose.ins
- penrose3.pdf
+ penrose_code.pdf
penrose.pdf
tikzlibrarypenrose.code.tex
- README
+ README.txt
\endpostamble
\usedir{tex/latex/penrose}
\generate{
- \file{tikzlibrarypenrose.code.tex}{\from{\jobname.dtx}{library}}
+ \file{tikzlibrarypenrose.code.tex}{\from{\jobname.dtx}{package}}
}
%</install>
%<install>\endbatchfile
@@ -78,11 +78,11 @@ and the derived files penrose.ins
\fi
%</internal>
%<*driver>
-\documentclass[full]{l3doc}
+\documentclass{l3doc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
-\usepackage{trace}
+%\usepackage{trace}
\usetikzlibrary{penrose}
%\traceoff
%\usepackage[numbered]{hypdoc}
@@ -139,6 +139,8 @@ and the derived files penrose.ins
%
%
% \changes{1.0}{2014/05/07}{Converted to DTX file}
+% \changes{1.2}{2019/02/23}{Added general tile creation code}
+% \changes{1.4}{2021/01/22}{Adapted to latest version of spath3}
%
% \DoNotIndex
% {
@@ -149,39 +151,50 @@ and the derived files penrose.ins
% \endcsname,
% }%
%
+%
% \providecommand*{\url}{\texttt}
+% \GetFileInfo{tikzlibrarypenrose.code.tex}
% \title{The \textsf{Penrose} package}
% \author{Andrew Stacey\texorpdfstring{\\ \url{loopspace@mathforge.org}}{}}
-% \date{1.0 from 2018/07/10}
+% \date{\fileversion~from \filedate}
%
%
% \maketitle
%
+% \tableofcontents
+%
+% \begin{documentation}
%
% \section{Introduction}
%
% This is a TikZ library for drawing Penrose tiles (kite/dart, rhombus, and pentagon versions).
% It provides two methods of drawing: one in which an automatic pattern is built, and one where the tiles can be placed ``by hand''.
% The tiles can be shaped and (hopefully!) still fit together.
-% For user documentation, see the \Verb+penrose.pdf+ file.
+% For full user documentation, see the \Verb+penrose.pdf+ file.
%
-% \StopEventually{}
%
-% \section{Implementation}
+% \end{documentation}
%
-% \iffalse
-%<*library>
-% \fi
-% \subsection{Initialisation}
+% \begin{implementation}
%
+% \section{Implementation}
%
% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% \begin{macrocode}
%<@@=penrose>
% \end{macrocode}
+%
+% \subsection{Initialisation}
+%
+%
% We use the \Verb+spath3+ library for manipulating the paths that will make up the tiles.
%
% \begin{macrocode}
+\ProvidesExplFile {tikzlibrarypenrose.code.tex} {2021/01/22} {1.4} {TikZ pics for Penrose and other tiles}
\RequirePackage{spath3}
+\usetikzlibrary{spath3}
% \end{macrocode}
% Now we move in to the realm of \LaTeX3.
% \begin{macrocode}
@@ -189,50 +202,75 @@ and the derived files penrose.ins
% \end{macrocode}
%
% Start with some basic paths (lines) for the sides of the tiles so that we know that we have well-defined tiles at the outset.
-%
-% \begin{macrocode}
-\MakeSPath{Penrose path a}
- {
- \pgfsyssoftpath@movetotoken{0pt}{0pt}
- \pgfsyssoftpath@linetotoken{1pt}{0pt}
- }
-\SPathPrepare{Penrose path a}
-\CloneSPath {Penrose path a}{Penrose path b}
-\CloneSPath {Penrose path a}{Penrose path c}
-\CloneSPath {Penrose path a}{Penrose path d}
-\CloneSPath {Penrose path a}{Penrose path A}
-\CloneSPath {Penrose path a}{Penrose path B}
-\CloneSPath {Penrose path a}{Penrose path C}
-\CloneSPath {Penrose path a}{Penrose path D}
-% \end{macrocode}
-%
-% \begin{variable}{\l__penrose_tmpa_fp, \l__penrose_tmpb_fp, \l__penrose_tmpc_fp, \l__penrose_tmpa_tl, \l__penrose_tmpb_tl, \l__penrose_tmpc_tl}
+% These are globally defined as we will frequently want to define them in one tikzpicture and use them in another.
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_side_a_tl
+\tl_new:N \g_@@_side_b_tl
+\tl_new:N \g_@@_side_c_tl
+\tl_new:N \g_@@_side_d_tl
+\tl_new:N \g_@@_side_e_tl
+\tl_new:N \g_@@_side_A_tl
+\tl_new:N \g_@@_side_B_tl
+\tl_new:N \g_@@_side_C_tl
+\tl_new:N \g_@@_side_D_tl
+\tl_new:N \g_@@_side_E_tl
+\tl_gset:Nn \g_@@_side_a_tl
+{
+ \pgfsyssoftpath@movetotoken{0pt}{0pt}
+ \pgfsyssoftpath@linetotoken{1pt}{0pt}
+}
+\tl_gset_eq:NN \g_@@_side_b_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_c_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_d_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_e_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_A_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_B_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_C_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_D_tl \g_@@_side_a_tl
+\tl_gset_eq:NN \g_@@_side_E_tl \g_@@_side_a_tl
+% \end{macrocode}
+%
+% \begin{variable}{\l_@@_tmpa_fp, \l_@@_tmpb_fp, \l_@@_tmpc_fp, \l_@@_tmpa_tl, \l_@@_tmpb_tl, \l_@@_tmpc_tl, \l_@@_tmpd_tl, \l_@@_tmpa_int, \l_@@_tmpb_int, \l_@@_xa_dim, \l_@@_ya_dim, \l_@@_xb_dim, \l_@@_yb_dim, \l_@@_tmpa_prop}
% We need a few temporary variables to hold intermediate calculations.
%
% \begin{macrocode}
-\fp_new:N \l__penrose_tmpa_fp
-\fp_new:N \l__penrose_tmpb_fp
-\fp_new:N \l__penrose_tmpc_fp
-\tl_new:N \l__penrose_tmpa_tl
-\tl_new:N \l__penrose_tmpb_tl
-\tl_new:N \l__penrose_tmpc_tl
+\fp_new:N \l_@@_tmpa_fp
+\fp_new:N \l_@@_tmpb_fp
+\fp_new:N \l_@@_tmpc_fp
+\str_new:N \l_@@_tmpa_str
+\str_new:N \l_@@_tmpb_str
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+\tl_new:N \l_@@_tmpc_tl
+\tl_new:N \l_@@_tmpd_tl
+\tl_new:N \l_@@_tmp_tile_path_tl
+\tl_new:N \g_@@_smuggle_tl
+\int_new:N \l_@@_tmpa_int
+\int_new:N \l_@@_tmpb_int
+\dim_new:N \l_@@_xa_dim
+\dim_new:N \l_@@_ya_dim
+\dim_new:N \l_@@_xb_dim
+\dim_new:N \l_@@_yb_dim
+\prop_new:N \l_@@_tmpa_prop
% \end{macrocode}
% \end{variable}
%
% \subsection{Creating the Tiles}
%
-% \begin{macro}[internal]{\penrose_normalise_path:n}
+% \begin{macro}[internal]{\@@_normalise_path:Nn}
% When defining the path for a side, we normalise so that it starts at the origin and ends at \Verb+(1pt,0pt)+.
% \begin{macrocode}
-\cs_new_nopar:Npn \penrose_normalise_path:n #1
+\cs_new_nopar:Npn \@@_normalise_path:Nn #1#2
{
% \end{macrocode}
% Get the initial point of the path and convert to floating point.
% \begin{macrocode}
- \spath_get:nnN {#1} {initial point} \l__penrose_tmpa_tl
- \fp_set:Nn \l__penrose_tmpa_fp {\tl_head:N \l__penrose_tmpa_tl}
- \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
- \fp_set:Nn \l__penrose_tmpb_fp {\tl_head:N \l__penrose_tmpa_tl}
+ \group_begin:
+ \spath_initialpoint:Nn \l_@@_tmpa_tl {#2}
+ \fp_set:Nn \l_@@_tmpa_fp {\tl_head:N \l_@@_tmpa_tl}
+ \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+ \fp_set:Nn \l_@@_tmpb_fp {\tl_head:N \l_@@_tmpa_tl}
% \end{macrocode}
% Get the final point of the path, and compute the difference of the final and initial points.
%
@@ -245,71 +283,80 @@ and the derived files penrose.ins
% \]
%
% \begin{macrocode}
- \spath_get:nnN {#1} {final point} \l__penrose_tmpa_tl
- \fp_set:Nn \l__penrose_tmpa_fp
- {\tl_head:N \l__penrose_tmpa_tl - \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
- \fp_set:Nn \l__penrose_tmpb_fp
- {\tl_head:N \l__penrose_tmpa_tl - \l__penrose_tmpb_fp}
+ \spath_finalpoint:Nn \l_@@_tmpa_tl {#2}
+ \fp_set:Nn \l_@@_tmpa_fp
+ {\tl_head:N \l_@@_tmpa_tl - \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+ \fp_set:Nn \l_@@_tmpb_fp
+ {\tl_head:N \l_@@_tmpa_tl - \l_@@_tmpb_fp}
% \end{macrocode}
% Now compute the square of the length of the path for scaling.
% \begin{macrocode}
- \fp_set:Nn \l__penrose_tmpc_fp
- {\l__penrose_tmpa_fp^2 + \l__penrose_tmpb_fp^2}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_tmpa_fp/\l__penrose_tmpc_fp}
- \fp_set:Nn \l__penrose_tmpb_fp {\l__penrose_tmpb_fp/\l__penrose_tmpc_fp}
- \fp_set:Nn \l__penrose_tmpc_fp {-\l__penrose_tmpb_fp}
+ \fp_set:Nn \l_@@_tmpc_fp
+ {\l_@@_tmpa_fp^2 + \l_@@_tmpb_fp^2}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_tmpa_fp/\l_@@_tmpc_fp}
+ \fp_set:Nn \l_@@_tmpb_fp {\l_@@_tmpb_fp/\l_@@_tmpc_fp}
+ \fp_set:Nn \l_@@_tmpc_fp {-\l_@@_tmpb_fp}
% \end{macrocode}
% Now construct the matrix.
% \begin{macrocode}
- \tl_set:Nx \l__penrose_tmpb_tl
+ \tl_set:Nx \l_@@_tmpb_tl
{
- {\fp_use:N \l__penrose_tmpa_fp}
- {\fp_use:N \l__penrose_tmpb_fp}
- {\fp_use:N \l__penrose_tmpc_fp}
- {\fp_use:N \l__penrose_tmpa_fp}
+ {\fp_use:N \l_@@_tmpa_fp}
+ {\fp_use:N \l_@@_tmpc_fp} % swapped
+ {\fp_use:N \l_@@_tmpb_fp} % swapped
+ {\fp_use:N \l_@@_tmpa_fp}
}
% \end{macrocode}
% Get the initial point back again for the translation part.
% \begin{macrocode}
- \spath_get:nnN {#1} {initial point} \l__penrose_tmpa_tl
+ \spath_initialpoint:Nn \l_@@_tmpa_tl {#2}
% \end{macrocode}
% But we need to premultiply by the matrix because of how the transformations are applied.
% \begin{macrocode}
- \fp_set:Nn \l__penrose_tmpa_fp
+ \fp_set:Nn \l_@@_tmpa_fp
{
- (-1) * \l__penrose_tmpa_fp * \tl_head:N \l__penrose_tmpa_tl
- + (-1) * \l__penrose_tmpb_fp * \tl_tail:N \l__penrose_tmpa_tl
+ (-1) * \l_@@_tmpa_fp * \tl_head:N \l_@@_tmpa_tl
+ + (-1) * \l_@@_tmpb_fp * \tl_tail:N \l_@@_tmpa_tl
}
- \fp_set:Nn \l__penrose_tmpb_fp
+ \fp_set:Nn \l_@@_tmpb_fp
{
- (-1) * \l__penrose_tmpa_fp * \tl_tail:N \l__penrose_tmpa_tl
- + \l__penrose_tmpb_fp * \tl_head:N \l__penrose_tmpa_tl
+ (-1) * \l_@@_tmpa_fp * \tl_tail:N \l_@@_tmpa_tl
+ + \l_@@_tmpb_fp * \tl_head:N \l_@@_tmpa_tl
}
% \end{macrocode}
% Finally, we apply the transformation to the path.
% \begin{macrocode}
- \tl_put_right:Nx \l__penrose_tmpb_tl {
- {\fp_to_dim:N \l__penrose_tmpa_fp}
- {\fp_to_dim:N \l__penrose_tmpb_fp}
+ \tl_put_right:Nx \l_@@_tmpb_tl {
+ {\fp_to_dim:N \l_@@_tmpa_fp}
+ {\fp_to_dim:N \l_@@_tmpb_fp}
}
- \spath_transform:nV {#1} \l__penrose_tmpb_tl
+ \spath_transform:NnV \l_@@_tmpa_tl {#2} \l_@@_tmpb_tl
+ \tl_gset_eq:NN \g_@@_smuggle_tl \l_@@_tmpa_tl
+ \group_end:
+ \tl_set_eq:NN #1 \g_@@_smuggle_tl
+ \tl_gclear:N \g_@@_smuggle_tl
}
+\cs_generate_variant:Nn \@@_normalise_path:Nn {NV, cn, cV}
+\cs_new_protected_nopar:Npn \@@_normalise_path:N #1
+{
+ \@@_normalise_path:NV #1#1
+}
+\cs_generate_variant:Nn \@@_normalise_path:N {c}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\SetPenrosePath}
+% \begin{function}{\SetPenrosePath}
% This sets the path corresponding to a particular side to the current path, and normalises it.
% \begin{macrocode}
\NewDocumentCommand \SetPenrosePath { m }
{
- \pgfsyssoftpath@getcurrentpath\l__penrose_tmpa_tl
- \spath_clear_new:n {Penrose path #1}
- \spath_put:nnV {Penrose path #1} {path} \l__penrose_tmpa_tl
- \penrose_normalise_path:n {Penrose path #1}
+ \pgfsyssoftpath@getcurrentpath\l_@@_tmpa_tl
+ \@@_normalise_path:N \l_@@_tmpa_tl
+ \tl_gset_eq:cN {g_@@_side_#1_tl} \l_@@_tmpa_tl
}
% \end{macrocode}
-% \end{macro}
+% \end{function}
%
% \begin{macro}[internal]{\tikz_scan_point:n}
% This is a wrapper around \Verb+\tikz@scan@one@point+ to make it easier to use with \LaTeX3 variables.
@@ -322,32 +369,32 @@ and the derived files penrose.ins
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\penrose_make_tile:nnn}
+% \begin{macro}[internal]{\@@_make_tile:nnn}
% This builds the tile path from its pieces.
% The arguments are the name of the tile, the descriptions of the sides, and a token list of the coordinates.
% \begin{macrocode}
-\cs_new_nopar:Npn \penrose_make_tile:nnn #1#2#3
+\cs_new_nopar:Npn \@@_make_tile:nnn #1#2#3
{
% \end{macrocode}
% Get the first coordinate and initialise the path with a move to this point.
% \begin{macrocode}
- \tl_set:Nn \l__penrose_tmpa_tl {#3}
- \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
- \tl_set:Nn \l__penrose_tmpa_tl {\pgfsyssoftpath@movetotoken}
- \tikz_scan_point:V \l__penrose_tmpb_tl
- \tl_put_right:Nx \l__penrose_tmpa_tl
+ \group_begin:
+ \tl_set:Nn \l_@@_tmpa_tl {#3}
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl}
+ \tl_set:Nn \l_@@_tmpa_tl {\pgfsyssoftpath@movetotoken}
+ \tikz_scan_point:V \l_@@_tmpb_tl
+ \tl_put_right:Nx \l_@@_tmpa_tl
{
{\dim_use:N \pgf@x}{\dim_use:N \pgf@y}
}
- \spath_clear_new:n {Penrose path tile #1}
- \spath_put:nnV {Penrose path tile #1} {path} \l__penrose_tmpa_tl
+ \tl_set_eq:NN \l_@@_tmp_tile_path_tl \l_@@_tmpa_tl
% \end{macrocode}
% Now we have our path initialised, we can start appending the side paths according to the specification in the second argument.
%
% We append the initial coordinate to the end of the list to make a closed cycle.
% \begin{macrocode}
- \tl_set:Nn \l__penrose_tmpa_tl {#3}
- \tl_put_right:Nx \l__penrose_tmpa_tl {{\tl_head:N \l__penrose_tmpa_tl}}
+ \tl_set:Nn \l_@@_tmpa_tl {#3}
+ \tl_put_right:Nx \l_@@_tmpa_tl {{\tl_head:N \l_@@_tmpa_tl}}
% \end{macrocode}
% Now we walk through the description of the sides, adding the specified paths to our tile path.
% \begin{macrocode}
@@ -355,66 +402,72 @@ and the derived files penrose.ins
% \end{macrocode}
% Clone the path for this side.
% \begin{macrocode}
- \spath_clone:nn {Penrose path ##1} {Penrose path tmpa}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_head:n {##1}}
+ \tl_set_eq:Nc \l_@@_tmpd_tl {g_@@_side_ \tl_use:N \l_@@_tmpc_tl _tl}
% \end{macrocode}
% Strip off the next coordinate, and convert it to a point.
% \begin{macrocode}
- \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
- \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
- \tikz_scan_point:V \l__penrose_tmpb_tl
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl}
+ \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+ \tikz_scan_point:V \l_@@_tmpb_tl
% \end{macrocode}
% Store the resulting coordinate.
% \begin{macrocode}
- \fp_set:Nn \l__penrose_tmpa_fp { \pgf@x }
- \fp_set:Nn \l__penrose_tmpb_fp { \pgf@y }
+ \fp_set:Nn \l_@@_tmpa_fp { \pgf@x }
+ \fp_set:Nn \l_@@_tmpb_fp { \pgf@y }
% \end{macrocode}
% Now get the next coordinate.
% \begin{macrocode}
- \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
- \tikz_scan_point:V \l__penrose_tmpb_tl
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl}
+ \tikz_scan_point:V \l_@@_tmpb_tl
% \end{macrocode}
% We want the difference between the two coordinates.
% \begin{macrocode}
- \fp_set:Nn \l__penrose_tmpa_fp {\pgf@x - \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpb_fp {\pgf@y - \l__penrose_tmpb_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\pgf@x - \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpb_fp {\pgf@y - \l_@@_tmpb_fp}
% \end{macrocode}
% This is converted into a transformation matrix.
% \begin{macrocode}
- \fp_set:Nn \l__penrose_tmpc_fp {-\l__penrose_tmpb_fp}
- \tl_set:Nx \l__penrose_tmpb_tl
+ \fp_set:Nn \l_@@_tmpc_fp {-\l_@@_tmpb_fp}
+ \tl_set:Nx \l_@@_tmpb_tl
{
- {\fp_use:N \l__penrose_tmpa_fp}
- {\fp_use:N \l__penrose_tmpc_fp}
- {\fp_use:N \l__penrose_tmpb_fp}
- {\fp_use:N \l__penrose_tmpa_fp}
+ {\fp_use:N \l_@@_tmpa_fp}
+ {\fp_use:N \l_@@_tmpb_fp} % not swapped
+ {\fp_use:N \l_@@_tmpc_fp} % not swapped
+ {\fp_use:N \l_@@_tmpa_fp}
{0}
{0}
}
% \end{macrocode}
% The transformation is applied to the cloned path.
% \begin{macrocode}
- \spath_transform:nV {Penrose path tmpa} \l__penrose_tmpb_tl
+ \spath_transform:NV \l_@@_tmpd_tl \l_@@_tmpb_tl
% \end{macrocode}
% And this is welded to the tile path.
% \begin{macrocode}
- \spath_weld:nn {Penrose path tile #1} {Penrose path tmpa}
+ \spath_weld:NV \l_@@_tmp_tile_path_tl \l_@@_tmpd_tl
}
% \end{macrocode}
% At the end we close the path.
% \begin{macrocode}
- \spath_close_path:n {Penrose path tile #1}
+ \spath_close:N \l_@@_tmp_tile_path_tl
+ \tl_gset_eq:NN \g_@@_smuggle_tl \l_@@_tmp_tile_path_tl
+ \group_end:
+ \tl_gclear_new:c {g_@@_tile_#1_tl}
+ \tl_gset_eq:cN {g_@@_tile_#1_tl} \g_@@_smuggle_tl
+ \tl_gclear:N \g_@@_smuggle_tl
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\penrose_make_tile:nn}
+% \begin{macro}[internal]{\@@_make_tile:nn}
% A wrapper around the above which allows us to specify the second two arguments as two items in a token list.
% \begin{macrocode}
-\cs_new_nopar:Npn \penrose_make_tile:nn #1#2
+\cs_new_nopar:Npn \@@_make_tile:nn #1#2
{
- \penrose_make_tile:nnn {#1} #2
+ \@@_make_tile:nnn {#1} #2
}
-\cs_generate_variant:Nn \penrose_make_tile:nn {nV}
+\cs_generate_variant:Nn \@@_make_tile:nn {nV}
% \end{macrocode}
% \end{macro}
%
@@ -422,21 +475,28 @@ and the derived files penrose.ins
%
% The tile specifications are contained in a \Verb+prop+.
% \begin{macrocode}
-\prop_new:N \g__penrose_tiles_prop
+\prop_new:N \g_@@_tiles_prop
% \end{macrocode}
%
-% \begin{macro}[internal]{\tl_add_coordinate:Nnn}
+% \begin{macro}[internal]{\@@_add_coordinate:Nnn, \@@_add_coordinate:w}
% Process a coordinate through \Verb+fp+ and adds it to a token list.
% \begin{macrocode}
-\cs_new_nopar:Npn \tl_add_coordinate:Nnn #1#2#3 {
- \fp_set:Nn \l__penrose_tmpa_fp{#2}
- \fp_set:Nn \l__penrose_tmpb_fp{#3}
+\cs_new_nopar:Npn \@@_add_coordinate:Nnn #1#2#3 {
+ \fp_set:Nn \l_@@_tmpa_fp{#2}
+ \fp_set:Nn \l_@@_tmpb_fp{#3}
\tl_put_right:Nx #1
{
- {(\fp_use:N \l__penrose_tmpa_fp, \fp_use:N \l__penrose_tmpb_fp)}
+ {(\fp_use:N \l_@@_tmpa_fp, \fp_use:N \l_@@_tmpb_fp)}
}
}
% \end{macrocode}
+% Wrapper around the add coordinate command to split at a comma.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_add_coordinate:w #1#2,#3 \q_stop
+{
+ \@@_add_coordinate:Nnn \l_@@_tmpa_tl {#2}{#3}
+}
+% \end{macrocode}
% \end{macro}
%
% Now we specify the tiles.
@@ -446,182 +506,186 @@ and the derived files penrose.ins
% \begin{itemize}
% \item Thin Rhombus.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(18)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{sind(18)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(18)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{-sind(18)}
-\prop_gput:Nnx \g__penrose_tiles_prop {thin~ rhombus}
-{{a A B b} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {thin~ rhombus}
+{{a A B b} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Thick Rhombus.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(36)}{sind(36)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(36)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(36)}{-sind(36)}
-\prop_gput:Nnx \g__penrose_tiles_prop {thick~ rhombus}
-{{B a A b} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {thick~ rhombus}
+{{B a A b} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Dart.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{2*sind(18)*cosd(108)}{2*sind(18)*sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*sind(18)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*sind(18)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{2*sind(18)*cosd(108)}{-2*sind(18)*sind(108)}
-\prop_gput:Nnx \g__penrose_tiles_prop {dart}
-{{c a A C} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {dart}
+{{c a A C} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Kite.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(36)}{sind(36)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(36)}{-sind(36)}
-\prop_gput:Nnx \g__penrose_tiles_prop {kite}
-{{a c C A} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {kite}
+{{a c C A} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Golden Triangle.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{sind(18)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{-sind(18)}
-\prop_gput:Nnx \g__penrose_tiles_prop {golden~ triangle}
-{{a c b} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {golden~ triangle}
+{{a c b} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Reverse Golden Triangle.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{sind(18)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{-sind(18)}
-\prop_gput:Nnx \g__penrose_tiles_prop {reverse~ golden~ triangle}
-{{B C A} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {reverse~ golden~ triangle}
+{{B C A} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Golden Gnomon
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(36)}{sind(36)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(36)}{0}
-\prop_gput:Nnx \g__penrose_tiles_prop {golden~ gnomon}
-{{C b A} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {golden~ gnomon}
+{{C b A} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Reverse Golden Gnomon
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
-\prop_gput:Nnx \g__penrose_tiles_prop {reverse~ golden~ gnomon}
-{{a B c} {\tl_use:N \l__penrose_tmpa_tl}}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(36)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(36)}{-sind(36)}
+\prop_gput:Nnx \g_@@_tiles_prop {reverse~ golden~ gnomon}
+{{a B c} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Primary Pentagon (pentagon 5)
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(108)}{sind(108)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{1+cosd(72)+cosd(144)}{sind(72)+sind(144)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1+cosd(72)}{sind(72)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
-\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 5}
-{{a a a a a} {\tl_use:N \l__penrose_tmpa_tl}}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1+cosd(72)}{sind(72)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1}{0}
+\prop_gput:Nnx \g_@@_tiles_prop {pentagon~ 5}
+{{a a a a a} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Secondary Pentagon (pentagon 3)
% \begin{macrocode}
-\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 3}
-{{A b a a b} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {pentagon~ 3}
+{{A b a a b} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Tertiary Pentagon (pentagon 2)
% \begin{macrocode}
-\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 2}
-{{d A c c A} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {pentagon~ 2}
+{{d A e c A} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Pentagram
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1-cosd(36)}{-sind(36)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1-cosd(36)}{-sind(36)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{1-cosd(36)-cosd(108)}{-sind(36)-sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{-sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(108)}{-sind(108)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{-1+3*cosd(108)+cosd(36)}{-sind(36)-sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{-1+2*cosd(108)+cosd(36)}{-sind(36)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {-1+2*cosd(108)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(108)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\prop_gput:Nnx \g__penrose_tiles_prop {pentagram}
-{{C C C C C C C C C C} {\tl_use:N \l__penrose_tmpa_tl}}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {-1+2*cosd(108)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(108)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(108)}{sind(108)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\prop_gput:Nnx \g_@@_tiles_prop {pentagram}
+{{C E C E C E C E C E} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Boat
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {-1+2*cosd(108)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(108)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1-cosd(36)}{-sind(36)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {-1+2*cosd(108)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(108)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(108)}{sind(108)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {1-cosd(36)}{-sind(36)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl
{-1+2*cosd(108)+cosd(36)}{-sind(36)}
-\prop_gput:Nnx \g__penrose_tiles_prop {boat}
-{{C C C C B D B} {\tl_use:N \l__penrose_tmpa_tl}}
+\prop_gput:Nnx \g_@@_tiles_prop {boat}
+{{C E C E B D B} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \item Diamond.
% \begin{macrocode}
-\tl_clear:N \l__penrose_tmpa_tl
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(18)}{0}
-\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
-\prop_gput:Nnx \g__penrose_tiles_prop {diamond}
-{{D B B D} {\tl_use:N \l__penrose_tmpa_tl}}
+\tl_clear:N \l_@@_tmpa_tl
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {0}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{sind(18)}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {2*cosd(18)}{0}
+\@@_add_coordinate:Nnn \l_@@_tmpa_tl {cosd(18)}{-sind(18)}
+\prop_gput:Nnx \g_@@_tiles_prop {diamond}
+{{D B B D} {\tl_use:N \l_@@_tmpa_tl}}
% \end{macrocode}
%
% \end{itemize}
%
-% \begin{macro}[internal]{\MakePenroseTile}
+% \begin{function}{\BakePenroseTile}
% This is the user wrapper around the tile creation macros.
% \begin{macrocode}
-\NewDocumentCommand \MakePenroseTile {m}
+\NewDocumentCommand \BakePenroseTile {m}
{
- \prop_get:NnN \g__penrose_tiles_prop {#1} \l__penrose_tmpa_tl
- \penrose_make_tile:nV {#1} \l__penrose_tmpa_tl
+ \prop_get:NnN \g_@@_tiles_prop {#1} \l_@@_tmpa_tl
+ \@@_make_tile:nV {#1} \l_@@_tmpa_tl
}
% \end{macrocode}
-% \end{macro}
+% For backwards compatibility.
+% \begin{macrocode}
+\cs_set_eq:NN \MakePenroseTile \BakePenroseTile
+% \end{macrocode}
+% \end{function}
%
-% \begin{macro}[internal]{\UsePenroseTile}
+% \begin{function}{\UsePenroseTile}
% This is the command that actually places a tile on the page.
% The first argument is optional and is for styling.
% \begin{macrocode}
@@ -631,36 +695,36 @@ and the derived files penrose.ins
% We need to transform the tile to correspond to the current transformation matrix.
% To ensure that we only transform the current tile, we clone it first.
% \begin{macrocode}
- \spath_clone:nn {Penrose path tile #2} {Penrose path tmpa}
+ \tl_set_eq:Nc \l_@@_tmp_tile_path_tl {g_@@_tile_#2_tl}
% \end{macrocode}
% The transformation matrix returned by PGF appears to be transposed from what it should be.
% (This needs a little more investigation, it might be that I've implemented the multiplication incorrectly here.)
% \begin{macrocode}
- \pgfgettransform \l__penrose_tmpa_tl
- \tl_clear:N \l__penrose_tmpb_tl
- \tl_set:Nx \l__penrose_tmpb_tl {{\tl_head:N \l__penrose_tmpa_tl}}
- \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
- \tl_put_right:Nx \l__penrose_tmpb_tl
- {
- {\tl_item:Nn \l__penrose_tmpa_tl {2}}
- }
- \tl_put_right:Nx \l__penrose_tmpb_tl
- {
- {\tl_item:Nn \l__penrose_tmpa_tl {1}}
- }
- \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
- \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
- \tl_put_right:NV \l__penrose_tmpb_tl \l__penrose_tmpa_tl
+ \pgfgettransform \l_@@_tmpa_tl
+% \tl_clear:N \l_@@_tmpb_tl
+% \tl_set:Nx \l_@@_tmpb_tl {{\tl_head:N \l_@@_tmpa_tl}}
+% \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+% \tl_put_right:Nx \l_@@_tmpb_tl
+% {
+% {\tl_item:Nn \l_@@_tmpa_tl {1}}
+% }
+% \tl_put_right:Nx \l_@@_tmpb_tl
+% {
+% {\tl_item:Nn \l_@@_tmpa_tl {2}}
+% }
+% \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+% \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+% \tl_put_right:NV \l_@@_tmpb_tl \l_@@_tmpa_tl
% \end{macrocode}
% Apply the transformation, protocol the path, and render it.
% \begin{macrocode}
- \spath_transform:nV {Penrose path tmpa} \l__penrose_tmpb_tl
- \spath_protocol_path:n {Penrose path tmpa}
- \spath_tikz_path:nn {#1}{Penrose path tmpa}
+ \spath_transform:NV \l_@@_tmp_tile_path_tl \l_@@_tmpa_tl
+ \spath_tikz_path:nV {#1} \l_@@_tmp_tile_path_tl
}
% \end{macrocode}
-% \end{macro}
+% \end{function}
%
+% \begin{macro}{save Penrose path}
% This is a style for a user to take a path and make it into the path for one of the sides.
% It needs to store both that side and the reverse.
% \begin{macrocode}
@@ -670,60 +734,395 @@ and the derived files penrose.ins
% \end{macrocode}
% Get the current path.
% \begin{macrocode}
- \pgfsyssoftpath@getcurrentpath\l__penrose_tmpa_tl
-% \end{macrocode}
-% Clear the receiving path, and store the current path in it.
-% \begin{macrocode}
- \spath_clear_new:n {Penrose path #1}
- \spath_put:nnV {Penrose path #1} {path} \l__penrose_tmpa_tl
+ \pgfsyssoftpath@getcurrentpath\l_@@_tmpa_tl
% \end{macrocode}
-% Normalise the path.
+% Normalise the path and save.
% \begin{macrocode}
- \penrose_normalise_path:n {Penrose path #1}
+ \@@_normalise_path:N \l_@@_tmpa_tl
+ \tl_gclear_new:c {g_@@_side_#1_tl}
+ \tl_gset_eq:cN {g_@@_side_#1_tl} \l_@@_tmpa_tl
% \end{macrocode}
% Now create the reverse path.
% The name is the upper case version.
% \begin{macrocode}
- \tex_uppercase:D {\tl_set:Nx \l__penrose_tmpa_tl {#1}}
+ \tl_set:Nx \l_@@_tmpb_tl {\str_uppercase:n {#1}}
% \end{macrocode}
-% Clone the path.
+% Reverse the path, and relocate to the interval \([0,1]\).
% \begin{macrocode}
- \spath_clone:nn {Penrose path #1}
- {Penrose path \tl_use:N \l__penrose_tmpa_tl }
-% \end{macrocode}
-% Reverse it.
-% \begin{macrocode}
- \spath_reverse:n {Penrose path \tl_use:N \l__penrose_tmpa_tl}
-% \end{macrocode}
-% Swap the start and end.
-% \begin{macrocode}
- \spath_transform:nnnnnnn {Penrose path \tl_use:N \l__penrose_tmpa_tl}
- {-1} {0} {0} {-1} {1} {0}
+ \spath_reverse:N \l_@@_tmpa_tl
+ \spath_transform:Nnnnnnn \l_@@_tmpa_tl {-1} {0} {0} {-1} {1} {0}
+ \tl_gclear_new:c {g_@@_side_ \tl_use:N \l_@@_tmpb_tl _tl}
+ \tl_gset_eq:cN {g_@@_side_ \tl_use:N \l_@@_tmpb_tl _tl} \l_@@_tmpa_tl
}
},
+ clone~ Penrose~ side~ path/.style~ 2~ args={
+ spath/set~ name=Penrose~side,
+ spath/clone~ global={#1}{#2}
+ },
+ spath/prefix/Penrose~side/.style={
+ spath/set~ prefix=g_@@_side_,
+ },
+ spath/suffix/Penrose~side/.style={
+ spath/set~ suffix=_tl,
+ },
+ clone~ Penrose~ tile~ path/.style~ 2~ args={
+ spath/set~ name=Penrose~tile,
+ spath/clone~ global={#1}{#2}
+ },
+ spath/prefix/Penrose~tile/.style={
+ spath/set~ prefix=g_@@_tile_,
+ },
+ spath/suffix/Penrose~tile/.style={
+ spath/set~ suffix=_tl,
+ },
expand~ key/.code={
\exp_args:NV \pgfkeysalso #1
}
}
% \end{macrocode}
+% \end{macro}
%
% Create the basic tile shapes.
% \begin{macrocode}
-\MakePenroseTile {thin~ rhombus}
-\MakePenroseTile {thick~ rhombus}
-\MakePenroseTile {dart}
-\MakePenroseTile {kite}
-\MakePenroseTile {golden~ triangle}
-\MakePenroseTile {reverse~ golden~ triangle}
-\MakePenroseTile {golden~ gnomon}
-\MakePenroseTile {reverse~ golden~ gnomon}
-\MakePenroseTile {pentagon~ 5}
-\MakePenroseTile {pentagon~ 3}
-\MakePenroseTile {pentagon~ 2}
-\MakePenroseTile {pentagram}
-\MakePenroseTile {boat}
-\MakePenroseTile {diamond}
+\BakePenroseTile {thin~ rhombus}
+\BakePenroseTile {thick~ rhombus}
+\BakePenroseTile {dart}
+\BakePenroseTile {kite}
+\BakePenroseTile {golden~ triangle}
+\BakePenroseTile {reverse~ golden~ triangle}
+\BakePenroseTile {golden~ gnomon}
+\BakePenroseTile {reverse~ golden~ gnomon}
+\BakePenroseTile {pentagon~ 5}
+\BakePenroseTile {pentagon~ 3}
+\BakePenroseTile {pentagon~ 2}
+\BakePenroseTile {pentagram}
+\BakePenroseTile {boat}
+\BakePenroseTile {diamond}
+% \end{macrocode}
+%
+%
+% \subsection{User-Definable Tiles}
+%
+% The commands in this section are for enabling a user to define their own tile.
+%
+%
+% \begin{macro}[internal]{\@@_transform_side:nn}
+% Apply a transformation to make a given side lie on the x-axis.
+% First argument is the tile, second is the side.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_transform_side:nn #1#2
+{
+% \end{macrocode}
+% Get our tile data.
+% \begin{macrocode}
+ \prop_get:NnN \g_@@_tiles_prop {#1} \l_@@_tmpa_tl
+% \end{macrocode}
+% Start with the edge list.
+%
+% Initialise the counter.
+% \begin{macrocode}
+ \int_zero:N \l_@@_tmpb_int
+ \int_incr:N \l_@@_tmpb_int
+% \end{macrocode}
+% Get the path type list.
+%
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl}
+% \end{macrocode}
+%
+% Iterate through the path type list, looking for the requested path.
+% \begin{macrocode}
+ \tl_map_inline:Nn \l_@@_tmpc_tl {
+ \str_if_eq:nnT {##1} {#2} {
+ \tl_map_break:
+ }
+ \int_incr:N \l_@@_tmpb_int
+ }
+% \end{macrocode}
+% Get the coordinate list.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_tail:N \l_@@_tmpa_tl}
+% \end{macrocode}
+% Strip off the outer braces.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_item:Nn \l_@@_tmpc_tl {1}}
+% \end{macrocode}
+% Add the first coordinate at the end.
+% \begin{macrocode}
+ \tl_put_right:Nx \l_@@_tmpc_tl
+ {{\tl_item:Nn \l_@@_tmpc_tl {1}}}
+% \end{macrocode}
+% Get the coordinates for this edge.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpa_tl
+ {\tl_item:Nn \l_@@_tmpc_tl {\int_use:N \l_@@_tmpb_int}}
+ \tl_set:Nx \l_@@_tmpb_tl
+ {\tl_item:Nn \l_@@_tmpc_tl {\int_use:N \l_@@_tmpb_int + 1}}
+% \end{macrocode}
+% Translate second to origin.
+% \begin{macrocode}
+ \tikz_scan_point:V \l_@@_tmpb_tl
+ \dim_set_eq:Nc \l_@@_xa_dim {pgf@x}
+ \dim_set_eq:Nc \l_@@_ya_dim {pgf@y}
+% \end{macrocode}
+% Rotate and scale first to unit x-vector.
+% \begin{macrocode}
+ \tikz_scan_point:V \l_@@_tmpa_tl
+ \dim_set_eq:Nc \l_@@_xb_dim {pgf@x}
+ \dim_set_eq:Nc \l_@@_yb_dim {pgf@y}
+
+ \dim_sub:Nn \l_@@_xb_dim {\l_@@_xa_dim }
+ \dim_sub:Nn \l_@@_yb_dim {\l_@@_ya_dim }
+% \end{macrocode}
+% And normalise the vector along it.
+% \begin{macrocode}
+ \pgfpointnormalised{\pgfpoint{\l_@@_xb_dim}{\l_@@_yb_dim}}
+ \dim_set_eq:Nc \l_@@_xb_dim {pgf@x}
+ \dim_set_eq:Nc \l_@@_yb_dim {pgf@y}
+% \end{macrocode}
+% Now rotate so that the \(x\)--axis lies along the edge.
+% \begin{macrocode}
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\l_@@_xb_dim}{-\l_@@_yb_dim}}
+ {\pgfpoint{\l_@@_yb_dim}{\l_@@_xb_dim}}
+
+ \pgftransformshift{\pgfpoint{-\l_@@_xa_dim}{-\l_@@_ya_dim}}
+
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \tl_if_eq:nnT {nVT}
+\cs_generate_variant:Nn \@@_transform_side:nn {nx,nV}
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\TransformAlongSide}
+% Make this available outside the \LaTeX3 environment.
+% \begin{macrocode}
+\DeclareDocumentCommand \TransformAlongSide {m m}
+{
+ \@@_transform_side:nx {#1}{#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\@@_coordinates_at_vertices:n}
+% This places TikZ coordinates at the vertices of the tile.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_coordinates_at_vertices:n #1
+{
+% \end{macrocode}
+% Get our tile data
+% \begin{macrocode}
+ \prop_get:NnN \g_@@_tiles_prop {#1} \l_@@_tmpa_tl
+% \end{macrocode}
+% Start with the edge list
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl}
+% \end{macrocode}
+% Get the coordinate list
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_tail:N \l_@@_tmpa_tl}
+% \end{macrocode}
+% Strip off the outer braces
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpc_tl
+ {\tl_item:Nn \l_@@_tmpc_tl {1}}
+% \end{macrocode}
+% Add the first coordinate at the end
+% \begin{macrocode}
+ \tl_put_right:Nx \l_@@_tmpc_tl
+ {{\tl_item:Nn \l_@@_tmpc_tl {1}}}
+% \end{macrocode}
+% Get the first coordinate
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpa_tl {\tl_head:N \l_@@_tmpc_tl}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_tail:N \l_@@_tmpc_tl}
+% \end{macrocode}
+% Iterate through the path type list, looking for the requested path
+% \begin{macrocode}
+ \tl_map_inline:Nn \l_@@_tmpb_tl {
+ \tl_set:Nx \l_@@_tmpd_tl {
+ \exp_not:N \coordinate
+ (-edge~ ##1~ start)~ at \tl_use:N \l_@@_tmpa_tl;
+ }
+ \tl_use:N \l_@@_tmpd_tl
+ \tl_set:Nx \l_@@_tmpa_tl {\tl_head:N \l_@@_tmpc_tl}
+ \tl_set:Nx \l_@@_tmpc_tl {\tl_tail:N \l_@@_tmpc_tl}
+ \tl_set:Nx \l_@@_tmpd_tl {
+ \exp_not:N \coordinate
+ (-edge~ ##1~ end)~ at \tl_use:N \l_@@_tmpa_tl;
+ }
+ \tl_use:N \l_@@_tmpd_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\CoordinatesAtVertices}
+% User-accessible wrapper around the above.
+% \begin{macrocode}
+\DeclareDocumentCommand \CoordinatesAtVertices {m}
+{
+ \@@_coordinates_at_vertices:n {#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{function}{\DefineTile}
+% This is the user function for defining a tile.
+% \begin{macrocode}
+\DeclareDocumentCommand \DefineTile { m m m }
+{
+% \end{macrocode}
+% Clear the temporary variable.
+% \begin{macrocode}
+ \tl_clear:N \l_@@_tmpa_tl
+% \end{macrocode}
+% The 3rd parameter is a list of coordinates at vertices, iterate through them and add them to the list.
+% \begin{macrocode}
+ \tl_map_inline:nn {#3} {
+ \@@_add_coordinate:w \l_@@_tmpa_tl ##1 \q_stop
+ }
+% \end{macrocode}
+% Now we make a list of the edge types (from the 2nd parameter), using a prop to keep track of whether an edge is repeated.
+% \begin{macrocode}
+ \prop_clear:N \l_@@_tmpa_prop
+ \tl_map_inline:nn {#2} {
+ \prop_if_in:NnTF \l_@@_tmpa_prop {##1}
+ {
+ \prop_put:Nnn \l_@@_tmpa_prop {##1} {1}
+ }
+ {
+ \prop_put:Nnn \l_@@_tmpa_prop {##1} {0}
+ }
+ }
+% \end{macrocode}
+% Having established their multiplicity, we now create the edges with their names, appending numbers to their names if used more than once.
+% \begin{macrocode}
+ \tl_clear:N \l_@@_tmpb_tl
+ \tl_map_inline:nn {#2}
+ {
+ \tl_clear:N \l_@@_tmpc_tl
+ \tl_put_right:Nn \l_@@_tmpc_tl {##1}
+ \int_compare:nF {\prop_item:Nn \l_@@_tmpa_prop {##1} == 0} {
+ \tl_put_right:Nx \l_@@_tmpc_tl
+ {\prop_item:Nn \l_@@_tmpa_prop {##1}}
+ \prop_put:Nnx \l_@@_tmpa_prop {##1}
+ {\int_eval:n {\prop_item:Nn \l_@@_tmpa_prop {##1} + 1}}
+ }
+ \tl_put_right:Nx \l_@@_tmpb_tl {{ \l_@@_tmpc_tl }}
+ }
+% \end{macrocode}
+% Finally, we can create our tile and add it to the global tile prop.
+% \begin{macrocode}
+ \prop_gput:Nnx \g_@@_tiles_prop {#1}
+ {{\tl_use:N \l_@@_tmpb_tl} {\tl_use:N \l_@@_tmpa_tl}}
+% \end{macrocode}
+% Having created the tile, we make a TikZ pic to place it on the page.
+% \begin{macrocode}
+ \tikzset{
+ #1/.pic={
+ \begin{scope}
+% \end{macrocode}
+% Were we given a tile to align ourselves against?
+% \begin{macrocode}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment~ location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+% \end{macrocode}
+% Yes, we were.
+% So we adjust our position accordingly.
+% The first job is to transform so that we're along the edge of the receiving tile.
+% \begin{macrocode}
+ \begingroup
+% \end{macrocode}
+% We get the locations of the start and end of the receiving tile.
+% As \Verb+pic+ sets the node prefix, we have to temporarily suspend that (hence working in a group).
+% \begin{macrocode}
+ \tikzset{name~ prefix~ ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge~ \pgfkeysvalueof{/tikz/Penrose/alignment~ edge}~ start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge~ \pgfkeysvalueof{/tikz/Penrose/alignment~ edge}~ end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+% \end{macrocode}
+% We store the initial points in \Verb+\pgf@xa+ and \Verb+\pgf@ya+ but we want \Verb+\pgf@xb+ and \Verb+\pgf@yb+ to be a vector along the edge.
+% \begin{macrocode}
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+% \end{macrocode}
+% We shift to the start of the edge.
+% \begin{macrocode}
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+% \end{macrocode}
+% And normalise the vector along it.
+% \begin{macrocode}
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+% \end{macrocode}
+% Now rotate so that the \(x\)--axis lies along the edge.
+% \begin{macrocode}
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}
+% \end{macrocode}
+% The next job is to shift and rotate the current tile so that the correct edge ends up against the receiving tile.
+% \begin{macrocode}
+ \str_set:Nx \l_@@_tmpa_str
+ {\pgfkeysvalueof{/tikz/Penrose/alignment~ edge}}
+ \str_set:Nx \l_@@_tmpa_str {\str_head:N \l_@@_tmpa_str}
+ \str_put_right:Nx \l_@@_tmpa_str
+ {\pgfkeysvalueof{/tikz/Penrose/alignment~ new~ edge}}
+ \str_set:Nx \l_@@_tmpb_str {\str_lowercase:f { \l_@@_tmpa_str}}
+ \str_if_eq:NNT \l_@@_tmpa_str \l_@@_tmpb_str
+ {
+ \str_set:Nx \l_@@_tmpb_str
+ {\str_uppercase:f { \l_@@_tmpa_str}}
+ }
+
+ \@@_transform_side:nV {#1} \l_@@_tmpb_str
+ \fi
% \end{macrocode}
+% Now that the transformation is finalised, we can render the tile.
+% We clip against the tile path so that the tiles don't ``bleed''.
+% If we didn't do this, drawing the tile would result in overlaps which can look a bit ugly.
+% On the other hand, tight clipping can lead to ``gaps'' between the tiles so we make this optional by enclosing it in a style.
+% \begin{macrocode}
+ \UsePenroseTile[
+ every~ Penrose~ tile~ clip/.try,
+ every~ #1~ clip/.try
+ ]{#1}
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ #1/.try,
+ pic~ actions
+ ]{#1}
+% Lastly, we put coordinates at each vertex, labelled by which edge they are.
+% \begin{macrocode}
+ \@@_coordinates_at_vertices:n {#1}
+ \end{scope}
+ },
+% \end{macrocode}
+% This is a shortcut for installing the \Verb+pic+ type.
+% \begin{macrocode}
+ #1/.style={
+ every~ Penrose~ pic/.try,
+ pic~ type=#1,
+ },
+ }
+}
+% \end{macrocode}
+% \end{function}
+%
%
% \subsection{Lindenmayer System}
%
@@ -735,32 +1134,32 @@ and the derived files penrose.ins
%
% These are the rules for generating rhombus tilings.
% \begin{macrocode}
-\prop_new:N \g__penrose_rhombus_lms_rule_prop
-\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {T} {[f*sT][f>g]}
-\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {t} {[f_st][f>G]}
-\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {G} {[f+sG][sf>g][sf*sT]}
-\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {g} {[f-sg][sf>G][sf_st]}
+\prop_new:N \g_@@_rhombus_lms_rule_prop
+\prop_gput:Nnn \g_@@_rhombus_lms_rule_prop {T} {[f*sT][f>g]}
+\prop_gput:Nnn \g_@@_rhombus_lms_rule_prop {t} {[f_st][f>G]}
+\prop_gput:Nnn \g_@@_rhombus_lms_rule_prop {G} {[f+sG][sf>g][sf*sT]}
+\prop_gput:Nnn \g_@@_rhombus_lms_rule_prop {g} {[f-sg][sf>G][sf_st]}
% \end{macrocode}
%
% These are the rules for generating kite and dart tilings.
% \begin{macrocode}
-\prop_new:N \g__penrose_kite_lms_rule_prop
-\prop_put:Nnn \g__penrose_kite_lms_rule_prop {T} {[f*sT][f>st][+sg]}
-\prop_put:Nnn \g__penrose_kite_lms_rule_prop {t} {[f_st][f>sT][-sG]}
-\prop_put:Nnn \g__penrose_kite_lms_rule_prop {G} {[f*+sG][sT]}
-\prop_put:Nnn \g__penrose_kite_lms_rule_prop {g} {[f-_sg][st]}
+\prop_new:N \g_@@_kite_lms_rule_prop
+\prop_gput:Nnn \g_@@_kite_lms_rule_prop {T} {[f*sT][f>st][+sg]}
+\prop_gput:Nnn \g_@@_kite_lms_rule_prop {t} {[f_st][f>sT][-sG]}
+\prop_gput:Nnn \g_@@_kite_lms_rule_prop {G} {[f*+sG][sT]}
+\prop_gput:Nnn \g_@@_kite_lms_rule_prop {g} {[f-_sg][st]}
% \end{macrocode}
%
% These are the rules for generating pentagon tilings.
% \begin{macrocode}
-\prop_new:N \g__penrose_pentagon_lms_rule_prop
-\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {P}
+\prop_new:N \g_@@_pentagon_lms_rule_prop
+\prop_gput:Nnn \g_@@_pentagon_lms_rule_prop {P}
{[s>P][1sF+Q][1+sF+Q][1*sF+Q][1-sF+Q][1_sF+Q]} % pentagon 5
-\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {Q}
+\prop_gput:Nnn \g_@@_pentagon_lms_rule_prop {Q}
{[s>P][1+sFR][1*sF*R][1-sF+Q][1_sF+Q][1sF+Q][->fsD]} % pentagon 3
-\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {R}
+\prop_gput:Nnn \g_@@_pentagon_lms_rule_prop {R}
{[s>P][1-sF+Q][1+sF*R][1*sFR][1_sF*R][1sFR][_>fsD][>fsD]} % pentagon 2
-\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {G}
+\prop_gput:Nnn \g_@@_pentagon_lms_rule_prop {G}
{
[s>G]
[se[>d+R][e1B]]
@@ -769,103 +1168,103 @@ and the derived files penrose.ins
[*se[>d+R][e1B]]
[_se[>d+R][e1B]]
} % pentagram
-\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {B}
+\prop_gput:Nnn \g_@@_pentagon_lms_rule_prop {B}
{
[s>G]
[se[>d+R][e1B]]
[+se[>d+R][e1B]]
[-se[>d+R][e1B]]
} % boat
-\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {D}
+\prop_gput:Nnn \g_@@_pentagon_lms_rule_prop {D}
{[s>d+R][s>eG][se1B]} % diamond
% \end{macrocode}
%
% Each of the standard tilings can also be drawn using triangles using the same rules.
% \begin{macrocode}
-\prop_set_eq:NN \g__penrose_rtriangle_lms_rule_prop
-\g__penrose_rhombus_lms_rule_prop
-\prop_set_eq:NN \g__penrose_ktriangle_lms_rule_prop
-\g__penrose_kite_lms_rule_prop
+\prop_gset_eq:NN \g_@@_rtriangle_lms_rule_prop
+\g_@@_rhombus_lms_rule_prop
+\prop_gset_eq:NN \g_@@_ktriangle_lms_rule_prop
+\g_@@_kite_lms_rule_prop
% \end{macrocode}
%
% These hold the various actions.
% \begin{macrocode}
-\prop_new:N \g__penrose_default_lms_action_prop
-\prop_new:N \g__penrose_rhombus_lms_action_prop
-\prop_new:N \g__penrose_kite_lms_action_prop
-\prop_new:N \g__penrose_rtriangle_lms_action_prop
-\prop_new:N \g__penrose_ktriangle_lms_action_prop
-\prop_new:N \g__penrose_pentagon_lms_action_prop
+\prop_new:N \g_@@_default_lms_action_prop
+\prop_new:N \g_@@_rhombus_lms_action_prop
+\prop_new:N \g_@@_kite_lms_action_prop
+\prop_new:N \g_@@_rtriangle_lms_action_prop
+\prop_new:N \g_@@_ktriangle_lms_action_prop
+\prop_new:N \g_@@_pentagon_lms_action_prop
% \end{macrocode}
%
% We need some parameters.
% \begin{macrocode}
-\dim_new:N \l__penrose_step_dim
-\dim_set:Nn \l__penrose_step_dim {1cm}
+\dim_new:N \l_@@_step_dim
+\dim_set:Nn \l_@@_step_dim {1cm}
% \end{macrocode}
%
% These are the defaults, which will be used in all the rule sets.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_default_lms_action_prop {[} {\group_begin:}
-\prop_put:Nnn \g__penrose_default_lms_action_prop {]} {\group_end:}
-\prop_put:Nnn \g__penrose_default_lms_action_prop {f}
-{\pgftransformxshift{\l__penrose_step_dim}}
-\prop_put:Nnn \g__penrose_default_lms_action_prop {s} {
- \fp_set:Nn \l__penrose_tmpa_fp { 2 * sind(18) * \l__penrose_step_dim }
- \dim_set:Nn \l__penrose_step_dim {\fp_to_dim:N \l__penrose_tmpa_fp}
+\prop_gput:Nnn \g_@@_default_lms_action_prop {[} {\group_begin:}
+\prop_gput:Nnn \g_@@_default_lms_action_prop {]} {\group_end:}
+\prop_gput:Nnn \g_@@_default_lms_action_prop {f}
+{\pgftransformxshift{\l_@@_step_dim}}
+\prop_gput:Nnn \g_@@_default_lms_action_prop {s} {
+ \fp_set:Nn \l_@@_tmpa_fp { 2 * sind(18) * \l_@@_step_dim }
+ \dim_set:Nn \l_@@_step_dim {\fp_to_dim:N \l_@@_tmpa_fp}
}
% \end{macrocode}
%
% The rhombus rules need a variety of turns.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {+}
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {+}
{\pgftransformrotate{144}}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {*}
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {*}
{\pgftransformrotate{108}}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {-}
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {-}
{\pgftransformrotate{216}}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {_}
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {_}
{\pgftransformrotate{252}}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {>}
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {>}
{\pgftransformrotate{180}}
% \end{macrocode}
%
% Up to now, the actions for the rhombus and its triangle replacement are the same.
% \begin{macrocode}
-\prop_set_eq:NN \g__penrose_rtriangle_lms_action_prop
-\g__penrose_rhombus_lms_action_prop
+\prop_gset_eq:NN \g_@@_rtriangle_lms_action_prop
+\g_@@_rhombus_lms_action_prop
% \end{macrocode}
%
% Now we do the actions that actually draw something.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {T} {
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {T} {
\group_begin:
% \end{macrocode}
% As we go through, we keep track of how many tiles we've drawn.
% \begin{macrocode}
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
% \end{macrocode}
% Set up the position, size, and angle correctly.
% \begin{macrocode}
\pgftransformrotate{198}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*2*cosd(18)}
- \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*2*cosd(18)}
+ \pgftransformxshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
% \end{macrocode}
% Now we draw the thin rhombus, applying every style we can possibly imagine.
% The \Verb+Penrose tile+ style gets the current tile and total tile numbers passed to it.
% \begin{macrocode}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ thin~ rhombus/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{thin~rhombus}
\group_end:
}
@@ -873,21 +1272,21 @@ and the derived files penrose.ins
%
% Same for the thick rhombus.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {G} {
+\prop_gput:Nnn \g_@@_rhombus_lms_action_prop {G} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \int_gincr:N \g_@@_tile_int
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ thick~ rhombus/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{thick~rhombus}
\group_end:
}
@@ -895,59 +1294,59 @@ and the derived files penrose.ins
%
% Now we do the same for the kite and dart tiling.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {+} {\pgftransformrotate{36}}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {*} {\pgftransformrotate{108}}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {-} {\pgftransformrotate{-36}}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {_}
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {+} {\pgftransformrotate{36}}
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {*} {\pgftransformrotate{108}}
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {-} {\pgftransformrotate{-36}}
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {_}
{\pgftransformrotate{-108}}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {>} {\pgftransformrotate{180}}
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {>} {\pgftransformrotate{180}}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_set_eq:NN \g__penrose_ktriangle_lms_action_prop
-\g__penrose_kite_lms_action_prop
+\prop_gset_eq:NN \g_@@_ktriangle_lms_action_prop
+\g_@@_kite_lms_action_prop
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {T} {
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {T} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{36}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ kite/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{kite}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_kite_lms_action_prop {g} {
+\prop_gput:Nnn \g_@@_kite_lms_action_prop {g} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{144}
- \pgftransformxshift{-\l__penrose_step_dim * 2 * sin(18)}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \pgftransformxshift{-\l_@@_step_dim * 2 * sin(18)}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ dart/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{dart}
\group_end:
}
@@ -955,185 +1354,185 @@ and the derived files penrose.ins
%
% Now we set up the actions for the triangle variations.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {T} {
+\prop_gput:Nnn \g_@@_rtriangle_lms_action_prop {T} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{18}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ reverse~ golden~ triangle/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{reverse~ golden~ triangle}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {t} {
+\prop_gput:Nnn \g_@@_rtriangle_lms_action_prop {t} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{-18}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ golden~ triangle/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{golden~ triangle}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {G} {
+\prop_gput:Nnn \g_@@_rtriangle_lms_action_prop {G} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{180}
- \pgftransformxshift{-\l__penrose_step_dim}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \pgftransformxshift{-\l_@@_step_dim}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ reverse~ golden~ gnomon/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{reverse~ golden~ gnomon}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {g} {
+\prop_gput:Nnn \g_@@_rtriangle_lms_action_prop {g} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{180}
- \pgftransformxshift{-\l__penrose_step_dim}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \pgftransformxshift{-\l_@@_step_dim}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ golden~ gnomon/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{golden~ gnomon}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {T} {
+\prop_gput:Nnn \g_@@_ktriangle_lms_action_prop {T} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{18}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ reverse~ golden~ triangle/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{reverse~ golden~ triangle}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {t} {
+\prop_gput:Nnn \g_@@_ktriangle_lms_action_prop {t} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{-18}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ golden~ triangle/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{golden~ triangle}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {G} {
+\prop_gput:Nnn \g_@@_ktriangle_lms_action_prop {G} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{180}
- \pgftransformxshift{-\l__penrose_step_dim}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \pgftransformxshift{-\l_@@_step_dim}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ reverse~ golden~ gnomon/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{reverse~ golden~ gnomon}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {g} {
+\prop_gput:Nnn \g_@@_ktriangle_lms_action_prop {g} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{180}
- \pgftransformxshift{-\l__penrose_step_dim}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \pgftransformxshift{-\l_@@_step_dim}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ golden~ gnomon/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{golden~ gnomon}
\group_end:
}
@@ -1143,239 +1542,239 @@ and the derived files penrose.ins
%
% The rules need a variety of turns.
% \begin{macrocode}
-\int_new:N \l__penrose_pentagon_parity_int
-\seq_new:N \l__penrose_pentagon_parity_seq
-\seq_set_from_clist:Nn \l__penrose_pentagon_parity_seq {odd,even}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {1} {
- \int_set:Nn \l__penrose_pentagon_parity_int
- {3 - \l__penrose_pentagon_parity_int}
+\int_new:N \l_@@_pentagon_parity_int
+\seq_new:N \l_@@_pentagon_parity_seq
+\seq_set_from_clist:Nn \l_@@_pentagon_parity_seq {odd,even}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {1} {
+ \int_set:Nn \l_@@_pentagon_parity_int
+ {3 - \l_@@_pentagon_parity_int}
}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {+}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {+}
{\pgftransformrotate{72}}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {*}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {*}
{\pgftransformrotate{144}}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {-}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {-}
{\pgftransformrotate{288}}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {_}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {_}
{\pgftransformrotate{216}}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {>}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {>}
{\pgftransformrotate{180}}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {|}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {|}
{\pgftransformxscale{-1}}
% \end{macrocode}
% The scale factor is different.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {s} {
- \fp_set:Nn \l__penrose_tmpa_fp
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {s} {
+ \fp_set:Nn \l_@@_tmpa_fp
{
- 1/(2 + 2 * cosd(72) ) * \l__penrose_step_dim
+ 1/(2 + 2 * cosd(72) ) * \l_@@_step_dim
}
- \dim_set:Nn \l__penrose_step_dim {\fp_to_dim:N \l__penrose_tmpa_fp}
+ \dim_set:Nn \l_@@_step_dim {\fp_to_dim:N \l_@@_tmpa_fp}
}
% \end{macrocode}
% And we tend to work better vertically.
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {f} {
- \fp_set:Nn \l__penrose_tmpa_fp { tand(54)/2 * \l__penrose_step_dim }
- \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {f} {
+ \fp_set:Nn \l_@@_tmpa_fp { tand(54)/2 * \l_@@_step_dim }
+ \pgftransformyshift{\fp_to_dim:N \l_@@_tmpa_fp}
}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {F} {
- \fp_set:Nn \l__penrose_tmpa_fp { tand(54) * \l__penrose_step_dim }
- \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {F} {
+ \fp_set:Nn \l_@@_tmpa_fp { tand(54) * \l_@@_step_dim }
+ \pgftransformyshift{\fp_to_dim:N \l_@@_tmpa_fp}
}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {d} {
- \fp_set:Nn \l__penrose_tmpa_fp
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {d} {
+ \fp_set:Nn \l_@@_tmpa_fp
{
- (tand(54)/2 - tand(72)/2 + sind(36) ) * \l__penrose_step_dim
+ (tand(54)/2 - tand(72)/2 + sind(36) ) * \l_@@_step_dim
}
- \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+ \pgftransformyshift{\fp_to_dim:N \l_@@_tmpa_fp}
}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {e} {
- \fp_set:Nn \l__penrose_tmpa_fp
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {e} {
+ \fp_set:Nn \l_@@_tmpa_fp
{
- tand(54) * cosd(36) * \l__penrose_step_dim
+ tand(54) * cosd(36) * \l_@@_step_dim
}
- \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+ \pgftransformyshift{\fp_to_dim:N \l_@@_tmpa_fp}
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {P} {
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {P} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
- \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
- \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \int_gincr:N \g_@@_tile_int
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/2}
+ \pgftransformxshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*tand(54)/2}
+ \pgftransformyshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ pentagon/.try,
every~
- \seq_item:Nn \l__penrose_pentagon_parity_seq
- {\l__penrose_pentagon_parity_int}
+ \seq_item:Nn \l_@@_pentagon_parity_seq
+ {\l_@@_pentagon_parity_int}
\space pentagon/.try,
every~ pentagon~ 5/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{pentagon~5}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {Q} {
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {Q} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
- \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
- \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \int_gincr:N \g_@@_tile_int
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/2}
+ \pgftransformxshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*tand(54)/2}
+ \pgftransformyshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ pentagon/.try,
every~
- \seq_item:Nn \l__penrose_pentagon_parity_seq
- {\l__penrose_pentagon_parity_int}
+ \seq_item:Nn \l_@@_pentagon_parity_seq
+ {\l_@@_pentagon_parity_int}
\space pentagon/.try,
every~ pentagon~ 3/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{pentagon~3}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {R} {
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {R} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
- \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
- \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \int_gincr:N \g_@@_tile_int
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/2}
+ \pgftransformxshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*tand(54)/2}
+ \pgftransformyshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ pentagon/.try,
every~
- \seq_item:Nn \l__penrose_pentagon_parity_seq
- {\l__penrose_pentagon_parity_int}
+ \seq_item:Nn \l_@@_pentagon_parity_seq
+ {\l_@@_pentagon_parity_int}
\space pentagon/.try,
every~ pentagon~ 2/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{pentagon~2}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {G} {
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {G} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
% \pgftransformrotate{198}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(72)}
- \pgftransformxshift{\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)*cosd(72)}
- \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*cosd(72)}
+ \pgftransformxshift{\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*tand(54)*cosd(72)}
+ \pgftransformyshift{\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ pentagram/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{pentagram}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {B} {
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {B} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
% \pgftransformrotate{198}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(72)}
- \pgftransformxshift{\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)*cosd(72)}
- \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*cosd(72)}
+ \pgftransformxshift{\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*tand(54)*cosd(72)}
+ \pgftransformyshift{\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ boat/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{boat}
\group_end:
}
% \end{macrocode}
%
% \begin{macrocode}
-\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {D} {
+\prop_gput:Nnn \g_@@_pentagon_lms_action_prop {D} {
\group_begin:
- \int_gincr:N \l__penrose_tile_int
+ \int_gincr:N \g_@@_tile_int
\pgftransformrotate{90}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(18)}
- \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
- \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
- \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
- \tl_set:Nx \l__penrose_tmpc_tl
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim*cosd(18)}
+ \pgftransformxshift{-\fp_to_dim:N \l_@@_tmpa_fp}
+ \fp_set:Nn \l_@@_tmpa_fp {\l_@@_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l_@@_tmpa_fp}
+ \tl_set:Nx \l_@@_tmpc_tl
{
- {\int_use:N \l__penrose_tile_int}
- {\int_use:N \l__penrose_tiles_int}
+ {\int_use:N \g_@@_tile_int}
+ {\int_use:N \g_@@_tiles_int}
}
\UsePenroseTile[
every~ Penrose~ tile/.try,
every~ diamond/.try,
- Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
- Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ Penrose~ tile~ \int_use:N \g_@@_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l_@@_tmpc_tl
]{diamond}
\group_end:
}
% \end{macrocode}
%
-% \begin{macro}[internal]{\penrose_make_lms:Nnnn}
+% \begin{macro}[internal]{\@@_make_lms:Nnnn}
% This creates the token list of actions, starting with the seed.
% The arguments are: a token list to store the result in, the name of the system, the number of iterations, and the initial state.
% \begin{macrocode}
-\cs_new_nopar:Npn \penrose_make_lms:Nnnn #1#2#3#4
+\cs_new_nopar:Npn \@@_make_lms:Nnnn #1#2#3#4
{
\group_begin:
% \end{macrocode}
% On the first time round, we start with the given seed.
% \begin{macrocode}
- \tl_set:Nn \l__penrose_tmpb_tl {#4}
+ \tl_set:Nn \l_@@_tmpb_tl {#4}
% \end{macrocode}
% We repeat the specified number of times.
% \begin{macrocode}
@@ -1383,50 +1782,50 @@ and the derived files penrose.ins
% \end{macrocode}
% Duplicate the current state.
% \begin{macrocode}
- \tl_set_eq:NN \l__penrose_tmpa_tl \l__penrose_tmpb_tl
+ \tl_set_eq:NN \l_@@_tmpa_tl \l_@@_tmpb_tl
% \end{macrocode}
% Clear the receiving token list.
% \begin{macrocode}
- \tl_clear:N \l__penrose_tmpb_tl
+ \tl_clear:N \l_@@_tmpb_tl
% \end{macrocode}
% Walk through the current list, appending to the receiving list according to the rules.
% \begin{macrocode}
- \tl_map_inline:Nn \l__penrose_tmpa_tl
+ \tl_map_inline:Nn \l_@@_tmpa_tl
{
% \end{macrocode}
% If a rule exists, copy that.
% \begin{macrocode}
- \prop_if_in:cnTF {g__penrose_#2_lms_rule_prop} {##1}
+ \prop_if_in:cnTF {g_@@_#2_lms_rule_prop} {##1}
{
- \tl_put_right:Nx \l__penrose_tmpb_tl
- {\prop_item:cn {g__penrose_#2_lms_rule_prop} {##1} }
+ \tl_put_right:Nx \l_@@_tmpb_tl
+ {\prop_item:cn {g_@@_#2_lms_rule_prop} {##1} }
}
{
% \end{macrocode}
% Otherwise, just copy the token.
% \begin{macrocode}
- \tl_put_right:Nn \l__penrose_tmpb_tl {##1}
+ \tl_put_right:Nn \l_@@_tmpb_tl {##1}
}
}
}
% \end{macrocode}
% We've done all this inside a group, now pass the result outside.
% \begin{macrocode}
- \tl_set:Nn \l__penrose_tmpa_tl {
+ \tl_set:Nn \l_@@_tmpa_tl {
\group_end:
\tl_set:Nn #1
}
- \tl_put_right:Nx \l__penrose_tmpa_tl {{\tl_use:N \l__penrose_tmpb_tl}}
- \tl_use:N \l__penrose_tmpa_tl
+ \tl_put_right:Nx \l_@@_tmpa_tl {{\tl_use:N \l_@@_tmpb_tl}}
+ \tl_use:N \l_@@_tmpa_tl
}
-\cs_generate_variant:Nn \penrose_make_lms:Nnnn {Nnnx}
+\cs_generate_variant:Nn \@@_make_lms:Nnnn {Nnnx}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\penrose_invoke_lms:Nn}
+% \begin{macro}[internal]{\@@_invoke_lms:Nn}
% This carries out the actions specified by the resulting rules.
% \begin{macrocode}
-\cs_new_nopar:Npn \penrose_invoke_lms:Nn #1#2
+\cs_new_nopar:Npn \@@_invoke_lms:Nn #1#2
{
\group_begin:
% \end{macrocode}
@@ -1435,14 +1834,14 @@ and the derived files penrose.ins
% Otherwise, just do nothing.
% \begin{macrocode}
\tl_map_inline:Nn #1 {
- \prop_if_in:cnTF {g__penrose_#2_lms_action_prop} {##1}
+ \prop_if_in:cnTF {g_@@_#2_lms_action_prop} {##1}
{
- \prop_item:cn {g__penrose_#2_lms_action_prop} {##1}
+ \prop_item:cn {g_@@_#2_lms_action_prop} {##1}
}
{
- \prop_if_in:cnT {g__penrose_default_lms_action_prop} {##1}
+ \prop_if_in:cnT {g_@@_default_lms_action_prop} {##1}
{
- \prop_item:cn {g__penrose_default_lms_action_prop} {##1}
+ \prop_item:cn {g_@@_default_lms_action_prop} {##1}
}
}
}
@@ -1453,11 +1852,11 @@ and the derived files penrose.ins
%
% We keep track of the number of tiles.
% \begin{macrocode}
-\int_new:N \l__penrose_tile_int
-\int_new:N \l__penrose_tiles_int
+\int_new:N \g_@@_tile_int
+\int_new:N \g_@@_tiles_int
% \end{macrocode}
%
-% \begin{macro}[internal]{\PenroseDecomposition}
+% \begin{function}{\PenroseDecomposition}
% This is the user macro to invoke the decomposition.
% The arguments are: optional styles, the name, number of iterations, and starting seed.
% \begin{macrocode}
@@ -1465,39 +1864,39 @@ and the derived files penrose.ins
{
\group_begin:
\tikzset{#1}
- \penrose_make_lms:Nnnx \l__penrose_tmpa_tl {#2} {#3} {#4}
- \penrose_count_lms:N \l__penrose_tmpa_tl
- \int_gzero:N \l__penrose_tile_int
- \int_gset:Nn \l__penrose_pentagon_parity_int {2}
- \penrose_invoke_lms:Nn \l__penrose_tmpa_tl {#2}
+ \@@_make_lms:Nnnx \l_@@_tmpa_tl {#2} {#3} {#4}
+ \@@_count_lms:N \l_@@_tmpa_tl
+ \int_gzero:N \g_@@_tile_int
+ \int_set:Nn \l_@@_pentagon_parity_int {2}
+ \@@_invoke_lms:Nn \l_@@_tmpa_tl {#2}
\group_end:
}
% \end{macrocode}
-% \end{macro}
+% \end{function}
%
-% \begin{macro}[internal]{\penrose_count_lms:N}
+% \begin{macro}[internal]{\@@_count_lms:N}
% This counts the number of tiles in the string.
% \begin{macrocode}
-\cs_new_nopar:Npn \penrose_count_lms:N #1
+\cs_new_nopar:Npn \@@_count_lms:N #1
{
- \int_gzero:N \l__penrose_tiles_int
+ \int_gzero:N \g_@@_tiles_int
\tl_map_inline:Nn #1
{
\tl_if_eq:nnT {##1} {T}
{
- \int_incr:N \l__penrose_tiles_int
+ \int_gincr:N \g_@@_tiles_int
}
\tl_if_eq:nnT {##1} {t}
{
- \int_incr:N \l__penrose_tiles_int
+ \int_gincr:N \g_@@_tiles_int
}
\tl_if_eq:nnT {##1} {G}
{
- \int_incr:N \l__penrose_tiles_int
+ \int_gincr:N \g_@@_tiles_int
}
\tl_if_eq:nnT {##1} {g}
{
- \int_incr:N \l__penrose_tiles_int
+ \int_gincr:N \g_@@_tiles_int
}
}
}
@@ -1508,7 +1907,7 @@ and the derived files penrose.ins
% \begin{macrocode}
\tikzset{
Penrose~ step/.code={
- \dim_set:Nn \l__penrose_step_dim {#1}
+ \dim_set:Nn \l_@@_step_dim {#1}
}
}
% \end{macrocode}
@@ -2717,8 +3116,11 @@ and the derived files penrose.ins
}
% \end{macrocode}
%
-% \iffalse
-%</library>
-% \fi
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
%\Finale
\endinput