Participant activement à plusieurs associations, j’ai été sollicité de nombreuses fois pour réaliser des tickets. Comme beaucoup, j’ai réalisé les premières versions avec des outils wysiwyg comme LibreOffice Writer ; pendant un certain temps, je les ai réalisé avec latex.

Depuis que j’ai découvert Jekyll pour gérer les sites Web, j’ai également découvert la facilité du Markdown pour la rédaction de texte. Aujourd’hui, toute production documentaire se fait en Markdown.

J’ai donc également chercher comment rédiger des tickets de la même façon et je vous propose la méthode retenue.

Installation des outils

Pour rédiger de la documentation j’utilise les outils suivant :

  • Vim : l’éditeur de texte. Il en existe d’autres comme Mousepad ou Emacs ou Nano, chacun fera son choix
  • texlive: distribution logicielle LaTeX
  • pandoc : bibliothèque en Haskell permettant de convertir d’un format de balisage vers un autre, c’est un outil en ligne de commande

Pour les installer sur un poste Debian :

  1. Mise à jour des dépôts : apt-get update
  2. Installation des outils : apt-get install vim texlive pandoc

Les noms des paquets correspondent à ceux qui sont présents dans la distribution Debian, le nom peut être différent sur d’autres distributions.

Les outils utilisés proposent des binaires pour Windows, la création de tickets doit donc fonctionner dans cet environnement.

Rédaction des tickets

Pour rédiger des tickets on va créer un fichier en Markdown qui va être convertit en PDF avec Pandoc grâce à l’utilisation d’un modèle (ou template) en LaTeX.

Le fichier en Markdown

Le fichier en Markdown est réduit à un simple entête ou Front Matter.
Exemple :

---
asso: Mon asso
groupe: mon animation
tarif: X €
quoi: 
ou: Salle des fêtes, à partir de 20H00
quand: Samedi
logo: logos/linux_bzh1_resized.png
---

Les différentes variables définies dans ce fichier (asso, groupe …) vont être utilisés dans le modèle en LaTeX.

Le modèle LaTeX

Le modèle est composé de 3 parties :

  1. L’inclusion des paquets requis
  2. La définition d’un nouvelle commande qui correspond au contenu d’un ticket
  3. Le corps du document qui contiendra 2 colonnes de 5 tickets

Télécharger le modèle ticket.latex

Les paquets requis

\documentclass[a4paper, 12pt]{article}
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx}
\usepackage[french]{babel}
\usepackage{array}
\usepackage{multido}
\usepackage{multirow}
\usepackage{fullpage}
\usepackage{cellspace}
\usepackage{setspace}
\usepackage{wrapfig}
\usepackage{fancybox}

Le contenu d’un ticket

Pour le contenu du ticket on créé une nouvelle commande qui sera ensuite utilisée à chaque fois que l’on veut insérer un ticket.

% Definition du texte du ticket
\newcommand{\contenu}{%
	\begin{minipage}[t][9em]{0.48\textwidth}
		\begin{wrapfigure}{r}{2cm}
			\includegraphics[width=1.5cm]{$logo$}
		\end{wrapfigure}

		\vspace{0.3cm}
	\Large{\textbf{$asso$}}

	\Large{\textbf{$groupe$}}
	
	$if(quoi)$%
	\footnotesize{$quoi$}
	$else$
		\vspace{0.3cm}
	$endif$

	$if(ou)$%
	\footnotesize{$ou$}
	$else$
		\vspace{0.3cm}
	$endif$

$if(tarif)$%
	\footnotesize{Tarif : $tarif$}
$else$
\vspace{0.3cm}
$endif$

 $quand$
		\newline
\end{minipage}
}

Les variables quoi,ou ettarif ne sont pas obligatoires. En cas d’absence, elles sont remplacées par un espace vertical de 0,3cm.

le corps du document

La création des tickets est faite par une boucle qui va créer 5 lignes contenant chacune un tableau de 3 colonnes.
Un ticket est inséré dans la 1ère et 3ième colonne, la 2ième permet d’avoir un espace vide pour faciliter le découpage.


\setlength\parindent{0pt}

\begin{document}
 
\pagestyle{empty}
%\noindent % empeche le retrait sur la première ligne du paragraphe
% On va créer 10 tickets (2 colonnes de 5)
\multido{\i=1+1}{5}
{ 
	{%On crée un tableau de 3 colonnes centrées
		\onehalfspacing \begin{tabular}{|c|c|c|}
		\hline % Ligne de séparation
		% On crée un tableau de 2 colonnes et une seule ligne
	  \contenu & & \contenu \\
		\hline % Ligne de séparation
		% Fin du tableau et rajout de 3 lignes vides après
  \end{tabular} \\ \\ \\
  }
}

\end{document}

Convertir avec Pandoc

L’outil pandoc permet de convertir d’un format à un autre. Pour les conversions, Pandoc utilise un modèle qui peut être celui fournit par défaut avec l’outil ou une modèle personnalisé.

Sur mon PC, les modèles sont dans le dossier /usr/share/pandoc/data/templates/ :

affiliations.jats	 default.epub3			default.mediawiki     default.tei
article.jats_publishing  default.haddock		default.ms	      default.texinfo
default.asciidoc	 default.html4			default.muse	      default.textile
default.biblatex	 default.html5			default.opendocument  default.typst
default.bibtex		 default.icml			default.opml	      default.xwiki
default.chunkedhtml	 default.jats_archiving		default.org	      default.zimwiki
default.commonmark	 default.jats_articleauthoring	default.plain	      definitions.typst
default.context		 default.jats_publishing	default.revealjs      styles.citations.html
default.docbook4	 default.jira			default.rst	      styles.html
default.docbook5	 default.latex			default.rtf	      template.typst
default.dokuwiki	 default.man			default.s5
default.dzslides	 default.markdown		default.slideous
default.epub2		 default.markua			default.slidy

Les modèles personnalisés doivent être enregistrés dans le dossier $HOME/.pandoc/templates.

Pour générer le PDF des tickets, on utilise la commande

pandoc --from markdown --template ticket.latex ticket.md -o ticket.pdf

Si le modèle LaTeX est dans un autre dossier, il faudra préciser le chemin d’accès :

pandoc --from markdown --template /chemin/vers/ticket.latex ticket.md -o ticket.pdf

Au final, on obtient des tickets :

Ticket