% Graphes - Paramétrage
\colorlet{commentcol}{red!70!violet}

% Changement des longueurs pour éviter un conflit avec celles du chapitre TikZ (création de diagrammes)
\newlength{\blocksep}
\addtolength{\blocksep}{2.8cm}

\newlength{\blockwh}
\addtolength{\blockwh}{4cm}

\newlength{\blockht}
\addtolength{\blockht}{2cm}

% Création des styles
\tikzset{
	node distance = \blocksep, 
	bloc/.style = {draw = cyan!50!blue, fill = cyan!50!blue, text = white, rounded corners, minimum width = \blockwh, minimum height = \blockht, text width = \blockwh - 2mm, align = center},
	dossier/.style = {bloc, draw = orange!70!yellow, fill = orange!70!yellow},
	fin/.style = {bloc, draw = Green, fill = Green},
	arrow/.style = {line width = 4pt, ->, > = Stealth},
	comment/.style = {text width = \blocksep, align = center, font = \itshape}
}

\begin{tikzpicture}
% Création des blocs
\node[bloc, fill = white, text = black, font = \bfseries, line width = 3pt] (source) {Fichier source \\ \texttt{main.tex}};
\node[dossier, left = of source] (images) {Dossier \og Images \fg{} \linebreak \texttt{.eps} \quad \texttt{.jpg} \quad \texttt{.pdf} \quad \texttt{.png}};
\node[dossier, draw = commentcol, very thick, above = of images] (fichierstex) {Fichiers \texttt{.tex} \\ (préambule, chapitres, schémas, etc.)};
\node[dossier, below = of images] (biblioA) {Bibliographie \\ \texttt{main-biblio.bib}};

\node[bloc, below = of source, xshift = \blockwh/2+\blocksep/2] (dvi) {DVI};
\node[bloc, right = of source] (ps) {PostScript (PS)};
\node[bloc, right = of ps] (output) {Fichiers annexes \\ (générés par \LaTeX{})};
\node[fin, above = of output] (pdfA) {PDF généré \\ \texttt{main.pdf}};

\node[bloc, right = of pdfA] (biblioB) {Mise en forme de la bibliographie \\ \texttt{main.bbl}};
\node[bloc, below = of biblioB, yshift = -\blockht-\blocksep] (index) {Création index \\ \texttt{.ind}};
\node[fin, right = of biblioB, yshift = -\blockht-\blocksep] (pdfB) {PDF fini ! \\ (bibliographie et/ou index)};

% Séparateur
\draw[dash pattern = on 13pt off 13pt, commentcol, line width = 3pt] ([xshift = \blockwh/2+\blocksep/4]pdfA.north) node[comment, text width = \blockwh, font = \itshape\Large, anchor = south, above, yshift = 7pt] {OPTIONNEL} -- ([xshift = -\blockwh/2-3\blocksep/4]index.south);

% Liens entre les blocs et commentaires
\draw[arrow] (source) -- (images);
\path (source) -- (images) coordinate [midway] (nfictA);
\draw[arrow] (source) -- (nfictA) node[comment, align = left, right, yshift = \blocksep] {appel} |- (fichierstex);
\node[comment, text = commentcol, minimum width = \blockwh, above] (renvoi) at (fichierstex.north) {cf. \autoref{structure-docs} \og \nameref{structure-docs} \fg{}};
\draw[arrow] (source) -- (nfictA) node[comment, align = left, right, yshift = -\blocksep] {appel} |- (biblioA);

\draw[arrow, brown] (source) |- node[comment, font = \rmfamily, align = left, anchor = south west] {PDF\LaTeX{} \\ Xe\LaTeX{} \\ Lua\LaTeX{}} node[comment, text width = \blockwh, font = \rmfamily, align = left, anchor = north west] {(\texttt{.jpg}, \texttt{.pdf}, \texttt{.png} \\ \texttt{.eps} toléré)} ([yshift = \blockht/4]pdfA.west);
\draw[arrow, gray] (source) |- node[comment, align = left, font = \rmfamily, right, yshift = \blocksep] {\LaTeX{} \\ (\texttt{.eps})} (dvi);
\draw[arrow, gray] (dvi) -| node[comment, below] {\texttt{dvi2ps}} (ps);
\draw[arrow, gray] (ps) |- node[comment, align = right, left] {\texttt{ps2pdf}} ([yshift = -\blockht/4]pdfA.west);

\path (pdfA) -- (output) coordinate [midway] (nfictB);
\node[draw, circle, line width = 2pt, font = \bfseries\huge] at (nfictB) {+};

\draw[arrow] ([yshift = \blockht/4]pdfA.east) -- ([yshift = \blockht/4]biblioB.west);
\path ([yshift = -\blockht/4]pdfA.east) -- ([yshift = -\blockht/4]biblioB.west) coordinate [midway] (nfictC);
\draw[arrow] ([yshift = -\blockht/4]pdfA.east) -- (nfictC) |- node[comment, align = left, font = \rmfamily, text width = \blockwh, right, yshift = 1.5\blocksep] {\texttt{index.idx} \\ moteur MakeIndex} (index);
\draw[arrow] (biblioB) -| node[comment, text width = \blockwh, align = right, anchor = south east] {Moteur initial $\times 2$} (pdfB);
\draw[arrow] (index) -| node[comment, align = right, anchor = north east] {Moteur initial ?} (pdfB);
\end{tikzpicture}