\documentclass[a4paper,french]{article}
\usepackage{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel} 
\usepackage{etex}
\usepackage{fourier}
\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
\usepackage{titlesec}
\usepackage{tcolorbox}
	\tcbuselibrary{skins}
	\tcbuselibrary{theorems}
	\tcbuselibrary{breakable}
\usepackage{tikz-tabular}
	\newcommand{\globalpath}{"c:/texmf/doc/tikz-tabular/"}
	\usetikzlibrary{calc}

\setlength{\parindent}{0pt}

\input{doc.codes.tex}
\input{doc.styles.tex}

\begin{document}

\begin{center}
\begin{tcolorbox}[head]
{\bfseries\LARGE Documentation \texttt{tikz-tabular} }\\[3mm]
{\large Version 0.1 -- \today}\\[3mm]
\textit{Version française}
\end{tcolorbox}

{\large 
\href{https://www.mathweb.fr/euclide/contact/}{Stéphane Pasquet}}
\end{center}

\begin{tcolorbox}[toc]
\makeatletter
\@starttoc{toc}
\makeatother
\end{tcolorbox}

\newpage

\section{Introduction}

\subsection{Objet de ce package}

Ce package permet de créer un tableau en mode graphique (basé sur TiKZ) à l'aide d'une syntaxe allégée.

\subsection{Python}

Il est nécessaire que Python soit installé.

Si cela n'est déjà fait, il suffit d'aller sur la page:
\begin{center}
\url{https://www.python.org/downloads/}
\end{center}
et de télécharger la dernière version.

\paragraph*{Utilisateurs de Windows:}

Veillez à ce que le chemin qui va vers \texttt{python.exe} figure dans le PATH du système de windows (si vous utilisez ce système d'exploitation).

\begin{verbatim}
variables d'environnement > variables systèmes > chemin vers python.exe
\end{verbatim}

Le chemin est de la forme:

\begin{verbatim}
C:\Users\<vous>\AppData\Local\Programs\Python\Python3xx
\end{verbatim}


\section{Installation}

Si vous effectuez une installation manuelle de ce package, vous devez respectez l'arborescence \LaTeX. Si par exemple vos packages installés manuellement sont dans:
\begin{verbatim}
c:\texmf\
\end{verbatim}
vous devrez veiller à avoir:
\begin{verbatim}
c:\texmf\doc\tikz-tabular\
c:\texmf\latex\tikz-tabular\
\end{verbatim}

\paragraph*{Note importante:} après avoir mis les fichiers dans les bons dossiers, il  est nécessaire de changer une ligne du fichier \texttt{tikz-tabular.sty}:
\begin{verbatim}
22 \immediate\write18{python "c:/texmf/tex/latex/tikz-tabular
/tikztabular.py" num-\thetikz@tabular-dir-\globalpath}%
\end{verbatim}
Cette ligne doit contenir le chemin exact vers le fichier python qui est dans le même dossier.

\paragraph*{Utilisateurs de Windows et MikTeX:} rafraichissez la base de données une fois le packages installé.

Dans la MiKTeX Console,
\begin{verbatim}
Tasks > Refresh file name database
\end{verbatim}

\section{Utilisation}

\subsection{Un exemple basique}

\begin{tikzpicture}
\begin{tikztabular}
<columns=5
[tabulartitle]
\fontfamily{lmss}\selectfont\Large\textbf{Mon tableau}
[endtabulartitle]

[tabularhead]
\textbf{Tête 1} & \textbf{Tête 2} & \textbf{Tête 3} & \textbf{Tête 4} & 
[endtabularhead]

Cellule 1.1 & Cellule 1.2 & Cellule 1.3 & Cellule 1.4 & Cellule 1.5
Cellule 2.1 & Cellule 2.2 & Cellule 2.3 & Cellule 2.4 & Cellule 2.5

[tabularfoot]
\textbf{Pied 1} & \textbf{Pied 2} & \textbf{Pied 3} & \textbf{Pied 4} & 
\end{tikztabular}
\end{tikzpicture}


\subsection{Le code \LaTeX{} correspondant}

\begin{tcblisting}{codeTEX,title={Code minimal}}
\documentclass{article}
\usepackage{tikz-tabular}
	\newcommand{\globalpath}{"c:/texmf/doc/tikz-tabular/"}

\setlength{\parindent}{0pt}

\begin{document}

\begin{tikzpicture}
\begin{tikztabular}
<columns=5
(*@\ttfamily\color{red}[tabulartitle]@*)
\fontfamily{lmss}\selectfont\Large\textbf{Mon tableau}
(*@\ttfamily\color{red}[endtabulartitle]@*)

(*@\ttfamily\color{red}[tabularhead]@*)
\textbf{Tête 1} & \textbf{Tête 2} & \textbf{Tête 3} & \textbf{Tête 4} & 
(*@\ttfamily\color{red}[endtabularhead]@*)

Cellule 1.1 & Cellule 1.2 & Cellule 1.3 & Cellule 1.4 & Cellule 1.5
Cellule 2.1 & Cellule 2.2 & Cellule 2.3 & Cellule 2.4 & Cellule 2.5

(*@\ttfamily\color{red}[tabularfoot]@*)
\textbf{Pied 1} & \textbf{Pied 2} & \textbf{Pied 3} & \textbf{Pied 4} & 
\end{tikztabular}
\end{tikzpicture}

\end{document}
\end{tcblisting}

\newpage

\subsection{La syntaxe}

\subsubsection{La variable \textbackslash globalpath}

Elle est nécessaire pour déclarer le chemin du fichier courant.

Sans cela, les fichiers auxiliaires construits pour les tableaux ne seront pas créés.

\begin{tcblisting}{codeTEX,title={Code minimal}}
\newcommand{\globalpath}{"c:/texmf/doc/tikz-tabular/"}
\end{tcblisting}

\subsubsection{L'environnement tikztabular}

\begin{tcblisting}{codeTEX,title={Code minimal}}
\begin{tikzpicture}

\begin{(*@\ttfamily\color{red}tikztabular@*)}
...
\end{(*@\ttfamily\color{red}tikztabular@*)}

\end{tikzpicture}
\end{tcblisting}

Il doit être dans un environnement \texttt{tikzpicture}. En effet, il est construit dans un environnement \texttt{scope}.


\subsubsection{Le titre du tableau (facultatif)}

\begin{tcblisting}{codeTEX,title={Code minimal}}
(*@\ttfamily\color{red}[tabulartitle]@*)
Mon titre
(*@\ttfamily\color{red}[endtabulartitle]@*)
\end{tcblisting}

Il permet de déclarer que le tableau à un titre. Il est affiché sur toute la largeur du tableau.

\subsubsection{Les en-têtes des colonnes du tableau (facultatif)}

\begin{tcblisting}{codeTEX,title={Code minimal}}
(*@\ttfamily\color{red}[tabularhead]@*)
En-têtes séparées par "&"
(*@\ttfamily\color{red}[endtabularhead]@*)
\end{tcblisting}

Cela permet d'afficher les en-têtes des colonnes de manière différente des autres cellules.

\subsubsection{Les pieds des colonnes (facultatif)}

\begin{tcblisting}{codeTEX,title={Code minimal}}
(*@\ttfamily\color{red}[tabularfoot]@*)
Pieds séparées par "&"
\end{tcblisting}

Cela permet d'afficher les pieds des colonnes de manière différente des autres cellules.

Dans la mesure où les pieds sont sensés être en fin de tableau, il n'y a pas de commande \texttt{[endtabularfoot]}.

\subsubsection{Les premières colonnes}

\begin{tikzpicture}

\begin{tikztabular}
<columns=5
<firstcolumncolor=orange!75!black
[tabulartitle]
Mon tableau
[endtabulartitle]
Cellule 1.1 & Cellule 1.2 & Cellule 1.3 & Cellule 1.4 & Cellule 1.5
Cellule 2.1 & Cellule 2.2 & Cellule 2.3 & Cellule 2.4 & Cellule 2.5
\end{tikztabular}

\end{tikzpicture}

\begin{tcblisting}{codeTEX,title={Code minimal}}
\begin{tikztabular}
<columns=5
<(*@\ttfamily\color{red}firstcolumncolor@*)=orange!75!black
[tabulartitle]
Mon tableau
[endtabulartitle]
Cellule 1.1 & Cellule 1.2 & Cellule 1.3 & Cellule 1.4 & Cellule 1.5
Cellule 2.1 & Cellule 2.2 & Cellule 2.3 & Cellule 2.4 & Cellule 2.5
\end{tikztabular}
\end{tcblisting}

\subsubsection{Les dernières colonnes}
\enlargethispage*{2em}

\begin{tikzpicture}

\begin{tikztabular}
<columns=5
<lastcolumncolor=orange!75!black
Cellule 1.1 & Cellule 1.2 & Cellule 1.3 & Cellule 1.4 & Cellule 1.5
Cellule 2.1 & Cellule 2.2 & Cellule 2.3 & Cellule 2.4 & Cellule 2.5
\end{tikztabular}

\end{tikzpicture}

\begin{tcblisting}{codeTEX,title={Code minimal}}
\begin{tikztabular}
<columns=5
<(*@\ttfamily\color{red}lastcolumncolor@*)=orange!75!black
Cellule 1.1 & Cellule 1.2 & Cellule 1.3 & Cellule 1.4 & Cellule 1.5
Cellule 2.1 & Cellule 2.2 & Cellule 2.3 & Cellule 2.4 & Cellule 2.5
\end{tikztabular}
\end{tcblisting}

\newpage

\section{Les options}

Les options sont à mettre dans l'environnement \texttt{tikztabular} \textit{avant} le contenu des cellules.

Elles doivent être mises \textit{nécessairement} sous la forme:
\begin{verbatim}
<option = valeur (avec ou sans espace mais avec le chevron)
\end{verbatim}

\begin{tikzpicture}
\begin{tikztabular}
<columns=3
<marginv=0.75mm
<cellheight=2.5em

[tabulartitle]
Les options
[endtabulartitle]

[tabularhead]
Nom de l'option & Désignation & Exemple
[endtabularhead]

\texttt{columns} & nombre de colonnes & \texttt{columns = 5}

\texttt{corners} & taille des coins arrondis & \texttt{corners = 1mm}

\texttt{colorcell} & couleur des cellules & \texttt{colorcell = red}

\texttt{tabularwidth} & largeur du tableau & \texttt{tabularwidth = 20cm}

\texttt{cellheight} & hauteur des cellules & \texttt{cellheight = 2em}

\texttt{marginh} & \small marge horizontale entre deux colonnes & \texttt{marginh = 1em}

\texttt{marginv} & \small marge verticale entre deux lignes & \texttt{marginv = 1em}

\texttt{marginvtitle} & \small marge verticale entre le titre et la ligne suivante & \texttt{marginvtitle = 1em}

\texttt{tabulartitlecolor} & couleur de fond du titre & \texttt{tabulartitlecolor = black}

\texttt{texttitlecolor} & couleur du titre & \texttt{texttitlecolor = white}

\texttt{firstcolumncolor} & \small couleur de la première colonne & \texttt{firstcolumncolor = black}	

\texttt{lastcolumncolor} & \small couleur de la dernière colonne & \texttt{lastcolumncolor = black}

\texttt{tabularheadcolor} & \small couleur de fond des en-têtes & \texttt{tabularheadcolor = orange}

\texttt{textheadcolor} & \small couleur du texte des en-têtes & \texttt{textheadcolor = white}

\texttt{tabularfootcolor} & \small couleur de fond des pieds & \texttt{tabularfootcolor = white}

\texttt{textfootcolor} & \small couleur du texte des pieds & \texttt{textfootcolor = white}

\texttt{textcolor} & \small couleur du texte des cellules & \texttt{textcolor = black}
\end{tikztabular}
\end{tikzpicture}

\section{F.A.Q.}

\subsection{Pourquoi avoir définit l'environnement dans un scope?}

Je souhaitais que l'on puisse agir sur le tableau, par exemple en y ajoutant des flèches.

Chaque cellule porte un nom sous la forme:
\begin{verbatim}
(cell-<ligne>-<colonne>)
\end{verbatim}
Ainsi, pour joindre deux cellules entre elles par une flèche, on pourra écrire:
\begin{verbatim}
\draw[->,>=latex] (cell-1-1) to[bend left=10] (cell-3-4);
\end{verbatim}

\subsection{Pourquoi les options sont précédées d'un chevron?}

Une fois le traitement des options par Python terminé, le programme supprime toutes les lignes contenant le noms des options.

Imaginons que les options soient inscrites sans symbole particulier (comme le chevron). Si une cellule du tableau contient un mot comme \og columns \fg{} (qui est une option), la ligne contenant le mot est supprimée...

J'aurais pu adopter une autre logique et mettre par exemple \texttt{[start]} pour indiquer que le tableau commence, mais cela m'a semblé plus contraignant.

\subsection{Pourquoi devoir déclarer la variable \textbackslash globalpath ?}

\LaTeX{} ne peut pas transmettre (à ma connaissance) le chemin du fichier compilé. 

Or, ce chemin est nécessaire au programme Python. 

Il faut donc définir cette variable manuellement.
\end{document}
