summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-01-27 03:01:16 +0000
committerNorbert Preining <norbert@preining.info>2023-01-27 03:01:16 +0000
commit924dfac8358e4caeec54b5bce18848ee52f36eac (patch)
treee9253a2879d9a841116d9db82d630ef976f7b779 /graphics/pgf/contrib
parent0c889bec86ba92853b3923e39de0b6bb17d18486 (diff)
CTAN sync 202301270301
Diffstat (limited to 'graphics/pgf/contrib')
-rw-r--r--graphics/pgf/contrib/codeanatomy/README.md22
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.dtx50
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdfbin123921 -> 120024 bytes
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex139
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.pdfbin97601 -> 110750 bytes
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdfbin82738 -> 102008 bytes
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex119
-rw-r--r--graphics/pgf/contrib/codeanatomy/release-note-v0.4-Alpha.txt1
-rw-r--r--graphics/pgf/contrib/pixelarttikz/README.md7
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdfbin0 -> 490717 bytes
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex537
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdfbin0 -> 501108 bytes
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex544
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/base.csv4
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/cap.csv22
-rw-r--r--graphics/pgf/contrib/pixelarttikz/doc/test1.csv23
-rw-r--r--graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty313
17 files changed, 1702 insertions, 79 deletions
diff --git a/graphics/pgf/contrib/codeanatomy/README.md b/graphics/pgf/contrib/codeanatomy/README.md
index 32d85cfa5b..1a3a55f2c3 100644
--- a/graphics/pgf/contrib/codeanatomy/README.md
+++ b/graphics/pgf/contrib/codeanatomy/README.md
@@ -1,5 +1,5 @@
-`codeanatomy` -- Draw Code Anatomy
-==================================
+# `codeanatomy` -- Draw Code Anatomy #
+
(C) 2019 Hồng-Phúc Bùi
@@ -11,23 +11,23 @@ from Robert Sedgewick and Kevin Wayne.
This package just provides tools to draw those figures.
Some illustrations can be found here:
-
<a href="https://introcs.cs.princeton.edu/java/home/">https://introcs.cs.princeton.edu/java/home/</a>
+For example: Anatomy of a static method:
+
-for example the origin illustation of static method in java:
-<img src="https://introcs.cs.princeton.edu/java/11cheatsheet/images/function.png">
+_![Anatomy of a static method](https://introcs.cs.princeton.edu/java/11cheatsheet/images/function.png)_
-Licence
--------
+## Licence ##
+
This package may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
License or any later version. The latest version
of this license is in the file https://www.latex-project.org/lppl.txt
-Build and Install (for Distributor)
------------------------------------
+## Build and Install (for Distributor) ##
+
* To build the style file `codeanatomy.sty` just run **one** of
@@ -50,8 +50,8 @@ lualatex codeanatomy.lstlisting.tex
(`lualatex` because of my name, really ego right! It needs unicode to be typeset correctly.)
-Development
------------
+## Development ##
+
I try to use latex3 as much as posible. You can use
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx b/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx
index 4651dadeaa..8e4361b897 100644
--- a/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx
@@ -23,7 +23,7 @@
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[2018/12/01]
-%<package>\ProvidesPackage{codeanatomy}[2019/07/12 v0.4-Alpha draw Code Anatomy]
+%<package>\ProvidesPackage{codeanatomy}[2023/01/24 v0.4-Beta draw Code Anatomy]
% \fi
%
% \iffalse
@@ -169,7 +169,7 @@
%
%
% \DescribeMacro{code part}
-% \TikZ{} style to marce a piece of code in an anatomy: \\
+% \TikZ{} style to mark a piece of code in an anatomy: \\
% |\tikz{\node(code) [code part] at (0,0) {let a = 12;};}|\\
% yields \tikz{\node(code) [code part] at (0,0) {let a = 12;};}
% \begin{macrocode}
@@ -186,6 +186,26 @@
% \end{macrocode}
%
%
+% \DescribeMacro{ignored code part}
+% \TikZ{} style to make a pice of code in an anatomy as not important in currently talking context
+% |\tikz{\node(ignore code) [ignored code part] at (0,0) {/*some comment*/} }|
+% yields \tikz{\node(ignore code) [ignored code part] at (0,0) {/*some comment*/} }
+%
+% \changes{v0.4-Beta}
+% {2023/01/24}
+% {Add new \TikZ{} Style \texttt{ignored code part}}%
+%
+% \begin{macrocode}
+\tikzset{ignored code part/.style={%
+ code part,%
+ draw=none,color=bgcmdcolor,%
+ inner sep=0.75pt
+ }
+}
+% \end{macrocode}
+%
+%
+%
%
% \DescribeMacro{fit extrem}
% \TikZ{} style to mark a piece of multiple line code in an anatomy:\\
@@ -278,22 +298,29 @@
% This command can be used if there are no other packages to typeset code listing in use.
% \begin{macrocode}
\NewDocumentCommand{\codeBlock}{m}%
- {\node(code) [anatomy] at (0,0) {#1};}
+ {\node(code) [anatomy] at (0,0) {#1};}%
% \end{macrocode}
%
%
%
-% \DescribeMacro{\cPart} \marg{node name}\marg{piece of code}
+% \DescribeMacro{\cPart} \oarg{style} \marg{node name}\marg{piece of code}
%
% Assign a piece of typeset code --typical in one line-- to a \TikZ{} Node, so that it can
% be annotated.
% \begin{itemize}
+% \item \oarg{style} a defined \TikZ{} style to be applied to this node, the style |code part|
+% is applied to the node per default.
% \item \marg{node name} is a unique \TikZ{} node name in the |tikzpicture|
% \item \marg{piece of code} is a single code part to be marked.
% \end{itemize}
+%
+% \changes{v0.4-Beta}
+% {2023/01/24}
+% {Add option \oarg{style} to \texttt{cPart}}%
+%
% \begin{macrocode}
-\NewDocumentCommand{\cPart}{mm} %
- {\tikzmarknode[code part]{#1}{#2}}
+\NewDocumentCommand\cPart{O{code part}mm}
+ {\tikzmarknode[#1]{#2}{#3}}
% \end{macrocode}
%
%
@@ -303,12 +330,19 @@
% Assign a piece of typeset code --typical in one line-- to a \TikZ{} Node, so that it can
% be annotated. It does not plot border around the pice of code as |\cPart| does.
% \begin{itemize}
+% \item \oarg{style} a defined \TikZ{} style to be applied to this node, the style |ignored code part|
+% is applied to the node per default.
% \item \marg{node name} is a unique \TikZ{} node name in the |tikzpicture|
% \item \marg{piece of code} is a single code part to be marked.
% \end{itemize}
+%
+% \changes{v0.4-Beta}
+% {2023/01/24}
+% {Add option \oarg{style} to \texttt{iPart}}
+%
% \begin{macrocode}
-\NewDocumentCommand{\iPart}{mm} %
- {\tikzmarknode[code part,draw=none,inner sep=0.75pt]{#1}{#2}}
+\NewDocumentCommand{\iPart}{O{ignored code part}mm} %
+ {\tikzmarknode[#1]{#2}{#3}}
% \end{macrocode}
%
%
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf
index 4279660c8c..eabe1d61bd 100644
--- a/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex
index b8956cea22..1e676f58e1 100644
--- a/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex
@@ -1,11 +1,12 @@
-\documentclass[full]{l3doc}
+\documentclass{article}
\usepackage{fontspec}
+
\usepackage[backend=biber]{biblatex}
\addbibresource{literatur.bib}
-\usepackage{codeanatomy}
+\usepackage{codeanatomy}
\usepackage{listings}
\lstset {
basicstyle=\small\ttfamily%
@@ -17,18 +18,17 @@
,keepspaces=true
}
-\def\thinmargin{\list{}{\rightmargin-30pt\leftmargin-70pt}\item[]}
-\let\endthinmargin=\endlist
-
-\usepackage{filecontents}
+%\usepackage{filecontents}
+% command from ltxdoc
+\newcommand{\pkg}[1]{\textsf{#1}}
% others shortcuts
\newcommand{\slsh}{\textbackslash{}}
\newcommand{\TikZ}{Ti\textit{k}Z}
\newcommand{\inputlisting}[1]{%
\lstinputlisting[%
basicstyle=\footnotesize\ttfamily%
- ,xleftmargin=-70pt%
+ ,xleftmargin=-40pt%
,resetmargins=true%
,firstline=5%
,language=%
@@ -36,11 +36,12 @@
,escapeinside={}{}%
]{#1}%
}
+\def\thinmargin{\list{}{\rightmargin-30pt\leftmargin-40pt}\item[]}
+\let\endthinmargin=\endlist
-\usepackage{hyperref}
-\GetFileInfo{codeanatomy.sty}
-\DoNotIndex{}
+\usepackage{readprov} % need for \GetFileInfo{}
+\usepackage{hyperref}
\title{
\pkg{codeanatomy} -- Draw Code Anatomy%
@@ -50,7 +51,7 @@
}
\author{
- Hồng-Phúc Bùi
+ Hồng-Phúc Bùi%
\thanks{
E-mail:
\href{mailto:Hồng-Phúc Bùi}
@@ -60,20 +61,21 @@
\date{Released \filedate}
-\AtEndDocument{
- \printbibliography
-}
+
\begin{document}
+\GetFileInfo{codeanatomy.sty}
+
\maketitle
\tableofcontents
-\section{General Usage in Conjuntion with Package \pkg{listings}}
+
+\section{General Usage with Package \pkg{listings}}
\subsection{Setup Package \pkg{listings}}
The most important setup for the package \pkg{listings} is the delimiter to escape \LaTeX{}
-commands in Listing. With this escape delimiter we can mark a piece of code as with |\cPart|.
-In this example we use |!| and |!| as delimiter. Code between |!| and |!| is evaluated as
+commands in Listing. With this escape delimiter we can mark a piece of code as with \verb|\cPart|.
+In this example we use \verb|!| and \verb|!| as delimiter. Code between \verb|!| and \verb|!| is evaluated as
\LaTeX{}-code.
\lstset {
@@ -99,13 +101,17 @@ In this example we use |!| and |!| as delimiter. Code between |!| and |!| is eva
\end{thinmargin}
-Delimiter can also be reset in |document|-Environment, typical just before a new \verb:\begin{lstlisting}:
-environment so each anatomy can have different delimiter. The fact is, in this document I use |+| and |+| for
-the above listing, so that I can typeset |!| in this listing.
+Delimiter can also be reset in \verb|document|-Environment, typical just before a new \verb:\begin{lstlisting}:
+environment so each anatomy can have different delimiter. The fact is, in this document I use \verb|+| and \verb|+| for
+the above listing, so that I can typeset \verb|!| in this listing.
+
+You may also want to set option \verb|keepspaces| to \verb|true|, sothat your reader can easy copy past
+your example code.
\subsection{Typeset Code}
-The command |\codeBlock| does not work if the environment |lstlisting| is passed to its argument. So instead of
-|\codeBlock| we must use the \TikZ{} command |\node|:
+% -----------------------
+The command \verb|\codeBlock| does not work if the environment \verb|lstlisting| is passed to its argument. So instead of
+\verb|\codeBlock| we must use the \TikZ{} command \verb|\node|:
\begin{thinmargin}
\begin{tikzpicture}[remember picture]
@@ -169,10 +175,10 @@ function gcd(p,q) {
\subsection{Mark Code}
% --------------------
-The command |\cPart| can be used to mark single-line code parts. For
-multiple-line code parts once can use |\extremPoint| to mark the outer most
-points of code parts and |\fitExtrem| to cover exterm points of a code part.
-These commmands must be put in delimiter, here |!| and |!|.
+The command \verb|\cPart| can be used to mark single-line code parts. For
+multiple-line code parts once can use \verb|\xxxPoint| family to mark the outer most
+points of code parts and \verb|\fitExtrem| to cover exterm points of a code part.
+These commmands must be put between escape delimiter, here \verb|!| and \verb|!|.
\begin{thinmargin}
\begin{tikzpicture}[remember picture]
@@ -181,7 +187,7 @@ These commmands must be put in delimiter, here |!| and |!|.
\begin{tikzpicture}[remember picture]
\node(code) [anatomy] at (0,0) {
+\texttt{\slsh{}begin\{lstlisting\}}+
-!\cPart{fnHead}{function \cPart{fnName}{gcd}\cPart{paramList}{(p,q)}}! {
+!\cPart{fnHead}{function \cPart{fnName}{gcd} \cPart{paramList}{(p,q)}}! {
+\cPart{ep1}{!\slsh{}mtPoint\{mostLeft\}!}+if (q === 0) {
return q;
}else{
@@ -196,7 +202,7 @@ These commmands must be put in delimiter, here |!| and |!|.
\end{lstlisting}
};
% Annotations
-\codeAnnotation{epText} (11,2.5) {\texttt{extremPoint}-s mark\\outer most\\of the function body}
+\codeAnnotation{epText} (12,2.75) {xxx\texttt{Point}-s mark\\outer most\\of the function body}
\codeAnnotation{cpText} (-2,3) {\texttt{cPart} marks a\\single line\\code part}
% Arrows
\draw[->,annotation] (epText) -- (ep1.south east);
@@ -229,19 +235,55 @@ Figure~\ref{fig:listing-code-parts} shows the result of the above code.
\caption{Code Listing with mark of code parts\label{fig:listing-code-parts}}
\end{figure}
+
+\subsection{Highlight some tokens}
+
+\begin{filecontents}{recursive-with-bug.tex}
+\lstset{escapeinside={!}{!},basicstyle=\linespread{1.8}}
+\begin{tikzpicture}[remember picture]
+\tikzstyle{token} = [code part, fill=yellow]
+\tikzstyle{bug} = [code part, fill=red!50]
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+function !\cPart[token]{fnName}{gcd}! (p,q) {
+ if (q === 0) {
+ return !\cPart[bug]{bug}{q}!;
+ } else {
+ let r = p % q;
+ return !\cPart[token]{recursive}{gcd}!(q, r);
+ }
+}
+\end{lstlisting}
+};
+\codeAnnotation{recursiveText} (-1,2) {Function can\\call itself.}
+\codeAnnotation{bugText} ( 5,2.25) {This is\\the bug.}
+
+\draw[->, annotation] (recursiveText) to[out=50, in=190] (fnName);
+\draw[->, annotation] (recursiveText) to[out=-20, in=175] (recursive.north west);
+\draw[->, annotation] (bugText) to[out=190,in=-20] (bug.south east);
+\end{tikzpicture}
+\end{filecontents}
+
+%\begin{thinmargin}
+\inputlisting{recursive-with-bug.tex}
+%\end{thinmargin}
+
+\input{recursive-with-bug.tex}
+
+
+
+
+
\subsection{Add Annotations to Listing}
% -------------------------------------
-This step is the same as the description in the main document of package \pkg{codeanatomy}.
+This step is the same as the description in the usage document of package \pkg{codeanatomy}.
Readers can typeset annotations to the above listing like an exercise.
-
-
\section{Some examples}
% ====================
-% Reset to standard
Most of examples in this section are redrawn from the textbook~\autocite{sedgewick-wayne-2016}.
@@ -260,7 +302,7 @@ public !\iPart{class}{class}! !\cPart{className}{HelloWorld}!
!\hmtPoint{left}\iPart{assign}{
\bgcode{// Prints "Hello World" in the terminal window}}
\extremPoint{fnR} \extremPoint{mR}!
- !\iPart{fnCall}{System.out.print( "Hello World");}\dmbPoint{mostBottom}!
+ !\iPart{fnCall}{System.out.print("Hello World");}\dmbPoint{mostBottom}!
}!\mbPoint{mainBottom}!
}
\end{lstlisting}
@@ -276,18 +318,20 @@ public !\iPart{class}{class}! !\cPart{className}{HelloWorld}!
\codeAnnotation{functionBodyText} (2.5,-0.5) {body}
\codeAnnotation{statement} (8,0) {statements}
+{[on background layer]
\draw[->,annotation] (fileNameText) -- (class);
\draw[->,annotation] (classNameText) -- (className);
\draw[->,annotation] (classBodyText.south west) -- (classBody);
\draw[->,annotation] (functionBodyText) -- (functionBody);
\draw[->,annotation] (statement) -- (assign.353);
\draw[->,annotation] (statement) -- (fnCall.350);
+}
\end{tikzpicture}
\end{filecontents}
-\begin{thinmargin}
+%\begin{thinmargin}
\inputlisting{java-program.tex}
-\end{thinmargin}
+%\end{thinmargin}
\input{java-program.tex}
@@ -486,7 +530,6 @@ while ( !\cPart{c}{power <= n/2}! )
\inputlisting{anatomy-of-a-while-loop.tex}
\end{thinmargin}
-{\sffamily test font if while do}
\input{anatomy-of-a-while-loop.tex}
@@ -517,7 +560,7 @@ for ( !\cPart{i}{int i = 0}!; !\cPart{c}{i <= n}!; !\cPart{u}{i++}! )
\codeAnnotation{initText} (-1.5,2.7) {initialize another\\
variable in a \extremPoint{initPoint}[0.75ex]\\
separate\\statement}
-\codeAnnotation{iText} (1,3.5) {declare and initialize\\
+\codeAnnotation{iText} (1.2,3.5) {declare and initialize\\
a loop control variable}
\codeAnnotation{cText} (3.5,3) {loop-\\continuation\\condition}
\codeAnnotation{uText} (6,3) {increment}
@@ -562,15 +605,15 @@ for ( !\cPart{i}{int i = 0}!; !\cPart{c}{i <= n}!; !\cPart{u}{i++}! )
\fitExtrem{b}{(left) (right) (bottom)}
% Annotation
-\codeAnnotation{sText} (-0.7,5) {signature}
-\codeAnnotation{rtText} (2,5) {return\\type}
-\codeAnnotation{fnText} ( 4,5) {method\\name}
-\codeAnnotation{alText} ( 6,5) {argument\\list}
-\codeAnnotation{atText} (6.5,1.75) {argument\\type}
-\codeAnnotation{pvText} (7.5,2.70) {parameter\\variable}
-\codeAnnotation{lvText} (-0.7,2.5) {local\\variable}
-\codeAnnotation{bText} (-0.7,1.5) {method\\body}
-\codeAnnotation{rsText} (3,-0.4) {return statement}
+\codeAnnotation{sText} (-0.7,5.25) {signature}
+\codeAnnotation{rtText} (2,5.25) {return\\type}
+\codeAnnotation{fnText} ( 4,5.25) {method\\name}
+\codeAnnotation{alText} ( 6,5.25) {argument\\list}
+\codeAnnotation{atText} (6.75,1.75) {argument\\type}
+\codeAnnotation{pvText} (7.5,2.70) {parameter\\variable}
+\codeAnnotation{lvText} (-0.7,3) {local\\variable}
+\codeAnnotation{bText} (-0.7,1.5) {method\\body}
+\codeAnnotation{rsText} (3,-0.4) {return statement}
% Arrows
\draw[->,annotation] (sText) -- (s.north west);
\draw[->,annotation] (rtText) -- (rt);
@@ -590,5 +633,7 @@ for ( !\cPart{i}{int i = 0}!; !\cPart{c}{i <= n}!; !\cPart{u}{i++}! )
\input{anatomy-of-a-static-method.tex}
-\end{document}
+\printbibliography
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf b/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf
index 3348439ed5..fbda22f622 100644
--- a/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf
index 5057ad4a54..66f2e74495 100644
--- a/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex
index 5136905bab..0ebe274d27 100644
--- a/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex
@@ -237,6 +237,7 @@ we can use |\\[<length>]| to add a little amount of vertical space, sothat the b
each others.
\begin{thinmargin}
+{\footnotesize
\begin{tikzpicture}[remember picture]
{[on background layer]\draw[code grid debug] (-0.5,-0.5) grid (10.5,4.5);}\\
\codeBlock{
@@ -258,16 +259,17 @@ each others.
\slsh{}end\{tikzpicture\}
}
-\codeAnnotation{nestedCodePartText}(11,6){\texttt{cPart} can be nested}
-\codeAnnotation{exText} (15,3){\texttt{extremPoint}s\\are used to mark\\outer most points of\\a multiline code part}
+\codeAnnotation{nestedCodePartText}(11,5){\texttt{cPart} can be nested}
+\codeAnnotation{exText} (15,2){\texttt{extremPoint}s\\are used to mark\\outer most points of\\a multiline code part}
\codeAnnotation{fitExtemCmdText} (6,-1){\texttt{fitExtrem} draws a rectangle\\which covers all passed extrem points}
-\draw[->, annotation] (nestedCodePartText) to[out=270,in=90] (nestedCodePart);
-\draw[->, annotation] (exText) to[out=145,in=320] (ep1.south east);
-\draw[->, annotation] (exText) to[out=190,in=300] (ep2.320);
-\draw[->, annotation] (exText) to[out=220,in=350] (ep3.340);
+\draw[->, annotation] (nestedCodePartText) to[out=200,in=40] (nestedCodePart);
+\draw[->, annotation] (exText) to[out=160,in=350] (ep1.south east);
+\draw[->, annotation] (exText) to[out=190,in=340] (ep2.320);
+\draw[->, annotation] (exText) to[out=195,in=350] (ep3.south east);
\draw[->, annotation] (fitExtemCmdText) -- (fitExtemCmd);
\end{tikzpicture}
+}
\end{thinmargin}
@@ -305,12 +307,12 @@ Whereas \parg{annotation label}s are the first argument of |\codeAnnotation|s an
\{[on background layer]\textbackslash{}draw[code grid debug]\\
\ptab\ptab (-0.5,-0.5) grid (6.5,4.5);\}\\
\textbackslash{}codeBlock\{\%\\
-\slsh{}cPart\{functionHead\} \{function \slsh{}cPart\{functionName\}\{gcd\} \slsh{}cPart\{paramList\}\{(p, q)\}\} \slsh\{\\
+\slsh{}cPart\{functionHead\} \{function \slsh{}cPart\{functionName\}\{gcd\} \slsh{}cPart\{paramList\}\{(p, q)\}\} \slsh\{\\
\slsh\slsh[2.5pt]\\
-\slsh{}ptab\{\}\slsh{}mtPoint\{mostLeft\} if (q === 0) \slsh\{ \slsh\slsh\\
-\slsh{}ptab\slsh{}ptab\{\} return p; \slsh\slsh\\
-\slsh{}ptab\slsh \} else \slsh\{ \slsh\slsh\\
-\slsh{}ptab\slsh{}ptab\{\} return gcd(q, p\slsh\%q); \slsh{}extremPoint\{mostRight\} \slsh\slsh\\
+\slsh{}ptab\{\}\slsh{}mtPoint\{mostLeft\} if (q === 0) \slsh\{ \slsh\slsh\\
+\slsh{}ptab\slsh{}ptab\{\} return p; \slsh\slsh\\
+\slsh{}ptab\slsh \} else \slsh\{ \slsh\slsh\\
+\slsh{}ptab\slsh{}ptab\{\} return gcd(q, p\slsh\%q); \slsh{}extremPoint\{mostRight\} \slsh\slsh\\
\slsh{}ptab\slsh{}mbPoint\{mostBottom\}\slsh\} \slsh\slsh\\
\slsh\} \\
\} \\
@@ -373,11 +375,102 @@ as figure~\ref{fig:tut1-function}.
As we see in the previous section, the command |\codeBlock| cannot typeset whitespaces correctly as we
expect. A way to typeset code listing is using the package \pkg{listings}. See \texttt{codeanatomy.lstlisting.pdf}
-
+for more information.
\section{Customize style}
-TODO
+\changes{v0.4-Beta}
+ {2023/01/24}
+ {Add Option \oarg{style} to \texttt{cPart} and \texttt{iPart}}
+
+Maybe we want to highlight the function name \texttt{gcd} with some background color like
+figure~\ref{fig:function-with-highlight}. The best way to do this task is to assign this
+highlight format to a \TikZ{} style --e.g. \texttt{jsid}-- and apply the style to the highlighted nodes. So they
+have the same format.
+
+
+% output the anatomy
+\begin{figure}[htpb]
+\centering
+\begin{tikzpicture}[remember picture]
+\tikzstyle{jsid} = [code part, fill=red!10]
+%{[on background layer]\draw[code grid debug](-0.5,-0.5) grid (9.5,4.5);}
+\codeBlock{
+\cPart{functionHead}{function \cPart[jsid]{functionName}{gcd} \cPart{parameterList}{(p, q)}}\{ \\[2.5pt] %
+\ptab{}\mtPoint{mostLeft} if (q === 0) \{\\
+\ptab\ptab{} return p; \\
+\ptab{}\} else \{\\
+\ptab\ptab{} return \cPart[jsid]{recursive}{gcd}(q, p \% q);\extremPoint{mostRight}\\
+\ptab{}\}\mbPoint{mostBottom}\\
+\}
+}
+
+\fitExtrem{functionBody}{ (mostLeft) (mostRight) (mostBottom) };
+
+% Anotation labels
+\codeAnnotation{functionHeadText}(-1,3) {Function\\Head}
+\codeAnnotation{functionBodyText}(-1,1.5){Function\\Body}
+\codeAnnotation{functionNameText} (1,4) {Function Name}
+\codeAnnotation{parameterListText}(4,4) {Paramter List}
+
+\codeAnnotation{recursiveText} (7.5,2) {Function can\\call itselft.}
+
+% Annotation labels to Code
+\draw[->, annotation] (functionBodyText) -- (functionBody);
+\draw[->, annotation] (functionHeadText) -- (functionHead);
+\draw[->, annotation] (functionNameText) -- (functionName);
+\draw[->, annotation] (parameterListText) -- (parameterList);
+
+\draw[->, annotation] (recursiveText) to[out=175,in=-15] (functionName);
+\draw[->, annotation] (recursiveText) to[out=180,in=45] (recursive.north east);
+
+\end{tikzpicture}
+\caption{Highlighted name of the function\label{fig:function-with-highlight}}
+\end{figure}
+
+
+%out the Source code
+
+\begin{thinmargin}
+{\footnotesize
+\begin{tikzpicture}[remember picture]
+\tikzstyle{smark} = [code part, fill=yellow]
+\codeBlock{
+\textbackslash{}begin\{tikzpicture\}[remember picture]\\
+\slsh{}tikzstyle\{\cPart[smark]{defstyle}{jsid}\} = [code part, fill=red!10]\\
+\slsh{}codeBlock\{\\
+\slsh{}cPart\{functionHead\} \{function \slsh{}cPart[\cPart[smark]{u1}{jsid}]\{functionName\}\{gcd\} \slsh{}cPart\{parameterList\}\{(p, q)\}\} \slsh\{ \slsh\slsh[2.5pt]\\
+\slsh{}ptab\{\}\slsh{}mtPoint\{mostLeft\} if (q === 0) \slsh\{ \slsh\slsh\\
+\slsh{}ptab\slsh{}ptab\{\} return p; \slsh\slsh\\
+\slsh{}ptab\{\}\slsh \} else \slsh\{ \slsh\slsh\\
+\slsh{}ptab\slsh{}ptab\{\} return \slsh{}cPart[\cPart[smark]{u2}{jsid}]\{recursive\}\{gcd\}(q, p\slsh\%q); \slsh{}extremPoint\{mostRight\}\slsh\slsh\\
+\slsh{}ptab\{\}\slsh{}mbPoint\{mostBottom\}\slsh\} \slsh\slsh\\
+\slsh\} \\
+\} \\
+ \\
+\slsh{}fitExtrem\{functionBody\}\{(mostLeft) (mostRight) (mostBottom)\}\\
+\\
+\% Annotations \\
+\slsh{}codeAnnotation\{functionHeadText\} (-1,3) \{Function\slsh\slsh{}Head\} \\
+\slsh{}codeAnnotation\{functionBodyText\} (-1,1.5) \{Function\slsh\slsh{}Body\} \\
+\slsh{}codeAnnotation\{functionNameText\} ( 1,4) \{Function Name\} \\
+\slsh{}codeAnnotation\{parameterListText\}( 4,4) \{Parameter List\} \\
+\\
+\% Annotation labels to code parts\\
+\slsh{}draw[->,annotation] (functionBodyText) -- (functionBody);\\
+\slsh{}draw[->,annotation] (functionHeadText) -- (functionHead);\\
+\slsh{}draw[->,annotation] (functionNameText) -- (functionName);\\
+\slsh{}draw[->,annotation] (parameterListText) -- (paramList);\\
+\\
+\slsh{}draw[->, annotation] (recursiveText) to[out=175,in=-15] (functionName);\\
+\slsh{}draw[->, annotation] (recursiveText) to[out=180,in=45] (recursive.north east);\\
+\slsh{}end\{tikzpicture\}
+}
+\end{tikzpicture}
+}
+\end{thinmargin}
+
+\PrintChanges
\end{documentation}
\end{document}
diff --git a/graphics/pgf/contrib/codeanatomy/release-note-v0.4-Alpha.txt b/graphics/pgf/contrib/codeanatomy/release-note-v0.4-Alpha.txt
new file mode 100644
index 0000000000..709bc257d5
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/release-note-v0.4-Alpha.txt
@@ -0,0 +1 @@
+Fix bug about fill color in arrow if its start point is placed in an anotation text
diff --git a/graphics/pgf/contrib/pixelarttikz/README.md b/graphics/pgf/contrib/pixelarttikz/README.md
new file mode 100644
index 0000000000..fcdd25b2e4
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/README.md
@@ -0,0 +1,7 @@
+PixelArtTikz is a package to work with PixlArts.
+---------------------------------------------------------------
+PixelArtTikz est un package pour travailler avec des PixelArts.
+---------------------------------------------------------------
+Author : Cédric Pierquet
+email : cpierquet@outlook.fr
+Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt \ No newline at end of file
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf
new file mode 100644
index 0000000000..f694421de1
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex
new file mode 100644
index 0000000000..000fddd55e
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex
@@ -0,0 +1,537 @@
+% !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[table,svgnames]{xcolor}
+\usepackage{amsmath,amssymb}
+\usepackage{PixelArtTikz}
+\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}
+\definecolor{LightGray}{gray}{0.9}
+
+\def\TPversion{0.1.0}
+\def\TPdate{23/01/2023}
+
+\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
+}
+
+\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://github.com/cpierquet/PixelArtTikz}}
+\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.
+
+Datas are \textit{red} by a \textsf{csv} file, already created and placed into the folder of the \textsf{tex} file, or directly created by \textsf{filecontents}.
+
+\medskip
+
+Some advices about the \textsf{cvs} file :
+
+\begin{itemize}
+ \item the \textsf{csv} file must use "," as separator ;
+ \item empty cases 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 \textit{needed} package is here \textsf{csvsimple}, in order to read the \textsf{csv} file.
+
+It's available for \hologo{LaTeX2e} or for \hologo{LaTeX3}. By default, \textsf{PixelArtTikz} loads it for \hologo{LaTeX3}, but an \textit{option} is available to work with \hologo{LaTeX2e}.
+
+\smallskip
+
+The option \Cle{[csvii]} forces the usage of \hologo{LaTeX2e}.
+
+\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 copatible with usuals compilations, such as \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} or \textsf{xelatex}.
+
+\medskip
+
+It loads the 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's two ways to create PixelArt :
+
+\begin{itemize}
+ \item by an independent macro ;
+ \item by a Ti\textit{k}Z environment in order to put code after.
+\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}
+
+For the colors, its depending from the loaded packages.
+
+\smallskip
+
+This documentation was compiled with \textsf{xcolor}, with \Cle{[table,svgnames]} options.
+
+%%\section{Petit aparté sur les fichiers csv}
+%%
+%%\textsf{CSV} désigne un format de fichiers dont le rôle est de présenter des données séparées par des virgules. Il s'agit d'une manière simplifiée d'afficher des données afin de les rendre transmissibles d'un programme à un autre.
+%%
+%%\smallskip
+%%
+%%Dans notre cas, le fichier \textsf{csv} contiendra les \textit{codes} qui seront analysés un par un et ligne par ligne pour avoir le rendu par \textit{code}, \textit{symbole} ou \textit{couleur}.
+%%
+%%\medskip
+%%
+%%Il \underline{doit} être préparé avec des caractères (codes) \textit{simples} pour que le code de \textsf{PixelArtTikz} puisse fonctionner.
+%
+\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} (eg \texttt{234679} or \texttt{ABCDJK}\ldots);
+ \item the list of symbols (if needed) to print in the cases, eg \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 an 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 cases ;
+ \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 cases ;\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 options -- in Ti\textit{k}Z -- to parse to the environment which create 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, les \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{Starred macro}
+
+The starred \textit{étoilée} macro \texttt{\textbackslash PixlArtTikz*} is to be integrated within an environment already created. It cas be usefull to add code after the PixelArt.
+
+\smallskip
+
+In this case :
+
+\begin{itemize}
+ \item the \textit{optional} between \texttt{<...>} is useless ;
+ \item the key \Cle{Unit} is useless too (uints 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[ForestGreen,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} proposes an environment to create a PixelArt, and to add code after.
+
+\begin{itemize}
+ \item The environment is created within Ti\textit{k}Z and added code is to give in Ti\textit{k}Z !
+ \item The added code will be print "above" 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 cases ;
+ \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 cases ;\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 options -- in Ti\textit{k}Z -- to parse to the environment which create the PixelArt.
+
+\medskip
+
+The third argument, \textit{mandatory}, is the filename of the \textsf{csv}.
+
+\subsection{Exemple}
+
+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[ForestGreen,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
+
+\part{Historique}
+
+\verb|v0.1.0|~:~~~~Initial version
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf
new file mode 100644
index 0000000000..8865790e6d
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex
new file mode 100644
index 0000000000..fec2cca271
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex
@@ -0,0 +1,544 @@
+% !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[french]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[table,svgnames]{xcolor}
+\usepackage{amsmath,amssymb}
+\usepackage{PixelArtTikz}
+\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}
+\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}
+\definecolor{LightGray}{gray}{0.9}
+
+\def\TPversion{0.1.0}
+\def\TPdate{23 Janvier 2023}
+
+\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
+}
+
+\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 [fr]}}\\
+ \\
+ {\LARGE Des PixelArts, en Ti\textit{k}Z}, \\
+ \\
+ {\LARGE avec solution et couleurs.} \\
+ \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/PixelArtTikz}}
+\end{tabular}
+\end{center}
+
+\vspace{0.25cm}
+
+{$\blacktriangleright$~~Des commandes pour afficher des PixelArts.}
+
+\smallskip
+
+{$\blacktriangleright$~~Environnement pour compléter éventuellement le 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*}
+
+\PixelArtTikz[Codes=123469,Style=\ttfamily,Unite=0.35]{test1.csv}
+~~
+\PixelArtTikz[Codes=123469,Symboles={A,B,C,D,E,F},Symb,Style=\ttfamily,Unite=0.35]{test1.csv}
+~~
+\PixelArtTikz[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction,Unite=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{Le package PixelArtTikz}
+
+\subsection{Introduction}
+
+L'idée est de \textit{proposer}, dans un environnement Ti\textit{k}Z, une commande permettant de générer des grilles PixelArt.
+
+Les données sont \textit{lues} à partir d'un fichier \textsf{csv}, externe au fichier \textsf{tex} ou déclaré en interne grâce à l'environnement \texttt{filecontents}.
+
+\medskip
+
+Avant toute chose, quelques petites infos sur les données au format \textsf{csv}, surtout dans l'optique de sa lecture et de son traitement par les commandes :
+
+\begin{itemize}
+ \item le fichier de données \textsf{csv} doit être formaté avec le séparateur décimal \og , \fg ;
+ \item des cases vides seront codées par \og \texttt{-} \fg.
+\end{itemize}
+
+Le fichier \textsf{csv} peut être déclaré directement dans le fichier \textsf{tex}, grâce à l'environnement \textsf{filecontents} (intégré en natif sur les dernières versions de \LaTeX) :
+
+\begin{PresentationCode}{listing only}
+ \begin{filecontents*}{nomfichier.csv}
+ A,B,C,D
+ A,B,D,C
+ B,A,C,D
+ B,A,D,C
+ \end{filecontents*}
+\end{PresentationCode}
+
+À la compilation, le fichier \textsf{nomfichier.csv} sera créé automatiquement, et l'option \Cle{[overwrite]} permet (logiquement) de propager les modifications au fichier \textsf{csv}.
+
+\subsection{Chargement du package, et option}
+
+Le package \textit{central} est ici \textsf{csvsimple}, qui permet de lire et traiter le fichier \textsf{csv}.
+
+Il est \og disponible \fg{} en version \hologo{LaTeX2e} ou en version \hologo{LaTeX3}. Par défaut, \textsf{PixelArtTikz} le charge en version \hologo{LaTeX3}, mais une \textsf{option} est disponible pour une \textit{rétro-compatibilité} avec la version \hologo{LaTeX2e}.
+
+\smallskip
+
+L'option \Cle{[csvii]} permet de passer l'appel au package en version \hologo{LaTeX2e}.
+
+\begin{PresentationCode}{listing only}
+\usepackage{PixelArtTikz} %chargement du package version 3
+%qui charge :
+%\RequirePackage{expl3}
+%\RequirePackage[l3]{csvsimple}
+
+\usepackage[csvii]{PixelArtTikz} %chargement du package version 2
+%qui charge :
+%\RequirePackage[legacy]{csvsimple}
+\end{PresentationCode}
+
+\subsection{Packages utilisés}
+
+Le package est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} ou \textsf{xelatex}.
+
+\medskip
+
+Il charge les packages et librairies suivantes :
+
+\begin{itemize}
+ \item \texttt{tikz}, \texttt{xintexpr} et \texttt{xinttools};
+ \item \texttt{xstring}, \texttt{xparse}, \texttt{simplekv} et \texttt{listofitems}.
+\end{itemize}
+
+\pagebreak
+
+\subsection{Commandes et environnement}
+
+Il existe deux manières de représenter un PixelArt :
+
+\begin{itemize}
+ \item soit par une commande autonome et indépendante ;
+ \item soit par un environnement Ti\textit{k}Z dans lequel du code pourra être \textit{rajouté}.
+\end{itemize}
+
+\begin{PresentationCode}{listing only}
+%Commande autonome
+\PixelArtTikz[clés]<options tikz>{fichier.csv}
+
+%Commande semi-autonome, à intégrer dans un environnement tikz
+\PixelArtTikz*[clés]{fichier.csv}
+
+%environnement
+\begin{EnvPixelArtTikz}[clés]<options tikz>{fichier.csv}
+ %code tikz
+\end{EnvPixelArtTikz}
+\end{PresentationCode}
+
+Concernant les couleurs, l'utilisateur utilisera celles disponibles avec les packages chargés.
+
+\smallskip
+
+La présente documentation a été compilée avec le package \textsf{xcolor}, chargé avec les options \Cle{[table,svgnames]}.
+
+\section{Petit aparté sur les fichiers csv}
+
+\textsf{CSV} désigne un format de fichiers dont le rôle est de présenter des données séparées par des virgules. Il s'agit d'une manière simplifiée d'afficher des données afin de les rendre transmissibles d'un programme à un autre.
+
+\smallskip
+
+Dans notre cas, le fichier \textsf{csv} contiendra les \textit{codes} qui seront analysés un par un et ligne par ligne pour avoir le rendu par \textit{code}, \textit{symbole} ou \textit{couleur}.
+
+\medskip
+
+Il \underline{doit} être préparé avec des caractères (codes) \textit{simples} pour que le code de \textsf{PixelArtTikz} puisse fonctionner.
+
+\pagebreak
+
+\part{Commandes et environnement}
+
+\section{La commande principale}
+
+\subsection{Exemple introductif}
+
+La commande \texttt{\textbackslash PixelArtTikz} nécessite de connaître :
+
+\begin{itemize}
+ \item le fichier \textsf{csv} à traiter ;
+ \item la liste (en fait sous forme de chaîne) des codes utilisés dans le fichier \textsf{csv} (comme \texttt{234679} ou \texttt{ABCDJK}\ldots);
+ \item la liste des symboles (éventuellement !) à afficher dans les cases s'il y a ambiguïté, comme \texttt{25,44,12} ou \texttt{AA,AB,AC};
+ \item la liste des couleurs (si la correction est demandée), dans le même ordre que la liste des caractères.
+\end{itemize}
+
+On peut donc commencer par créer le fichier \textsf{csv} qui sera lu et interprété par les commandes du package. Le fichier peut-être créé directement dans la code du fichier \textsf{tex}.
+
+\begin{PresentationCode}{}
+%déclaration du fichier 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}{}
+%notice et PixelArt
+\begin{center}
+ \begin{tblr}{colspec={*{4}{Q[1.25cm,c,m]}},hlines,vlines,rows={1.15em}}
+ \SetCell[c=4]{c} Notice & & & \\
+ A & B & C & D \\
+ 45 & 22 & 1 & 7 \\
+ Noir & Vert & Jaune & Rouge \\
+ \end{tblr}
+\end{center}
+
+\PixelArtTikz[Codes=ABCD,Style=\large\sffamily,Unite=0.85]{base.csv}
+~~
+\PixelArtTikz[Codes=ABCD,Symboles={45,22,1,7},Symb,Style=\large\sffamily,Unite=0.85]{base.csv}
+~~
+\PixelArtTikz[Codes=ABCD,Couleurs={black,green,yellow,red},Correction,Unite=0.85]{base.csv}
+~~
+\PixelArtTikz[Codes=ABCD,Couleurs={black,green,yellow,red},Correction,BordCases=false,Unite=0.85]{base.csv}
+\end{PresentationCode}
+
+\pagebreak
+
+\subsection{Clés et options}
+
+\begin{PresentationCode}{listing only}
+\PixelArtTikz[clés]<options tikz>{fichier.csv}
+\end{PresentationCode}
+
+Le premier argument, \textit{optionnel} et entre \texttt{[...]} propose des \textsf{Clés} nécessaires au bon fonctionnement de la commande :
+
+\begin{itemize}
+ \item la clé \Cle{Codes} contient la \textit{chaîne} des codes \textit{simples} du fichier \textsf{csv} ;
+ \item la clé \Cle{Couleurs} qui contient la \textit{liste} des couleurs associées ;
+ \item la clé \Cle{Symboles} qui contient la \textit{liste éventuelles} des caractères alternatifs à afficher dans les cases ;
+ \item la clé booléenne \Cle{Correction} qui permet de colorier le PixelArt ;\hfill{}défaut \textsf{false}
+ \item la clé booléenne \Cle{Symb} qui permet d'afficher les caractères \textit{alternatifs} ;\hfill{}défaut \textsf{false}
+ \item la clé booléenne \Cle{BordCases} qui permet d'afficher les bords des cases de la correction ;\hfill{}défaut \textsf{true}
+ \item la clé \Cle{Style} qui permet de spécifier le style des caractères. \hfill{}défaut \textsf{scriptsize}
+\end{itemize}
+
+Le second argument, \textit{optionnel} et entre \texttt{<...>} sont des options -- en langage Ti\textit{k}Z -- à passer à l'environnement qui sert de base au PixelArt.
+
+\medskip
+
+Le troisième argument, \textit{obligatoire}, est le nom du fichier \textsf{csv} à utiliser.
+
+\vspace{1cm}
+
+On rappelle que le fichier peut être créé au préalable, et placé dans le répertoire du fichier, ou bien il peut être créé \textit{en direct}, à l'aide du package \textsf{filecontents} (chargé par \LaTeX).
+
+\begin{PresentationCode}{}
+%création du fichier 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}{}
+%codes simples et sans ambiguïté
+%une case vide sera codée par -
+\PixelArtTikz[Codes=123469,Style=\ttfamily,Unite=0.35]{test1.csv}
+~~
+\PixelArtTikz[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction,Unite=0.35]{test1.csv}
+~~
+\PixelArtTikz[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction,Unite=0.35,BordCases=false]%
+ {test1.csv}
+\end{PresentationCode}
+
+\pagebreak
+
+Dans l'exemple suivant, les \textit{symboles} à afficher ne peuvent pas servir de \textit{codes}, donc on utilise les options liées à \Cle{Symboles} pour s'affranchir de cette limitation.
+
+\begin{PresentationCode}{}
+%codes à afficher, avec utiliser des symboles
+
+\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*}
+
+\PixelArtTikz[Codes=ABCDFJ,Symboles={1,2,3,4,6,10},Symb,Style=\tiny\sffamily,Unite=0.35]{cap.csv}
+~~
+\PixelArtTikz[Codes=ABCDFJ,Couleurs={Red,Brown,Yellow,Black,Blue,Gray},Correction,Unite=0.35]{cap.csv}
+\end{PresentationCode}
+
+\pagebreak
+
+\subsection{Commande étoilée}
+
+La commande \textit{étoilée} \texttt{\textbackslash PixelArtTikz*} permet d'intégrer le PixelArt dans un environnement créé par l'utilisateur. Cela permet par exemple de pouvoir rajouter du code en parallèle du PixelArt.
+
+\smallskip
+
+Il est à noter que, dans ce cas :
+
+\begin{itemize}
+ \item l'argument \textit{optionnel} entre \texttt{<...>} est inutile ;
+ \item la clé \Cle{Unite} n'intervient plus dans le tracé (elle peut être passée directement dans l'environnement !)
+\end{itemize}
+
+\begin{PresentationCode}{}
+\begin{center}
+ \begin{tikzpicture}[scale=0.5]
+ %grille pour visualiser le positionnement
+ \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
+ \PixelArtTikz*[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction]{test1.csv}
+ %du code rajouté
+ \filldraw[Blue] (14,-1) circle[radius=1] ;
+ \filldraw[Yellow] (14,-1) circle[radius=0.8] ;
+ \draw[ForestGreen,very thick,<-,>=latex] (15,-1) to[bend left=30] (18,-2)%
+ node[right,font=\scriptsize\sffamily] {rajouté en Ti\textit{k}Z} ;
+ \end{tikzpicture}
+\end{center}
+\end{PresentationCode}
+
+\pagebreak
+
+\section{Environnement PixelArt}
+
+\subsection{Commande et options}
+
+Le package \textsf{PixelArtTikz} propose également un environnement pour créer un PixelArt, et pouvoir rajouter des éléments en marge du PixelArt.
+
+\begin{itemize}
+ \item L'environnement est créé autour de Ti\textit{k}Z et le code rajouté le sera dans un langage Ti\textit{k}Z !
+ \item Le code rajouté le sera, dans ce cas, \textit{au-dessus} du PixelArt !
+\end{itemize}
+
+Le fonctionnement global est le même que pour la commande autonome.
+
+\begin{PresentationCode}{listing only}
+ \begin{EnvPixelArtTikz}[clés]<options tikz>{fichier.csv}
+ %code(s) tikz qui seront au-dessus du PixelArt
+ \end{EnvPixelArtTikz}
+\end{PresentationCode}
+
+Le premier argument, \textit{optionnel} et entre \texttt{[...]} propose des \textsf{Clés} nécessaires au bon fonctionnement de la commande :
+
+\begin{itemize}
+ \item la clé \Cle{Codes} contient la \textit{chaîne} des codes \textit{simples} du fichier \textsf{csv} ;
+ \item la clé \Cle{Couleurs} qui contient la \textit{liste} des couleurs associées ;
+ \item la clé \Cle{Symboles} qui contient la \textit{liste éventuelles} des caractères alternatifs à afficher dans les cases ;
+ \item la clé booléenne \Cle{Correction} qui permet de colorier le PixelArt ;\hfill{}défaut \textsf{false}
+ \item la clé booléenne \Cle{Symb} qui permet d'afficher les caractères \textit{alternatifs} ;\hfill{}défaut \textsf{false}
+ \item la clé booléenne \Cle{BordCases} qui permet d'afficher les bords des cases de la correction ;\hfill{}défaut \textsf{true}
+ \item la clé \Cle{Style} qui permet de spécifier le style des caractères. \hfill{}défaut \textsf{scriptsize}
+\end{itemize}
+
+Le second argument, \textit{optionnel} et entre \texttt{<...>} sont des options -- en langage Ti\textit{k}Z -- à passer à l'environnement qui sert de base au PixelArt.
+
+\medskip
+
+Le troisième argument, \textit{obligatoire}, est le nom du fichier \textsf{csv} à utiliser.
+
+\subsection{Exemple}
+
+Les symboles affichés dans les cases sont situés aux nœuds de coordonnées $(c\,;\,-l)$ où $l$ et $c$ sont les numéros de ligne et de colonne correspondants à la position de la donnée dans le fichier \textsf{csv}.
+
+\begin{PresentationCode}{}
+\begin{center}
+ \begin{EnvPixelArtTikz}%
+ [Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction,Unite=0.25]
+ {test1.csv}
+ \filldraw[Blue] (14,-1) circle[radius=1] ;
+ \filldraw[Yellow] (14,-1) circle[radius=0.8] ;
+ \draw[ForestGreen,very thick,<-,>=latex] (15,-1) to[bend left=30] (18,-2)%
+ node[right,font=\scriptsize\sffamily] {rajouté en Ti\textit{k}Z} ;
+ \end{EnvPixelArtTikz}
+\end{center}
+\end{PresentationCode}
+
+\newpage
+
+\part{Historique}
+
+\verb|v0.1.0|~:~~~~Version initiale
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/base.csv b/graphics/pgf/contrib/pixelarttikz/doc/base.csv
new file mode 100644
index 0000000000..6f8d88334b
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/base.csv
@@ -0,0 +1,4 @@
+ A,B,C,D
+ A,B,D,C
+ B,A,D,C
+ C,A,B,D
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/cap.csv b/graphics/pgf/contrib/pixelarttikz/doc/cap.csv
new file mode 100644
index 0000000000..e530bb4f3e
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/cap.csv
@@ -0,0 +1,22 @@
+ -,-,-,-,-,-,-,-,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,-,-,-,-
diff --git a/graphics/pgf/contrib/pixelarttikz/doc/test1.csv b/graphics/pgf/contrib/pixelarttikz/doc/test1.csv
new file mode 100644
index 0000000000..d5efaaf580
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/doc/test1.csv
@@ -0,0 +1,23 @@
+ -,-,-,-,-,-,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,-,-,-,-,-,-,-
diff --git a/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty b/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty
new file mode 100644
index 0000000000..e5f9e9ccb8
--- /dev/null
+++ b/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty
@@ -0,0 +1,313 @@
+% Author.........: C. Pierquet
+% licence........: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{PixelArtTikz}[2023/01/25 v0.1.0 PixelArts with csv and TikZ]
+% 0.1.0 Version initiale
+
+%------Option(s)
+\newif\if@csvii \@csviifalse
+\DeclareOption{csvii}{\@csviitrue}
+\DeclareOption*{}
+\ProcessOptions\relax
+
+%------Packages utiles
+\RequirePackage{tikz}
+\RequirePackage{xparse}
+\RequirePackage{simplekv}
+\RequirePackage{xintexpr}
+\RequirePackage{xinttools}
+\RequirePackage{xstring}
+\RequirePackage{listofitems}
+%librairies tikz
+%\usetikzlibrary{calc,shapes.geometric}
+%cvs
+\if@csvii
+ \RequirePackage[legacy]{csvsimple}
+\else
+ \RequirePackage{expl3}
+ \RequirePackage[l3]{csvsimple}
+\fi
+
+%------clés [fr] / keys [en]
+\defKV[pixelarttkz]{%
+ Codes=\def\PATlettres{#1},%
+ Couleurs=\def\PATcouleurs{#1},%
+ Symboles=\def\PATchiffres{#1},%
+ Style=\def\PATtaille{#1},%
+ Unite=\def\PATunit{#1}
+}
+
+\setKVdefault[pixelarttkz]{%
+ Style=\scriptsize,%
+ Correction=false,%
+ Symb=false,%
+ BordCases=true,%
+ Unite=1
+}
+
+%----[fr] commands
+\NewDocumentCommand\PixelArtTikz{ s O{} D<>{} m }{%commande autonome
+ \useKVdefault[pixelarttkz]%
+ \setKV[pixelarttkz]{#2}%
+ %affichage du corrigé / display of correction
+ \IfBooleanTF{#1}{}{\begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#3]}
+ \ifboolKV[pixelarttkz]{Correction}%
+ {%
+ \csvloop{file=#4,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCPA\PATcouleurs
+ \StrPosition{\PATlettres}{\l}[\pixcnt]%
+ \xintifboolexpr{\pixcnt>0}%
+ {%
+ \itemtomacro\LCPA[\pixcnt]\pixcol%
+ \ifboolKV[pixelarttkz]{BordCases}%
+ {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \ifboolKV[pixelarttkz]{Symb}{%affichage du pixelart versions chiffres si besoin
+ \csvloop{file=#4,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCNA\PATchiffres
+ \StrPosition{\PATlettres}{\l}[\pixpos]%
+ \xintifboolexpr{\pixpos>0}%
+ {%
+ \itemtomacro\LCNA[\pixpos]\pixchf%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%affichage du pixelart versions lettres ou chiffres simples (<=9) / display of letters/symbols PixelArt
+ \csvloop{file=#4,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \IfSubStr{\PATlettres}{\l}%
+ {%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\l};%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ \IfBooleanTF{#1}{}{\end{tikzpicture}}%
+}
+
+\NewDocumentEnvironment{EnvPixelArtTikz}{ O{} D<>{} m }%environnement
+{%
+ \useKVdefault[pixelarttkz]%
+ \setKV[pixelarttkz]{#1}%
+ %affichage du corrigé / display of correction
+ \begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#2]
+ \ifboolKV[pixelarttkz]{Correction}%
+ {%
+ \csvloop{file=#3,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCPA\PATcouleurs
+ \StrPosition{\PATlettres}{\l}[\pixcnt]%
+ \xintifboolexpr{\pixcnt>0}%
+ {%
+ \itemtomacro\LCPA[\pixcnt]\pixcol%
+ \ifboolKV[pixelarttkz]{BordCases}%
+ {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \ifboolKV[pixelarttkz]{Symb}{%affichage du pixelart versions chiffres si besoin
+ \csvloop{file=#3,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCNA\PATchiffres
+ \StrPosition{\PATlettres}{\l}[\pixpos]%
+ \xintifboolexpr{\pixpos>0}%
+ {%
+ \itemtomacro\LCNA[\pixpos]\pixchf%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%affichage du pixelart versions lettres ou chiffres simples (<=9) / display of letters/symbols PixelArt
+ \csvloop{file=#3,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \IfSubStr{\PATlettres}{\l}%
+ {%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\l};%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+{%
+ \end{tikzpicture}%
+}%
+
+%----[en] commands
+\defKV[pixelarttkzen]{%
+ Codes=\def\PATlettres{#1},%
+ Colors=\def\PATcouleurs{#1},%
+ Symbols=\def\PATchiffres{#1},%
+ Style=\def\PATtaille{#1},%
+ Unit=\def\PATunit{#1}
+}
+
+\setKVdefault[pixelarttkzen]{%
+ Style=\scriptsize,%
+ Correction=false,%
+ Symb=false,%
+ Border=true,%
+ Unit=1
+}
+
+\NewDocumentCommand\PixlArtTikz{ s O{} D<>{} m }{%commande autonome
+ \useKVdefault[pixelarttkzen]%
+ \setKV[pixelarttkzen]{#2}%
+ %affichage du corrigé / display of correction
+ \IfBooleanTF{#1}{}{\begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#3]}
+ \ifboolKV[pixelarttkzen]{Correction}%
+ {%
+ \csvloop{file=#4,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCPA\PATcouleurs
+ \StrPosition{\PATlettres}{\l}[\pixcnt]%
+ \xintifboolexpr{\pixcnt>0}%
+ {%
+ \itemtomacro\LCPA[\pixcnt]\pixcol%
+ \ifboolKV[pixelarttkzen]{Border}%
+ {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \ifboolKV[pixelarttkzen]{Symb}{%affichage du pixelart versions chiffres si besoin
+ \csvloop{file=#4,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCNA\PATchiffres
+ \StrPosition{\PATlettres}{\l}[\pixpos]%
+ \xintifboolexpr{\pixpos>0}%
+ {%
+ \itemtomacro\LCNA[\pixpos]\pixchf%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%affichage du pixelart versions lettres ou chiffres simples (<=9) / display of letters/symbols PixelArt
+ \csvloop{file=#4,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \IfSubStr{\PATlettres}{\l}%
+ {%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\l};%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ \IfBooleanTF{#1}{}{\end{tikzpicture}}%
+}
+
+\NewDocumentEnvironment{EnvPixlArtTikz}{ O{} D<>{} m }%environnement
+{%
+ \useKVdefault[pixelarttkzen]%
+ \setKV[pixelarttkzen]{#1}%
+ %affichage du corrigé / display of correction
+ \begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#2]
+ \ifboolKV[pixelarttkzen]{Correction}%
+ {%
+ \csvloop{file=#3,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCPA\PATcouleurs
+ \StrPosition{\PATlettres}{\l}[\pixcnt]%
+ \xintifboolexpr{\pixcnt>0}%
+ {%
+ \itemtomacro\LCPA[\pixcnt]\pixcol%
+ \ifboolKV[pixelarttkzen]{Border}%
+ {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \ifboolKV[pixelarttkzen]{Symb}{%affichage du pixelart versions chiffres si besoin
+ \csvloop{file=#3,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \setsepchar{,}
+ \readlist*\LCNA\PATchiffres
+ \StrPosition{\PATlettres}{\l}[\pixpos]%
+ \xintifboolexpr{\pixpos>0}%
+ {%
+ \itemtomacro\LCNA[\pixpos]\pixchf%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%affichage du pixelart versions lettres ou chiffres simples (<=9) / display of letters/symbols PixelArt
+ \csvloop{file=#3,no head,command={%
+ \foreach \l [count=\n] in \csvline {%
+ \StrDel{\l}{ }[\l]
+ \IfSubStr{\PATlettres}{\l}%
+ {%
+ \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\l};%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \end{tikzpicture}%
+}%
+
+\endinput \ No newline at end of file