% !TeX TXS-program:compile = txs:///arara
% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode}
% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')

\documentclass{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{Scrabble}
%\usepackage[upright]{fourier}
%\usepackage[scaled=0.875]{helvet}
%\renewcommand\ttdefault{lmtt}
%\usepackage[scaled=0.875]{cabin}
\usepackage{amsmath,amssymb}
\usepackage{fontawesome5}
\usepackage{enumitem}
\usepackage{tabularray}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\lfoot{\sffamily\small [Scrabble]}
\cfoot{\sffamily\small - \thepage{} -}
\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}

\usepackage{hologo}
\usepackage{xspace}
\newcommand\tikzlogo{Ti\textit{k}Z}
\newcommand\TeXLive{\hologo{TeX}Live\xspace}
\let\TikZ\tikzlogo
\newcommand\TableauDocumentation{%
       \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
               {\huge \LaTeX} & & & & &\\
               & {\huge \hologo{pdfLaTeX}} & & & & \\
               & & {\huge \hologo{LuaLaTeX}} & & & \\
               & & & {\huge \TikZ} & & \\
               & & & & {\huge \TeXLive} & \\
               & & & & & {\huge \hologo{MiKTeX}} \\
       \end{tblr}
}

\usepackage{hyperref}
\urlstyle{same}
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}

\def\TPversion{0.1.9}
\def\TPdate{17/07/2025}

