% !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[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb}
\usepackage{PixelArtTikz}
\usepackage{couleurs-fr}
\usepackage{fontawesome5}
\usepackage{enumitem}
\usepackage{tabularray}
\usepackage{multicol}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\lfoot{\sffamily\small [PixelArtTikz]}
\cfoot{\sffamily\small - \thepage{} -}
\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
%\usepackage{hvlogos}
\usepackage{hologo}
\usepackage{xspace}
\providecommand\tikzlogo{Ti\textit{k}Z}
\providecommand\TeXLive{\TeX{}Live\xspace}
\providecommand\PSTricks{\textsf{PSTricks}\xspace}
\let\pstricks\PSTricks
\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}
\def\TPversion{0.1.8}
\def\TPdate{05/05/2025}
\usepackage{minted2}
\usepackage[most]{tcolorbox}
\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
}
\usepackage[english]{babel}
\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{PixelArtTikz [en]}}\\
\\
{\LARGE PixelArts, with Ti\textit{k}Z}, \\
\\
{\LARGE with solution and colors.} \\
\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://forge.apps.education.fr/pierquetcedric/packages-latex}}
\end{tabular}
\end{center}
\vspace{0.25cm}
{$\blacktriangleright$~~Commands to display PixelArts.}
\smallskip
{$\blacktriangleright$~~Environment to complete the PixelArt.}
\smallskip
\vspace{1cm}
\begin{center}
\begin{filecontents*}[overwrite]{test1.csv}
-,-,-,-,-,-,4,4,4,4,-,-,-,-,-,-
-,-,-,-,4,4,1,1,1,1,4,4,-,-,-,-
-,-,-,4,1,1,1,1,1,1,1,1,4,-,-,-
-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-,4,1,9,9,1,1,1,1,1,1,9,9,1,4,-
-,4,9,9,9,9,4,4,4,4,9,9,9,9,4,-
-,4,9,4,9,9,4,4,4,4,9,4,9,9,4,-
-,4,1,9,9,9,4,4,4,4,9,9,9,1,4,-
-,-,4,1,1,9,4,4,4,4,9,1,1,4,-,-
-,-,4,1,1,1,4,4,4,4,1,1,1,4,-,-
-,-,-,4,1,1,1,4,4,1,1,1,4,-,-,-
-,-,4,3,1,1,1,1,1,1,1,1,3,4,-,-
-,4,6,3,1,1,1,1,1,1,1,1,3,6,4,-
-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-,4,6,4,1,1,1,4,4,1,1,1,4,6,4,-
2,2,4,2,4,4,4,2,2,4,4,4,2,4,2,2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-,-,-,-,-,4,1,1,1,1,4,-,-,-,-,-
-,-,-,-,-,-,4,1,1,4,-,-,-,-,-,-
-,-,-,-,-,-,-,4,4,-,-,-,-,-,-,-
\end{filecontents*}
\PixlArtTikz[Codes=123469,Style=\ttfamily,Unit=0.35]{test1.csv}
~~
\PixlArtTikz[Codes=123469,Symbols={A,B,C,D,E,F},Symb,Style=\ttfamily,Unit=0.35]{test1.csv}
~~
\PixlArtTikz[Codes=123469,Colors={red,brown,yellow,black,blue,white},Correction,Unit=0.35]{test1.csv}
\end{center}
\vspace{0.5cm}
%\hfill{}\textit{Merci aux membres du groupe \faFacebook{} du \og Coin \LaTeX{} \fg{} pour leur aide et leurs idées !}
%\hfill{}\textit{Merci à Denis Bitouzé et à Patrick Bideault pour leurs retours et idées !}
\vfill
\hrule
\medskip
\TableauDocumentation
\medskip
\hrule
\medskip
\newpage
\phantomsection
\hypertarget{matoc}{}
\tableofcontents
\newpage
\part{Introduction}
\section{The package PixelArtTikz}
\subsection{Introduction}
The idea is to \textit{propose}, within a Ti\textit{k}Z environment, a macro to generate PixelArt.
The data is \textit{read} from a \textsf{csv} file, already existing in the folder of the \textsf{tex} file, or created on-the-fly by \textsf{filecontents}.
\medskip
Some advices about the \textsf{cvs} file :
\begin{itemize}
\item the \textsf{csv} file must use "," as separator;
\item empty cells are coded by "\texttt{-}".
\end{itemize}
\begin{PresentationCode}{listing only}
\begin{filecontents*}{filename.csv}
A,B,C,D
A,B,D,C
B,A,C,D
B,A,D,C
\end{filecontents*}
\end{PresentationCode}
While compiling, the file \textsf{filename.csv} will be created, and the option \Cle{[overwrite]} will propagate the modifications!
\subsection{Loading of the package, and option}
The package \textsf{csvsimple} is necessary in order to read the \textsf{csv} file.
The package is available in two versions, one written in \hologo{LaTeX2e} and the other in \hologo{LaTeX3}. By default, \textsf{PixelArtTikz} loads the \hologo{LaTeX3} version, but an \textit{option} is available to work with the \hologo{LaTeX2e} version.
\smallskip
The option \Cle{[csvii]} forces the usage of the \hologo{LaTeX2e} version.
\begin{PresentationCode}{listing only}
\usepackage{PixelArtTikz} %package latex3
%which loads
%\RequirePackage{expl3}
%\RequirePackage[l3]{csvsimple}
\usepackage[csvii]{PixelArtTikz} %package latex2
%which loads
%\RequirePackage[legacy]{csvsimple}
\end{PresentationCode}
\subsection{Used packages}
It's fully compatible with usual \hologo{LaTeX} engines, such as \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} or \textsf{xelatex}.
\medskip
It loads the following packages and libraries:
\begin{itemize}
\item \texttt{tikz}, \texttt{xintexpr} et \texttt{xinttools};
\item \texttt{xstring}, \texttt{xparse}, \texttt{simplekv} and \texttt{listofitems}.
\end{itemize}
\pagebreak
\subsection{Macros and environment}
There are two ways to create PixelArt:
\begin{itemize}
\item with an independent macro;
\item with a Ti\textit{k}Z environment in order to add code afterwards.
\end{itemize}
\begin{PresentationCode}{listing only}
%Independent macro
\PixlArtTikz[keys]<options tikz>{file.csv}
%Semi-independent macro, in a tiks environment
\PixlArtTikz*[keys]{file.csv}
%environment
\begin{EnvPixlArtTikz}[keys]<options tikz>{file.csv}
%tikz code
\end{EnvPixlArtTikz}
\end{PresentationCode}
\section{Colors}
Concerning colors: the user can use all colors provided by loaded packages!
\smallskip
Without extra packages, the available colors are:
\smallskip
\begin{tblr}{width=\linewidth,colspec={*{10}{X[m,c]}},cells={font=\small\ttfamily}}
\SetCell{bg=magenta} magenta &
\SetCell{bg=cyan} cyan &
\SetCell{bg=blue,fg=white} blue &
\SetCell{bg=green} green &
\SetCell{bg=red} red &
\SetCell{bg=darkgray,fg=white} darkgray &
\SetCell{bg=olive,fg=white} olive &
\SetCell{bg=lime} lime &
\SetCell{bg=brown} brown &
\SetCell{bg=lightgray} lightgray \\
\SetCell{bg=white} white &
\SetCell{bg=gray,fg=white} gray &
\SetCell{bg=black,fg=white} black &
\SetCell{bg=yellow} yellow &
\SetCell{bg=violet,fg=white} violet &
\SetCell{bg=teal,fg=white} teal &
\SetCell{bg=purple,fg=white} purple &
\SetCell{bg=pink} pink &
\SetCell{bg=orange} orange & \\
\end{tblr}
\pagebreak
\part{Macros and environment}
\section{Main macro}
\subsection{Example}
The macro \texttt{\textbackslash PixlArtTikz} needs :
\begin{itemize}
\item the file \textsf{csv};
\item the list (by a string) of codes used in the file \textsf{csv} (e.g.\ \texttt{234679} or \texttt{ABCDJK}\ldots);
\item the list of symbols (if needed) to print in the cells, e.g.\ \texttt{25,44,12} or \texttt{AA,AB,AC};
\item the list of colors (for the correction), same order as the codes.
\end{itemize}
We can begin by creating the file \textsf{csv}, directly within the \textsf{tex} code, or with a external file.
\begin{PresentationCode}{}
%creation of the csv
\begin{filecontents*}[overwrite]{base.csv}
A,B,C,D
A,B,D,C
B,A,D,C
C,A,B,D
\end{filecontents*}
\end{PresentationCode}
\begin{PresentationCode}{}
%instructions and pixelarts
\begin{center}
\begin{tblr}{colspec={*{4}{Q[1.25cm,c,m]}},hlines,vlines,rows={1.15em}}
\SetCell[c=4]{c} Instructions & & & \\
A & B & C & D \\
45 & 22 & 1 & 7 \\
Black & Green & Yellow & Red \\
\end{tblr}
\end{center}
\PixlArtTikz[Codes=ABCD,Style=\large\sffamily,Unit=0.85]{base.csv}
~~
\PixlArtTikz[Codes=ABCD,Symbols={45,22,1,7},Symb,Style=\large\sffamily,Unit=0.85]{base.csv}
~~
\PixlArtTikz[Codes=ABCD,Colors={black,green,yellow,red},Correction,Unit=0.85]{base.csv}
~~
\PixlArtTikz[Codes=ABCD,Colors={black,green,yellow,red},Correction,Border=false,Unit=0.85]{base.csv}
\end{PresentationCode}
\pagebreak
\subsection{Options and keys}
\begin{PresentationCode}{listing only}
\PixlArtTikz[keys]<options tikz>{file.csv}
\end{PresentationCode}
The first argument, \textit{optional} and between \texttt{[...]} proposes the \textsf{keys}:
\begin{itemize}
\item the key \Cle{Codes} with the \textit{string} of \textit{simple} codes of the \textsf{csv} file;
\item the key \Cle{Colors} with the \textit{list} of colors;
\item the key \Cle{Symbols} with the \textit{optional list} of alt.\ symbols for the cells;
\item the boolean \Cle{Correction} to color the PixelArt;\hfill{}default \textsf{false}
\item the boolean \Cle{Symb} to print the symbols;\hfill{}default \textsf{false}
\item the boolean \Cle{Border} to print borders of the cells;\hfill{}default \textsf{true}
\item the key \Cle{Style} to specifythe style of the text. \hfill{}default \textsf{\textbackslash scriptsize}
\end{itemize}
The second argument, \textit{optional} and between \texttt{<...>}, are Ti\textit{k}Z options to pass on to the environment which creates the PixelArt.
\medskip
The third argument, \textit{mandatory}, is the filename of the \textsf{csv}.
\begin{PresentationCode}{}
%creation of the csv
\begin{filecontents*}[overwrite]{test1.csv}
-,-,-,-,-,-,4,4,4,4,-,-,-,-,-,-
-,-,-,-,4,4,1,1,1,1,4,4,-,-,-,-
-,-,-,4,1,1,1,1,1,1,1,1,4,-,-,-
-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-,4,1,9,9,1,1,1,1,1,1,9,9,1,4,-
-,4,9,9,9,9,4,4,4,4,9,9,9,9,4,-
-,4,9,4,9,9,4,4,4,4,9,4,9,9,4,-
-,4,1,9,9,9,4,4,4,4,9,9,9,1,4,-
-,-,4,1,1,9,4,4,4,4,9,1,1,4,-,-
-,-,4,1,1,1,4,4,4,4,1,1,1,4,-,-
-,-,-,4,1,1,1,4,4,1,1,1,4,-,-,-
-,-,4,3,1,1,1,1,1,1,1,1,3,4,-,-
-,4,6,3,1,1,1,1,1,1,1,1,3,6,4,-
-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-,4,6,4,1,1,1,4,4,1,1,1,4,6,4,-
2,2,4,2,4,4,4,2,2,4,4,4,2,4,2,2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-,-,-,-,-,4,1,1,1,1,4,-,-,-,-,-
-,-,-,-,-,-,4,1,1,4,-,-,-,-,-,-
-,-,-,-,-,-,-,4,4,-,-,-,-,-,-,-
\end{filecontents*}
\end{PresentationCode}
\begin{PresentationCode}{}
%simple codes
%empty case with -
\PixlArtTikz[Codes=123469,Style=\ttfamily,Unit=0.35]{test1.csv}
~~
\PixlArtTikz[Codes=123469,Colors={red,brown,yellow,black,blue,white},Correction,Unit=0.35]{test1.csv}
~~
\PixlArtTikz[Codes=123469,Colors={red,brown,yellow,black,blue,white},Correction,Unit=0.35,Border=false]{test1.csv}
\end{PresentationCode}
\pagebreak
In the following example, the \textit{symbols} to print can't be used for the \textit{codes}, so we can use the keys \Cle{Symbols} and \Cle{Symb} to bypass this limitation.
\begin{PresentationCode}{}
%symbols associated to codes
\begin{filecontents*}[overwrite]{cap.csv}
-,-,-,-,-,-,-,-,D,-,D,-,D,-,-,-,-,-,-,-,-,-
-,D,D,-,-,-,-,D,D,D,D,D,D,-,-,D,D,D,D,-,-,-
D,-,-,D,-,D,D,F,F,F,F,F,F,D,D,-,-,-,-,D,-,-
-,D,-,-,D,F,F,F,-,-,F,F,F,F,F,D,-,D,D,-,-,-
-,-,D,D,F,F,F,-,F,F,-,F,F,F,F,F,D,D,-,-,-,-
-,-,-,D,F,F,F,F,F,F,F,F,F,F,F,F,D,-,-,-,-,-
-,-,-,D,F,J,J,J,J,J,J,J,F,F,F,F,D,-,-,-,-,-
-,-,-,D,J,-,-,-,J,-,-,-,J,J,F,F,D,-,-,-,-,-
-,-,-,D,J,-,D,-,J,-,D,-,J,J,B,B,D,-,-,-,-,-
-,-,-,D,J,-,-,-,J,-,-,-,J,J,B,B,D,-,-,-,-,-
-,-,-,D,C,J,J,J,J,J,J,J,J,C,C,C,D,-,-,-,-,-
-,-,-,D,C,C,C,C,C,C,C,C,C,C,C,D,D,D,-,-,-,-
-,-,-,D,C,C,C,D,D,D,D,D,D,C,D,A,A,A,D,-,-,-
-,-,-,D,F,C,C,C,C,C,C,C,C,D,A,-,-,-,A,D,-,-
-,-,-,D,F,C,F,C,C,C,C,F,D,A,-,A,A,A,-,A,D,-
-,-,D,C,F,F,F,F,C,C,F,D,A,-,A,F,F,F,A,-,A,D
-,-,D,C,F,F,F,F,F,F,F,D,A,-,A,F,-,F,A,-,A,D
-,-,D,A,D,-,A,-,A,-,A,D,A,-,A,F,F,F,A,-,A,D
-,-,-,D,D,-,A,-,A,-,A,-,D,A,-,A,A,A,-,A,D,-
-,-,-,-,-,D,D,F,D,D,D,D,F,D,A,-,-,-,A,D,-,-
-,-,-,-,-,-,D,A,D,-,-,D,-,-,D,A,A,A,D,-,-,-
-,-,-,-,-,-,D,D,D,-,-,D,D,D,D,D,D,D,-,-,-,-
\end{filecontents*}
\PixlArtTikz[Codes=ABCDFJ,Symbols={1,2,3,4,6,10},Symb,Style=\tiny\sffamily,Unit=0.35]{cap.csv}
~~
\PixlArtTikz[Codes=ABCDFJ,Colors={red,brown,yellow,black,blue,gray},Correction,Unit=0.35]{cap.csv}
\end{PresentationCode}
\pagebreak
\subsection{Symbols within list(s)}
List of symbols can be given within list(s), picked randomly.
\begin{PresentationCode}{}
\begin{filecontents*}[overwrite]{testlist.csv}
A,B,C,A
A,B,B,C
B,A,C,B
C,A,B,C
\end{filecontents*}
\textbf{Notice : }
Multiples of 5 : red\\
Multiples of 3 : green\\
Multiples of 2 : blue
\PixlArtTikz[Codes=ABC,Symbols={5§25§35,3§9§21§27,2§4§8§14§16},Symb,Style=\large\sffamily,Unit=0.85]{testlist.csv}
\hspace{5mm}
\PixlArtTikz[Codes=ABC,Symbols={5§25§35,3§9§21§27,2§4§8§14§16},Symb,Style=\large\sffamily,Unit=0.85]{testlist.csv}
\hspace{5mm}
\PixlArtTikz[Codes=ABC,Colors={red,green,blue},Correction,Style=\large\sffamily,Unit=0.85]{testlist.csv}
\end{PresentationCode}
\pagebreak
\subsection{Starred macro}
The starred macro \texttt{\textbackslash PixlArtTikz*} is to be used within an already created environment. It can be useful for adding code after the PixelArt.
\smallskip
In this case:
\begin{itemize}
\item the \textit{optional} argument between \texttt{<...>} is discarded;
\item the key \Cle{Unit} is discarded too (units can be configured in the environment!)
\end{itemize}
\begin{PresentationCode}{}
\begin{center}
\begin{tikzpicture}[scale=0.5]
%grid to show positionning
\draw[very thin,gray,xstep=1,ystep=1] (0,0) grid (17,-24) ;
\foreach \x in {0,1,...,17} \draw[very thin,gray] (\x,-3pt)--(\x,3pt)%
node[above,font=\scriptsize\sffamily] {\x} ;
\foreach \y in {0,-1,...,-24} \draw[very thin,gray] (3pt,\y)--(-3pt,\y)%
node[left,font=\scriptsize\sffamily] {\y} ;
%le PixelArt
\PixlArtTikz*[Codes=123469,Colors={red,brown,yellow,black,blue,white},Correction]{test1.csv}
%added code
\filldraw[blue] (14,-1) circle[radius=1] ;
\filldraw[yellow] (14,-1) circle[radius=0.8] ;
\draw[green,very thick,<-,>=latex] (15,-1) to[bend left=30] (18,-2)%
node[right,font=\scriptsize\sffamily] {Code Ti\textit{k}Z} ;
\end{tikzpicture}
\end{center}
\end{PresentationCode}
\pagebreak
\section{PixelArt environment}
\subsection{Usage}
The package \textsf{PixelArtTikz} provides an environment to create a PixelArt and add code afterwards.
\begin{itemize}
\item The environment is created within Ti\textit{k}Z and additional code is passed on to the Ti\textit{k}Z environment!
\item The additional code will be printed on top of the PixelArt!
\end{itemize}
\begin{PresentationCode}{listing only}
\begin{EnvPixlArtTikz}[keys]<options tikz>{filename.csv}
%tikz code(s)
\end{EnvPixlArtTikz}
\end{PresentationCode}
The first argument, \textit{optional} and between \texttt{[...]}, proposes the \textsf{keys}:
\begin{itemize}
\item the key \Cle{Codes} with the \textit{string} of \textit{simple} codes of the \textsf{csv} file;
\item the key \Cle{Colors} with the \textit{list} of colors;
\item the key \Cle{Symbols} with the \textit{optional list} of alt.\ symbols for the cells;
\item the boolean \Cle{Correction} to color the PixelArt;\hfill{}default \textsf{false}
\item the boolean \Cle{Symb} to print the symbols;\hfill{}default \textsf{false}
\item the boolean \Cle{Border} to print borders of the cells;\hfill{}default \textsf{true}
\item the key \Cle{Style} to specifythe style of the text. \hfill{}default \textsf{\textbackslash scriptsize}
\end{itemize}
The second argument, \textit{optional} and between \texttt{<...>}, is for Ti\textit{k}Z options to be passed on to the environment which creates the PixelArt.
\medskip
The third argument, \textit{mandatory}, is the filename of the \textsf{csv}.
\subsection{Example}
The symbols are at the nodes $(c\,;\,-l)$ where $l$ and $c$ are the row and column of the data in the \textsf{csv} file.
\begin{PresentationCode}{}
\begin{center}
\begin{EnvPixlArtTikz}%
[Codes=123469,Colors={red,brown,yellow,black,blue,white},Correction,Unit=0.25]
{test1.csv}
\filldraw[blue] (14,-1) circle[radius=1] ;
\filldraw[yellow] (14,-1) circle[radius=0.8] ;
\draw[green,very thick,<-,>=latex] (15,-1) to[bend left=30] (18,-2)%
node[right,font=\scriptsize\sffamily] {Ti\textit{k}Z code} ;
\end{EnvPixlArtTikz}
\end{center}
\end{PresentationCode}
\newpage
\section{Macro for \textit{mini-}PixelArt}
\subsection{Idea}
The idea is tu propose a macro to insert, without \textsf{csv} file, a small PixelArt with small colors list.
\begin{PresentationCode}{listing only}
\MiniPixlArt[keys]{list of colors}
\end{PresentationCode}
The first argument, \textit{optional} and between \texttt{[...]} proposes the \textsf{keys }:
\begin{itemize}
\item the key \Cle{Unit} for dimension of the cells ;\hfill{}default \textsf{0.25em},
\item the boolean \Cle{Border} to print a small border for the cells.\hfill{}default \textsf{false}
\end{itemize}
The second argument, \textit{mandatory} and between \texttt{\{...\}}, is the colors of the cells :
\begin{itemize}
\item each color is \textit{coded} by a letter :
\begin{multicols}{5}
\begin{itemize}
\item \texttt{R : \textcolor{red}{red}}
\item \texttt{G : \textcolor{green}{green}}
\item \texttt{C : \textcolor{cyan}{blue}}
\item \texttt{Y : \textcolor{yellow}{yellow}}
\item \texttt{B : \textcolor{black}{black}}
\item \texttt{L : \textcolor{lightgray}{gray}}
\item \texttt{. : \colorbox{lightgray}{\textcolor{white}{white}}}
\item \texttt{M : \textcolor{brown}{maroon}}
\item \texttt{O : \textcolor{orange}{orange}}
\item \texttt{P : \textcolor{violet}{purple}}
\end{itemize}
\end{multicols}
\item each linebreak is done by \texttt{,} ;
\item the thickness of the borders are 10\,\% of the unit.
\end{itemize}
The last argument, \textit{optional} and between \texttt{<...>}, proposes options for the \textsf{tikz} environment.
\subsection{Examples}
\begin{PresentationCode}{}
\MiniPixlArt{%
..RR..RR..,
.RRRRRRRR.,
RRRRRRRRRR,
RRRRRRRRRR,
RRRRRRRRRR,
.RRRRRRRR.,
..RRRRRR..,
...RRRR...,
....RR....
}
\end{PresentationCode}
\begin{PresentationCode}{}
Inline, we can give \MiniPixlArt[Unit=5mm,Border]{BCGOYG,YLP.BR}<baseline=(current bounding box.center)>
this miniPA.
\end{PresentationCode}
\newpage
\section{Macro for cutting PixelArt}
\subsection{Idea}
The idea is to offer commands to create \textit{collaborative} PixelArts, to form a \textit{large} image from several small ones (of the same size).
\smallskip
{\footnotesize\faBomb} For practical reasons (related to the use of \texttt{filecontents}) the file \textsf{csv} must end with an empty line (it is created automatically via \texttt{filecontents}, and the code uses this specificity).
\smallskip
The available \Cle{keys} are exactly the same as those in classic displays.
\subsection{Global usage}
The argument \texttt{cutting} can be given in the form :
%
\begin{itemize}
\item \Cle{<number of block length>x<number of block col>} to specify the size of the blocks;
\item \Cle{<number of V blocks>+<number of H blocks>} to specify the number of blocks.
\end{itemize}
\begin{PresentationCode}{listing only}
\CutPixlArtTikz(*)[keys]<tikz options>{file.csv}{cutting}
%(*) := change layout formatting (A1 or 1.1)
%1 := keys
%2 := tikz options
%3 := csv file
%4 := block size (LxC) or block number (L+C)
\HelpGridPixelArtTikz(*)[scale]{file.csv}{cutting}
%(*) := change layout formatting (A1 or 1.1)
%1 := scale of notice
%2 := csv file
%4 := block size (LxC) or block number (L+C)
\end{PresentationCode}
\begin{filecontents*}[overwrite]{PAkoala.csv}
A,A,A,A,A,A,A,H,H,H,A,A,A,A,A,H,H,H,A,A,A,A,A,A,A,A,A,H,H,H,H,A,A,H,A,A,A,A,A,A
A,A,A,A,A,A,A,A,H,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A,A,A,A,H,A,A,A,A,A,H,A,A,A,A,A,A
A,A,A,H,A,A,A,A,A,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A,A,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A
A,A,A,A,A,A,A,B,E,E,E,E,A,A,A,A,A,A,A,A,A,A,A,H,H,H,A,B,B,E,E,E,E,B,A,A,A,A,A,H
A,A,H,A,A,A,A,B,E,E,E,E,E,A,A,A,A,A,A,A,A,A,A,H,H,H,B,E,E,E,E,E,E,B,B,A,A,A,A,H
A,A,H,A,A,B,B,E,C,C,C,C,C,E,B,B,B,E,E,E,E,E,E,B,B,B,E,C,C,C,C,C,C,E,B,B,H,H,A,A
A,A,H,A,B,E,D,D,D,D,B,D,C,C,E,E,E,E,C,C,C,C,E,E,E,E,E,C,D,B,B,D,D,D,E,B,H,A,A,A
A,A,A,A,B,E,D,D,F,F,D,B,D,C,C,E,C,C,C,C,C,C,C,C,E,C,C,D,B,D,D,F,F,D,E,B,A,A,A,H
A,A,A,B,C,D,D,F,F,F,D,D,B,B,C,C,C,C,C,C,C,C,C,C,C,C,C,B,D,D,D,F,F,D,D,C,B,A,H,H
A,A,A,B,C,D,F,F,F,F,F,D,D,D,C,C,C,C,C,C,C,C,C,C,C,C,C,D,D,F,F,F,F,F,D,C,B,A,H,H
A,A,A,B,D,D,F,F,F,F,F,D,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,D,F,F,F,F,F,D,D,B,A,A,H
A,A,A,B,D,D,G,F,F,F,F,D,C,C,B,B,B,C,C,B,B,C,C,B,B,B,C,C,D,F,F,F,F,G,D,D,B,A,A,A
A,A,A,A,B,G,G,F,F,F,F,D,C,C,B,F,B,C,B,D,D,B,C,B,F,B,C,C,D,G,F,F,F,G,G,B,H,A,A,A
A,A,A,A,A,B,G,G,G,F,G,D,C,C,C,B,B,C,B,D,D,B,C,B,B,C,C,C,D,G,G,F,G,G,B,H,H,H,A,A
A,A,A,A,A,A,B,G,G,G,G,B,C,C,C,C,C,C,B,B,B,B,C,C,C,C,C,C,D,B,G,G,G,G,B,H,H,H,A,A
A,A,A,A,A,A,A,B,B,B,B,B,C,C,C,C,C,C,B,B,B,B,C,C,C,C,C,C,D,B,B,B,B,B,A,A,H,H,A,A
A,A,A,A,A,A,A,A,A,A,A,D,D,C,C,C,C,F,B,B,B,B,F,C,C,C,C,D,D,A,A,A,A,A,A,A,A,A,A,A
A,A,A,A,A,A,A,A,A,A,A,B,D,D,C,C,C,F,F,B,B,F,F,C,C,C,D,D,B,A,A,A,A,A,A,A,A,A,A,A
A,A,A,A,A,H,H,H,A,A,A,A,B,B,D,C,C,F,F,F,F,F,F,C,C,D,B,B,A,A,A,A,A,A,H,H,H,A,A,A
A,A,A,A,H,H,H,H,A,A,A,A,B,B,D,D,D,G,G,G,G,G,G,D,D,D,D,B,A,A,A,A,A,A,A,H,H,H,A,A
A,A,A,A,H,H,H,A,A,A,A,B,D,D,D,D,D,G,G,G,G,G,G,D,D,D,D,D,B,A,A,A,A,A,A,A,H,H,A,A
A,A,A,H,A,A,A,A,A,A,B,C,D,D,D,G,G,G,D,D,D,D,G,G,G,D,D,D,C,B,A,H,H,A,A,A,A,H,A,A
A,A,A,H,H,A,A,A,A,A,D,C,C,C,D,G,G,F,G,D,D,G,F,G,G,D,D,C,C,C,B,A,H,H,A,A,A,A,A,A
A,A,A,A,A,H,H,H,H,B,D,D,C,C,D,G,G,F,F,F,F,F,F,G,G,D,D,C,C,D,B,A,A,H,H,A,A,A,A,A
A,A,A,A,A,A,A,A,A,B,D,D,C,C,C,C,C,B,F,F,F,F,F,B,C,C,C,C,D,D,B,A,A,H,H,H,H,A,A,A
A,A,A,H,H,A,A,A,A,B,D,D,C,C,C,C,C,C,B,F,F,F,B,C,C,C,C,C,D,D,B,A,A,A,A,H,H,A,A,A
A,A,A,A,A,A,A,A,A,A,B,B,D,D,C,C,C,C,C,B,F,B,C,C,C,C,D,D,B,B,A,A,A,H,H,A,A,A,A,A
A,A,A,A,A,A,A,A,A,A,B,B,B,D,D,C,C,C,C,B,F,B,C,C,C,C,D,B,B,B,A,A,A,H,H,A,A,A,A,A
A,A,A,A,A,A,A,A,A,B,C,C,C,B,B,D,D,D,D,B,F,B,D,D,D,B,B,D,C,C,B,A,A,A,H,A,A,A,A,A
A,A,A,A,A,A,A,A,B,C,C,C,C,C,D,B,B,B,F,F,F,F,B,B,B,D,D,C,C,C,C,B,A,A,A,A,A,A,H,H
A,A,A,A,A,A,A,A,B,C,C,C,C,C,D,D,D,G,G,F,F,G,G,D,D,D,D,C,C,C,C,B,A,A,A,A,A,A,H,H
A,A,A,A,A,A,A,I,B,D,C,C,C,C,C,C,C,G,G,F,F,G,G,C,C,C,C,C,C,C,D,B,I,A,A,A,A,A,A,A
A,A,A,A,A,A,A,I,B,D,D,D,C,C,C,B,B,B,G,G,G,G,B,B,B,C,C,C,D,D,D,B,I,A,A,A,A,A,A,A
A,A,A,A,A,H,A,I,I,B,D,D,D,D,D,C,C,C,B,D,D,B,C,C,C,C,D,D,D,B,B,I,I,A,A,A,A,A,A,A
A,A,A,A,A,H,H,H,I,B,B,D,D,D,D,D,C,C,B,D,D,B,C,C,C,D,D,D,D,B,I,I,A,A,A,A,A,A,A,A
A,A,H,H,H,A,A,A,I,I,I,B,B,B,D,B,B,B,B,B,B,B,B,B,B,D,B,B,B,I,I,I,A,A,A,A,A,A,H,A
A,A,H,H,H,A,A,A,A,I,I,I,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,I,I,I,A,A,A,A,A,A,A,H,A
H,H,A,H,H,A,A,A,A,A,A,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,A,A,A,A,A,A,A,A,A,A
A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,I,I,I,I,I,I,I,I,I,A,A,A,A,A,A,A,A,A,A,A,H,A,A,A,A
A,A,A,A,A,A,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,H,A,A,A,A
\end{filecontents*}
\subsection{Example}
\def\listcoulkoala%
{VertForet,Noir,GrisClair,GrisFonce,Beige,Blanc,BleuClair,VertClair,Marron}
\begin{PresentationCode}{listing only}
\def\listcoulkoala%
{VertForet,Noir,GrisClair,GrisFonce,Beige,Blanc,BleuClair,VertClair,Marron}
\end{PresentationCode}
\begin{PresentationCode}{}
%block with 8x8 size
\HelpGridPixelArtTikz{PAkoala.csv}{8x8}
~~
\PixlArtTikz[Correction,Unit=0.125,Codes=ABCDEFGHI,Colors={\listcoulkoala},Grid=8x8]{PAkoala.csv}
\end{PresentationCode}
\begin{PresentationCode}{}
%16 blocks (4L 4C)
\HelpGridPixelArtTikz*[2]{PAkoala.csv}{4+4}
~~
\PixlArtTikz[Correction,Unit=0.2,Codes=ABCDEFGHI,Colors={\listcoulkoala},Grid=4+4]{PAkoala.csv}
\end{PresentationCode}
\newpage
\begin{PresentationCode}{}
%block with 8x8 size
\CutPixlArtTikz[Unit=0.3,Codes=ABCDEFGHI]{PAkoala.csv}{8x8}
\end{PresentationCode}
\pagebreak
\begin{PresentationCode}{}
%16 blocks (4L 4C)
\CutPixlArtTikz*[Unit=0.3,Codes=ABCDEFGHI,Correction,Colors={\listcoulkoala}]{PAkoala.csv}{4+4}
\end{PresentationCode}
\pagebreak
\section{Anamorphic cylinder PixelArt}
\subsection{Idea}
The idea is to provide something to create PixelArt with the aim of using a cylindrical anamorphosis.
On \url{
https://www.youtube.com/watch?v=PT8KUozBg3I}, there is a video \textit{demonstration}, proposed by Jean-Yves Labouche.
The overall operation is similar to that of the \textit{main} command, however there are some adjustments:
\begin{itemize}
\item the possibility of giving the file \textsf{csv} in \textit{normal} or \textit{inverted} mode;
\item the dimensions (width \& middle) must be specified to produce the PixelArt;
\item the command is standalone (for the moment) so no addition(s) later.
\end{itemize}
\begin{PresentationCode}{listing only}
\PixlArtTikzCylindric[keys]{file.csv}
\end{PresentationCode}
The files illustrating this paragraph are given below.
\begin{PresentationCode}{}
%version with inverted data
\begin{filecontents*}[overwrite]{PAyoda.csv}
E,E,E,A,A,E,A,A,E,D
E,E,E,F,F,F,F,F,E,D
E,E,E,F,F,C,F,F,E,D
E,A,F,F,C,C,C,F,F,A
E,A,F,F,C,C,C,F,F,A
E,E,E,A,A,A,A,A,E,E
E,E,E,A,A,A,A,A,E,E
E,E,A,E,B,A,B,E,A,E
E,A,A,A,A,A,A,A,A,A
E,E,E,A,A,A,A,A,E,E
\end{filecontents*}
\PixlArtTikz[%
Codes=ABCDEF,
Colors={green,black,brown,white,brown!75!black,lightgray},
Correction,Unit=0.35]%
{PAyoda.csv}
\end{PresentationCode}
\begin{PresentationCode}{}
%version with normal data
\begin{filecontents*}{PAsorciere.csv}
V,V,V,V,N,N,N,V,V,V
V,V,V,N,N,N,N,N,V,V
N,N,N,N,N,N,N,N,N,N
V,V,V,G,G,G,O,O,V,V
V,V,V,J,J,G,O,O,O,V
V,V,G,N,J,G,O,O,O,V
V,G,G,G,G,G,O,O,O,O
V,V,N,N,N,G,O,O,O,O
V,V,G,G,G,G,O,O,O,O
V,V,V,V,N,N,O,O,O,O
\end{filecontents*}
\PixlArtTikz[%
Codes=VNGOJ,
Colors={purple!50,black,green,orange,yellow},
Correction,Unit=0.35]%
{PAsorciere.csv}
\end{PresentationCode}
\subsection{Keys and options}
The first argument, \textit{optional} and between \texttt{[...]} offers \textsf{Keys} necessary for the command to function properly:
\begin{itemize}
\item the key \Cle{Width} which defines the width (radius in cm) of the rendering;\hfill{}default \textsf{6}
\item the key \Cle{Center} which defines the width (radius in cm) of the \textit{middle};\hfill{}default \textsf{1.25}
\item the key \Cle{Codes} contains the \textit{string} of the \textit{simple} codes of the file \textsf{csv};
\item the key \Cle{Colors} which contains the \textit{list} of associated colors;
\item the key \Cle{Symbols} which contains the \textit{possible list} of alternative characters to display in the boxes;
\item the key \Cle{Style} which allows you to specify the style of characters. \hfill{}default \textsf{normalsize}
\item the Boolean key \Cle{Correction} which allows you to color the PixelArt;\hfill{}default \textsf{false}
\item the Boolean key \Cle{Symb} which allows you to display the \textit{alternative} characters;\hfill{}default \textsf{false}
\item the Boolean key \Cle{Solution} which displays the solution (with \textit{mirror} effect);\hfill{}default \textsf{false}
\item the Boolean key \Cle{Swap} which allows you to specify the data type (\Cle{true} := normal; \Cle{false} := inverted).
\hfill{}default \textsf{false}
\end{itemize}
The second argument, \textit{mandatory}, is the name of the \textsf{csv} file to use.
\pagebreak
\subsection{Example with inverted data (Yoda)}
In this paragraph, we use the data \texttt{PAyoda}, which corresponds to the \textit{inverted} layout, so the key \Cle{Swap} is not necessary.
\begin{PresentationCode}{}
%classic version
\PixlArtTikzCylindric[Codes=ABCDEF,Style=\small\ttfamily]{PAyoda.csv}
%version with 'symbols'
\PixlArtTikzCylindric[Codes=ABCDEF,Symbols={1,2,3,4,5,6},Symb,Style=\small\ttfamily]{PAyoda.csv}
\end{PresentationCode}
\begin{PresentationCode}{}
%Fix and solution
\begin{tabular}{c}
\PixlArtTikzCylindric[%
Codes=ABCDEF,
Colors={green,black,brown,white,brown!75!black,lightgray},
Solution]%
{PAyoda.csv}
\\
\PixlArtTikzCylindric[%
Codes=ABCDEF,
Colors={green,black,brown,white,brown!75!black,lightgray},
Correction]%
{PAyoda.csv}
\end{tabular}
\end{PresentationCode}
\pagebreak
\subsection{Example with classic data (Witch)}
In this paragraph, we use the data \texttt{PAsorciere}, which corresponds to the \textit{normal} layout, so the key \Cle{Swap} is necessary.
\begin{PresentationCode}{}
%classic version
\PixlArtTikzCylindric[%
Width=4,Center=1,Codes=VNGOJ,
Colors={purple!50,black,green,orange,yellow},
Swap,Style=\ttfamily\scriptsize]%
{PAsorciere.csv}
\end{PresentationCode}
\begin{PresentationCode}{}
%Correction and solution
\begin{tabular}{c}
\PixlArtTikzCylindric[%
Width=4,Center=0.75,Codes=VNGOJ,
Colors={purple!50,black,green,orange,yellow},
Swap,Solution]%
{PAsorciere.csv}
\\
\PixlArtTikzCylindric[%
Width=4,Center=0.75,Codes=VNGOJ,
Colors={purple!50,black,green,orange,yellow},
Swap,Correction]%
{PAsorciere.csv}
\end{tabular}
\end{PresentationCode}
\pagebreak
\section{With datatool}
\subsection{Macros}
\begin{PresentationCode}{listing only}
%reading of csv
\readdtcsv{file.csv}{readname}
%full pixelart (french keys for the moment...)
\dtpixlarttikz[keys]{readname}
%cut pixelart (french keys for the moment...)
\dtpixlarttikzblock[clés]{readname}{LxC or L+C}{numblock}
\end{PresentationCode}
\begin{PresentationCode}{}
%reading of csv (koala)
\readdtcsv{PAkoala.csv}{DTkoala}
%full pixelart
\dtpixlarttikz[Correction,Unite=0.125,Codes=ABCDEFGHI,Couleurs={\listcoulkoala},Decoupage=8x8]{DTkoala}
%cut pixelart (french keys for the moment...)
\dtpixlarttikzblock[Unite=0.125,Correction,Codes=ABCDEFGHI,Couleurs={\listcoulkoala}]%
{DTkoala}{8x8}{1/1}
\end{PresentationCode}
\newpage
\part{History}
\verb|v0.1.8|~:~~~~Bugfix
\verb|v0.1.7|~:~~~~Bugfix with 'cut'
\verb|v0.1.6|~:~~~~Styles for lines + \textsf{datatool} for alternative version
\verb|v0.1.5|~:~~~~Symbols can be given with list(s) + Enhancements of internal code
\verb|v0.1.4|~:~~~~Anamorphic cylinder PixelArts
\verb|v0.1.3|~:~~~~Cut PixelArts within several PixelArts
\verb|v0.1.2|~:~~~~\textit{mini-}PixelArts
\verb|v0.1.1|~:~~~~Bugfix with color
\verb|v0.1.0|~:~~~~Initial version
\end{document}