summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/sillypage/sillypage.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/sillypage/sillypage.dtx')
-rw-r--r--macros/latex/contrib/sillypage/sillypage.dtx162
1 files changed, 133 insertions, 29 deletions
diff --git a/macros/latex/contrib/sillypage/sillypage.dtx b/macros/latex/contrib/sillypage/sillypage.dtx
index 4795c81c03..18e31a3589 100644
--- a/macros/latex/contrib/sillypage/sillypage.dtx
+++ b/macros/latex/contrib/sillypage/sillypage.dtx
@@ -2,7 +2,8 @@
% Copyright (C) 2022
% by Phelype Oleinik <phelype.oleinik@latex-project.org>
% Paulo Cereda <cereda.paulo@gmail.com>
-% and samcarter <sam.carter8@aol.com>
+% samcarter <sam.carter8@aol.com>
+% and Ulrike Fischer <fischer@troubleshooting-tex.de>
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3c of this license
@@ -15,11 +16,11 @@
% version 2005/12/01 or later.
%
% This work is "maintained" (as per the LPPL maintenance status)
-% by Phelype Oleinik and Paulo Cereda.
+% by Phelype Oleinik, Paulo Cereda, samcarter and Ulrike Fischer.
%
%<*package>
-\def\sillypageDate{2022-01-20}
-\def\sillypageVersion{1.3}
+\def\sillypageDate{2022-02-02}
+\def\sillypageVersion{1.4}
%</package>
%<*driver>
\documentclass[a4paper,full]{l3doc}
@@ -60,6 +61,12 @@
% E-mail:
% \href{mailto:sam.carter8@aol.com}
% {sam.carter8\meta{at}aol.com}^^A
+% }\\
+% Ulrike \emph{flying lessons} Fischer\thanks
+% {^^A
+% E-mail:
+% \href{mailto:fischer@troubleshooting-tex.de}
+% {fischer\meta{at}troubleshooting-tex.de}^^A
% }^^A
% }
%
@@ -136,6 +143,25 @@
% silly walk cycle.
% \end{function}
%
+% \begin{function}{\pagenumbering{sillynumeral}}
+% \begin{syntax}
+% \cs{pagenumbering}\{sillynumeral\}
+% \end{syntax}
+% Write \cs{pagenumbering}|{sillynumeral}| in you document to use a
+% silly numeral system, in which each page will be converted to a unique
+% composition of silly steps. Note that this macro differs from its
+% \cs{silly} counterpart, as the former is a proper base 12 numeral
+% system whereas the latter simply walks through a 12-cycle silly routine.
+% \end{function}
+%
+% \begin{function}{\sillynumeral}
+% \begin{syntax}
+% \cs{sillynumeral} \Arg{integer}
+% \end{syntax}
+% Provides the silly numeral system representation from the provided
+% \meta{integer} value. This is a proper base 12 numeral system.
+% \end{function}
+%
% \bigskip
%
% What a silly yet marvellous interface!
@@ -197,49 +223,127 @@
%
% \begin{macrocode}
%<*package>
+%<@@=silly>
% \end{macrocode}
%
% \subsection{Package requirements}
%
% \begin{macrocode}
-\ProvidesPackage{sillypage}[\sillypageDate\space\sillypageVersion\space
- The silly walk as page numbering style]
+\ProvidesExplPackage
+ {sillypage} {\sillypageDate} {\sillypageVersion}
+ {The silly walk as page numbering style}
\RequirePackage{graphicx}
% \end{macrocode}
%
-% \subsection{Loading}
-% \begin{macro}{\silly,\sillystep}
-% \begin{macro}[int]{\@silly}
-% \begin{macro}{
+% \subsection{Picture-specific macros}
+%
+% \begin{macro}[int]{
% \silly@steps,
% \silly@picture,
% \silly@height}
% \begin{macrocode}
-\newcommand*\silly[1]{\expandafter\@silly\csname c@#1\endcsname}
-\newcommand*\sillystep[1]{\@silly{#1}}
-\newcommand*\@silly[1]{\expandafter\@silly@walk
- \expandafter{\number\numexpr#1\relax}}
-\newcommand*\silly@steps{12}%
-\newcommand*\silly@height{.8cm}%
-\newcommand*\silly@picture{sillywalk-map.pdf}%
+\newcommand*\silly@steps{12}
+\newcommand*\silly@height{.8cm}
+\newcommand*\silly@picture{sillywalk-map.pdf}
% \end{macrocode}
% \end{macro}
+%
+% \subsection{Single step macros}
+%
+% \begin{macro}{\silly,\sillystep}
+% \begin{macro}[int]{\@silly}
+% \begin{macro}{\@@_step:n}
+% \begin{macrocode}
+\NewDocumentCommand \silly { m } { \exp_args:Nv \@@_step:n { c@#1 } }
+\NewDocumentCommand \sillystep { m } { \@@_step:n {#1} }
+\newcommand*\@silly { \@@_step:n }
+\cs_new:Npn \@@_step:n #1
+ {
+ \@@_step_aux:eN
+ { \int_eval:n { \int_mod:nn { #1-1 } { \silly@steps } +1 } }
+ \c_false_bool
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Multi step macros}
+%
+% \begin{macro}{\sillynumeral}
+% \begin{macro}[int]{\@sillynumeral}
+% \begin{macro}{\@@_numeral:n,\@@_numeral_aux:n}
+% \begin{macrocode}
+\NewDocumentCommand \sillynumeral { m } { \@@_numeral:n {#1} }
+\newcommand*\@sillynumeral { \@@_numeral:n }
+\cs_new:Npn \@@_numeral:n #1
+ {
+ \exp_args:Ne \str_map_function:nN
+ { \int_to_base:nn {#1} { 12 } } \@@_numeral_aux:n
+ }
+\cs_new:Npn \@@_numeral_aux:n #1
+ { \@@_step_aux:eN { "\char_uppercase:N #1+1 } \c_true_bool }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
% \end{macro}
+%
+% \subsection{Internals}
+%
+% \begin{macro}{\@@_step_aux:nN,\@@_step_aux:eN,\@@_trim_step:nN}
+% \begin{macrocode}
+\cs_new:Npn \@@_step_aux:nN #1 #2
+ {
+ \cs_if_exist_use:cF { texorpdfstring } { \use_i:nn }
+ { \@@_trim_step:nN {#1} #2 }
+ {#1}
+ }
+\cs_generate_variant:Nn \@@_step_aux:nN { e }
+\cs_new:Npn \@@_trim_step:nN #1 #2
+ {
+%<@@=>
+ \exp_args:Nee \@@silly@place@picture@@nn
+ {
+ \bool_if:NT #2
+ {
+ trim = \int_case:nn {#1}
+ {
+ { 1 } { 57 ~ 0 ~ 42 ~ 0 }
+ { 2 } { 59 ~ 0 ~ 29 ~ 0 }
+ { 3 } { 53 ~ 0 ~ 21 ~ 0 }
+ { 4 } { 62 ~ 0 ~ 11 ~ 0 }
+ { 5 } { 50 ~ 0 ~ 8 ~ 0 }
+ { 6 } { 33 ~ 0 ~ 27 ~ 0 }
+ { 7 } { 45 ~ 0 ~ 13 ~ 0 }
+ { 8 } { 56 ~ 0 ~ 27 ~ 0 }
+ { 9 } { 38 ~ 0 ~ 12 ~ 0 }
+ { 10 } { 7 ~ 0 ~ 43 ~ 0 }
+ { 11 } { 33 ~ 0 ~ 33 ~ 0 }
+ { 12 } { 57 ~ 0 ~ 7 ~ 0 }
+ }
+ , clip
+ }
+ }
+ { \int_eval:n {#1} }
+ }
+% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\@silly@walk,\@silly@walk@}
+% \begin{macro}[int]{\@@silly@place@picture@@nn}
% \begin{macrocode}
-\def\@silly@walk#1{%
- \@ifundefined{texorpdfstring}{\@firstoftwo}{\texorpdfstring}%
- {\@silly@walk@{#1}}% TeX
- {#1}}% pdf string
-\def\@silly@walk@#1{%
- \ifnum#1>\silly@steps\space
- \expandafter\@silly@walk@\expandafter
- {\number\numexpr#1-\silly@steps\expandafter}%
- \else
- \includegraphics[height=\silly@height,page=#1]{\silly@picture}%
- \fi}
+\DeclareRobustCommand \@@silly@place@picture@@nn [2]
+ {
+ \includegraphics
+ [ #1, page=#2, height=\silly@height ]
+ { \silly@picture }
+ }
+\AtBeginDocument
+ {
+ \cs_if_exist_use:NF \pdfstringdefDisableCommands { \use_none:n }
+ { \cs_set:Npn \@@silly@place@picture@@nn #1 #2 {#2} }
+ }
+\DeclareHookRule { begindocument }
+ { sillypage } { after } { hyperref }
% \end{macrocode}
% \end{macro}
%