\usepackage[most]{tcolorbox}
\usepackage{minted2}
\tcbuselibrary{minted}
\NewTCBListing{PresentationCode}{ O{blue} m }{%
       sharp corners=downhill,enhanced,arc=12pt,skin=bicolor,%
       colback=#1!1!white,colframe=#1!75!black,colbacklower=white,%
       attach boxed title to top right={yshift=-\tcboxedtitleheight},title=Code \LaTeX,%
       boxed title style={%
               colframe=#1!75!black,colback=#1!15!white,%
               ,sharp corners=downhill,arc=12pt,%
       },%
       fonttitle=\color{#1!90!black}\itshape\ttfamily\footnotesize,%
       listing engine=minted,minted style=colorful,
       minted language=tex,minted options={tabsize=4,fontsize=\footnotesize,autogobble},
       #2
}

\newcommand\Cle[1]{{\bfseries\sffamily\textlangle #1\textrangle}}

\begin{document}

\pagestyle{fancy}

\thispagestyle{empty}

\vspace{2cm}

\begin{center}
       \begin{minipage}{0.75\linewidth}
       \begin{tcolorbox}[colframe=yellow,colback=yellow!15]
               \begin{center}
                       \begin{tabular}{c}
                               {\Huge \texttt{Scrabble [en]}}\\
                               \\
                               {\LARGE A board of Scrabble,} \\
                               \\
                               {\LARGE with words or not.} \\
                               \\
                               {Scrabble\texttrademark{}, from Hasbro\texttrademark{} and Mattel\texttrademark{}.}
                       \end{tabular}

                       \medskip

                       {\small \texttt{Version \TPversion{} -- \TPdate}}
               \end{center}
       \end{tcolorbox}
\end{minipage}
\end{center}

\vspace{0.5cm}

\begin{center}
       \begin{tabular}{c}
       \texttt{Cédric Pierquet}\\
       {\ttfamily c pierquet -- at -- outlook . fr}\\
       \texttt{\url{https://github.com/cpierquet/latex-packages/tree/main/scrabble}}\\
       \texttt{\url{https://forge.apps.education.fr/pierquetcedric/packages-latex}}
\end{tabular}
\end{center}

\vspace{0.5cm}

{$\blacktriangleright$~~Some commands to display a Scrabble board, with or without words.}

\smallskip

{$\blacktriangleright$~~English, French, German or Spanish version for points and labels.}

\smallskip

{$\blacktriangleright$~~Ideas from \scalebox{0.8}[1]{\ttfamily\url{ https://tex.stackexchange.com/questions/194780/tikz-drawing-a-rectangle-with-spikes-on-borders}}}

\vspace{0.15cm}

\begin{center}
       \ScrabbleBoard[Scale=0.5]
       ~~~~
       \begin{EnvScrabble}[Scale=0.5]
               \ScrabblePutWord{TIKZ}{1,13}
               \ScrabblePutWord[V]{pstricks}{1,15}
               \ScrabblePutWord[V]{KaTeX}{3,13}
               \ScrabblePutWord{cleveref}{1,10}
               \ScrabblePutWord[V]{METAPOST}{7,11}
               \ScrabblePutWord{LUALATEX}{5,8}
               \ScrabblePutWord[V]{ProfLy*ee}{11,15}
               \ScrabblePutWord{PROFCOLLE*E}{1,1}
               \ScrabblePutWord{SYNTAX}{7,5}
               \ScrabblePutWord[V]{STRIN*}{10,6}
       \end{EnvScrabble}
\end{center}

\vspace{0.5cm}

\hfill{}\textit{Thanks to \textsf{Denis Bitouzé}, \textsf{Patrick Bideault}, \textsf{quark67}, \textsf{Patrick Jenty} and \textsf{jmbeckers} for help and ideas !}

\vfill

\hrule

\medskip

\TableauDocumentation

\medskip

\hrule

\medskip

\newpage

\part*{Introduction}

\section{The Scrabble package}

\subsection{Source}

Some ideas are from \scalebox{0.8}[1]{\ttfamily\url{ https://tex.stackexchange.com/questions/194780/tikz-drawing-a-rectangle-with-spikes-on-borders}}, with proposition from Mark Wibrow.

\smallskip

This package is \textit{build} within styles and ideas from Mark Wibrow.

\subsection{Loading of the package, used packages}

The package \textsf{Scrabble} loads within the preamble:

\begin{PresentationCode}{listing only}
\usepackage{Scrabble}
\end{PresentationCode}

It's mostly compatible with \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} or \textsf{xelatex} compilation!

\medskip

It loads the following packages and libraries:

\begin{itemize}
       \item \texttt{tikz} with \Cle{calc} with the tikzlibraries \Cle{calc} and \Cle{shapes.geometric};
       \item \texttt{pgf} and \texttt{pgffor};
       \item \texttt{xstring}, \texttt{xparse}, \texttt{simplekv} and \texttt{listofitems}.
\end{itemize}

\subsection{The package itself}

The idea is to, thanks to \TikZ, propose commands or environments to display a Scrabble\texttrademark{} board:

\begin{itemize}
       \item \textit{independent};
       \item in an \textit{environment} with words.
\end{itemize}

\begin{PresentationCode}{listing only}
%independent command for the empty board
\ScrabbleBoard<language>[keys]

%environment with word(s)
\begin{EnvScrabble}<language>[keys]
       \ScrabblePutWord[orientation]{word}{coordinates of the beginning cell}
\end{EnvScrabble}
\end{PresentationCode}

\subsection{Languages}

The \textsf{commands}, \textsf{environments} et \textsf{keys} are in english, but cells can be displayed in:

\begin{itemize}
       \item english (code ISO 639-1 EN);
       \item french (code ISO 639-1 FR);
       \item german (code ISO 639-1 DE);
       \item spanish (code ISO 639-1 ES).
\end{itemize}

\pagebreak

\section{Commands, keys and options}

\subsection{The board, standalone}

The first argument, \textit{optional}, between \texttt{<...>} is the \Cle{langage} of the display, form the list:

\hfill\Cle{EN} (english, default), \Cle{FR} (french), \Cle{DE} (german) et \Cle{ES} (spanish).\hfill~

\smallskip

The second argument, \textit{optional}, between \texttt{[...]} give the \Cle{keys}:

\begin{itemize}
       \item \Cle{Scale} for the display (the initial unit is 1~cm); \hfill~default: \Cle{1}
       \item \Cle{ScaleLabels} for the cell's names; \hfill~défaut: \Cle{1}
       \item the boolean \Cle{Border} pour print a border outside the board; \hfill~default: \Cle{true}
       \item the boolean \Cle{Labels} to print \textit{names} of the special cells;\hfill~default: \Cle{true}
       \item the boolean \Cle{Help} pour print numbers to reperate th cells;\hfill~default: \Cle{false}
\end{itemize}

\begin{PresentationCode}{}
\ScrabbleBoard[Labels=false,Scale=0.55]\\      %board without cell's names
\ScrabbleBoard<ES>[Scale=0.55,Border=false]     %board in spanish, without border
\end{PresentationCode}

\newpage

\subsection{The board with words}

Here we can use the \textsf{environment} with the specific \textsf{command} in order to print words on the board.

\smallskip

For the \textit{environment}, the options are the same as for the independent \textsf{command}!

\smallskip

For putting word on the board:

\begin{itemize}
       \item the first argument, \textit{optional}, between \texttt{[...]} is the orientation of the word, \Cle{H} (by default) or \Cle{V};
       \item the second argument, \textit{mandatory}, between \texttt{\{...\}}, is the word, with uppercase or lowercase letters;
       \item the last argument, \textit{mandatory}, between \texttt{\{...\}}, is the coordinates of the first cell for fisrt lettre (the cell \texttt{(1,1)} is south-west corner).
\end{itemize}

\textbf{Observation 1:} the chosen language will display the right points in the til!

\smallskip

\textbf{Observation 2:} the \textit{white} (or \textit{joker}) is coded by the character \texttt{*}.

\begin{PresentationCode}{}
\begin{EnvScrabble}[Scale=0.75,Labels=false,Help]
       \ScrabblePutWord{TIKZ}{1,13}
       \ScrabblePutWord[V]{pstricks}{1,15}
       \ScrabblePutWord[V]{KaTeX}{3,13}
       \ScrabblePutWord{cleveref}{1,10}
       \ScrabblePutWord[V]{METAPOST}{7,11}
       \ScrabblePutWord{LUALATEX}{5,8}
       \ScrabblePutWord[V]{ProfLy*ee}{11,15}
       \ScrabblePutWord{PROFCOLLE*E}{1,1}
       \ScrabblePutWord{SYNTAX}{7,5}
       \ScrabblePutWord[V]{STRIN*}{10,6}
\end{EnvScrabble}
\end{PresentationCode}

\begin{PresentationCode}{}
\begin{EnvScrabble}[Scale=0.55]
       \ScrabblePutWord{tikz}{1,13} \ScrabblePutWord[V]{PSTRiCKS}{1,15}
       \draw (7,15) node[font=\LARGE\sffamily] {English version} ;
\end{EnvScrabble}~~~
\begin{EnvScrabble}<FR>[Scale=0.55]
       \ScrabblePutWord{tikz}{1,13} \ScrabblePutWord[V]{PSTRiCKS}{1,15}
       \draw (7,15) node[font=\LARGE\sffamily] {French version} ;
\end{EnvScrabble}\\
\begin{EnvScrabble}<DE>[Scale=0.55]
       \ScrabblePutWord{tikz}{1,13} \ScrabblePutWord[V]{PSTRiCKS}{1,15}
       \draw (7,15) node[font=\LARGE\sffamily] {German version} ;
\end{EnvScrabble}~~~
\begin{EnvScrabble}<ES>[Scale=0.55]
       \ScrabblePutWord{LaTeX}{1,14} \ScrabblePutWord[V]{Madrid}{2,15}
       \draw (7,15) node[font=\LARGE\sffamily] {Spanish version} ;
\end{EnvScrabble}
\end{PresentationCode}

\newpage

\subsection{\textit{Inline} word}

The idea is to propose a command to insert a word in \textit{online} mode, with automatic adjustment of size and position.

\begin{PresentationCode}{listing only}
%command to put inline word
\ScrabbleWord[keys]{word}
\end{PresentationCode}

The first argument, \textit{optional}, between \texttt{[...]} allows you to configure the \Cle{keys}:

\begin{itemize}
       \item \Cle{Colback} for the color of the pieces  \hfill~default: \Cle{yellow!40}
       \item \Cle{Font} for the font; \hfill~default: \Cle{\textbackslash bfseries\textbackslash sffamily}
       \item \Cle{Colfonte} for the color of the characters; \hfill~default: \Cle{black}
       \item \Cle{Lang} to choose the language (for the number of points); \hfill~default: \Cle{EN}
       \item \Cle{Offset} to specify horizontal spacing between pieces; \hfill~default: \Cle{0.1pt}
       \item \Cle{Scale} to specify a base scale for texts; \hfill~default: \Cle{0.6}
       \item \Cle{Shuffle} (boolean) to mix letters; \hfill~default: \Cle{false}
       \item \Cle{Score} which is a boolean to display the score of each piece. \hfill~default: \Cle{true}
\end{itemize}

\textbf{Note 1:} the code is responsible for positioning the pieces for \textit{satisfactory} alignment and scaling based on the active font.

\smallskip

\textbf{Note 2:} the \textit{blank} (or \textit{wildcard}) is obtained by the character \texttt{*}.

\begin{PresentationCode}{}
Online Scrabble word test positioning \ScrabbleWord{TE*ST} to see!
\end{PresentationCode}

\begin{PresentationCode}{}
{\Huge\sffamily Test positioning \ScrabbleWord[Colback=teal!5,Colfonte=orange]{PYTHAG*RE} to see!}
\end{PresentationCode}

\begin{PresentationCode}{}
\scalebox{3}[3]{Positioning \ScrabbleWord[Lang=DE,Font=\ttfamily,Scale=0.75,Shuffle]{PYTHAG*RE} to see!}
\end{PresentationCode}

\begin{PresentationCode}{}
{\LARGE Test positioning \ScrabbleWord[Score=false,Offset=1pt,Colback=orange!50]{PSTRICKS} to see!}
\end{PresentationCode}

\newpage

\subsection{Special letters}

It is possible to use special characters, for the languages \textsf{<DE>} and \textsf{<ES>}, but for compatibility reasons, special characters are \textit{coded} by numbers:

\begin{itemize}
       \item \texttt{0} code the letter \fbox{\"O} with 8 points;
       \item \texttt{1} code the letter \fbox{\"A} with 6 points;
       \item \texttt{4} code the letter \fbox{\"U} with 6 points;
       \item \texttt{6} code the \textit{letter} \fbox{CH} with 5 points;
       \item \texttt{7} code the letter \fbox{\~{N}} with 8 points;
       \item \texttt{8} code the \textit{letter} \fbox{RR} with 8 points;
       \item \texttt{9} code the \textit{letter} \fbox{LL} with 8 points.
\end{itemize}

\begin{PresentationCode}{}
{\Huge \ScrabbleWord[Lang=DE,Font=\ttfamily,Scale=0.75]{104AAA}}

{\Huge \ScrabbleWord[Lang=ES,Font=\sffamily,Scale=0.75]{RO7OSO689}}
\end{PresentationCode}

\subsection{Colors}

The colors used can be redefined using the aliases given below.

\begin{PresentationCode}{listing only}
\colorlet{triplewordscore}{red!75}
\colorlet{doublewordscore}{red!25}
\colorlet{tripleletterscore}{blue!50!cyan!75}
\colorlet{doubleletterscore}{blue!50!cyan!50}
\colorlet{scrabblebgtile}{yellow!40}
\colorlet{scrabblebloard}{gray!25}
\end{PresentationCode}

\newpage

\part*{History}

\verb|v0.1.9|~:~~~~Bugfix (forgotten 'cells') + colors

\verb|v0.1.8|~:~~~~Bugfix

\verb|v0.1.7|~:~~~~Key \textsf{[Shuffle]} for inline words

\verb|v0.1.6|~:~~~~Bugfix with \textit{joker} ; enhancements for \textsf{<DE>} board

\verb|v0.1.5|~:~~~~Special letters for \textsf{<DE>} and \textsf{<ES>}

\verb|v0.1.4|~:~~~~Command to insert \textit{inline} words

\verb|v0.1.3|~:~~~~Words in uppercase or lowercase, adjusted codes for language (ISO 639-1)

\verb|v0.1.2|~:~~~~Key \textsf{<ScaleLabels>} to modify scale of the cell's names

\verb|v0.1  |~:~~~~Initial version

\end{document}