Des tickets avec Markdown, LaTeX et Pandoc
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 :
- Mise à jour des dépôts :
apt-get update - 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 :
- L’inclusion des paquets requis
- La définition d’un nouvelle commande qui correspond au contenu d’un ticket
- 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 :

Saint Carré