Conversion Markdown to PDF avec Pandoc & LaTexLaTeX
Bonjour à tous,
J'ai J'écris un livre écris en Markdown et j'aimerais créer un fichier PDF avec une mise en page personnalisé.
personnalisée.
J'ai utilisé iA Writer pour l'écriture et je pensais m'en servir pour la génération PDF, sauf qu'il y a je trouve, pas mal de limitations limitations, je trouve, et l'une des plus problématique problématiques est la génération d'une toc table des matières sans la numérotation des pages associées.
Du coup j'ai J'ai cherché d'autres solutions et celle qui me parait paraît la plus approprié appropriée serait d'utiliser Pandoc en passant par un moteur qui utilise LaTex.
LaTeX.
Voilà pour le contexte.
**La commande :**
pandoc test.md --pdf-engine=xelatex --katex --from markdown+abbreviations+hard_line_breaks+mark+emoji --abbreviations=abbreviations.txt --metadata-file=metadata.yaml --template=template.tex -o livre.pdf
J'ai testé avec xelatex & lualatex, j'obtiens les mêmes résultats.
Pour le moment on ne va pas parler du fichier `abbreviations=abbreviations.txt`, ce n'est pas pris en compte.
**Le Markdown :**
J'ai supprimer supprimé les données pour faire quelque chose de très simple, 2 ou 3 titres et du texte généré Lorem ipsum. Ceci sans emphase ou autre, afin de vérifier que ce n'est pas mon texte initial qui pose problème.
**Les problèmes**
J'en ai 2 deux que j'aimerais régler en priorité :
1. Quand quand j'insère une couverture, qui devrait donc être la première page du livre, je me retrouve avec une page blanche, suivi suivie de la couverture.
couverture ;
2. La toc me table des matières (`toc`) génère un titre *, je n'arrive pas à comprendre le pourquoi du comment. J'ai essayé avec le flag --toc *flag* `--toc` de la commande Pandoc, sans le template LaTex, Template LaTeX, avec le template sans le flag, ou les 2, deux, j'obtiens tjs toujours le même résultat. Pour info ce titre s'ajoute *avant* la toc, ce qui est vraiment bizarre.
J'ai fait le tour des iA, je n'ai pas trouvé de réponse pour régler ces soucis, d'où mon message ici.
Pour info, je ne connais pas LaTex, LaTeX, enfin du coup je le découvre maintenant en fait.
Voici le template qui est à la base extrait avec la commande Pandoc, puis modifié (principalement les modifications sont là où vous avez des commentaires) :
$passoptions.latex()$
\documentclass[
$for(babel-otherlangs)$
$babel-otherlangs$,
$endfor$
$if(babel-lang)$
$babel-lang$,
$endif$
$if(fontsize)$
$fontsize$,
$endif$
$if(papersize)$
$papersize$paper,
$endif$
$for(classoption)$
$classoption$$sep$,
$endfor$
]{$documentclass$}
$if(beamerarticle)$
\usepackage{beamerarticle} % needs to be loaded first
$endif$
\usepackage{xcolor}
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
\usepackage{amsmath,amssymb}
$--
$-- section numbering
$--
$if(numbersections)$
\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
$else$
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
$endif$
$fonts.latex()$
$font-settings.latex()$
$common.latex()$
$for(header-includes)$
$header-includes$
$endfor$
$after-header-includes.latex()$
$hypersetup.latex()$
$if(title)$
\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
$endif$
$if(subtitle)$
\usepackage{etoolbox}
\makeatletter
\providecommand{\subtitle}[1]{% add subtitle to \maketitle
\apptocmd{\@title}{\par {\large #1 \par}}{}{}
}
\makeatother
\subtitle{$subtitle$}
$endif$
\author{$for(author)$$author$$sep$ \and $endfor$}
\date{$date$}
% =============================
% Chargement des packages
% =============================
\usepackage{titlesec} % Personnalisation des styles de titres
\usepackage{textcase} % Conversion en majuscules
\usepackage{graphicx} % Pour gérer les images
\usepackage{xcolor} % Gestion des couleurs
\usepackage{ifthen} % Gestion des conditions
% =============================
% Gestion du compteur
% =============================
\setcounter{secnumdepth}{2} % Définit le niveau de numérotation (H1 à H5)
% =============================
% Gestion des couvertures
% =============================
\newcommand{\insertcover}{
\newgeometry{margin=0pt} % Définir des marges nulles pour la couverture
\begin{titlepage}
\includegraphics[width=\paperwidth,height=\paperheight]{$cover-image$}
\end{titlepage}
\restoregeometry % Restaurer les marges par défaut
}
\newcommand{\insertbackcover}{
\newgeometry{margin=0pt} % Définir des marges nulles pour la quatrième de couverture
\begin{titlepage}
\includegraphics[width=\paperwidth,height=\paperheight]{$back-cover-image$}
\end{titlepage}
\restoregeometry % Restaurer les marges par défaut
}
% =============================
% Paramètres modifiables
% =============================
\definecolor{colorH1}{RGB}{240, 36, 32}
\newcommand{\TitleUppercase}{true} % Mettre les titres en majuscules (true/false)
\newcommand{\TitleNumbering}{true} % Activer la numérotation automatique (true/false)
\newcommand{\HOneColor}{colorH1} % Couleur pour les titres H1
\newcommand{\HTwoColor}{black} % Couleur pour les titres H2
\newcommand{\HThreeColor}{black} % Couleur pour les titres H3
\newcommand{\HFourColor}{black} % Couleur pour les titres H4
\newcommand{\HFiveColor}{black} % Couleur pour les titres H5
% =============================
% Fonction pour la mise en majuscules
% =============================
\newcommand{\TitleFormat}[1]{%
\ifthenelse{\equal{\TitleUppercase}{true}}{\MakeUppercase{#1}}{#1}%
}
% =============================
% Configuration de la police principale
% =============================
\usepackage{fontspec} % Permet d'utiliser des polices personnalisées avec LuaLaTeX
\setmainfont{Playfair Display}
%\setmainfont{Playfair Display}[
% ItalicFont={Playfair Display Italic},
% BoldFont={Playfair Display Bold},
% BoldItalicFont={Playfair Display Bold Italic}
%]
\renewcommand{\baselinestretch}{1.2} % Paramètre de l'interligne
% =============================
% Configuration des polices pour les titres
% =============================
\newfontfamily\hOneFont{Russo One} % Police pour les titres H1
\newfontfamily\hTwoFont{Russo One} % Police pour les titres H2
\newfontfamily\hThreeFont{Russo One} % Police pour les titres H3
\newfontfamily\hFourFont{Russo One} % Police pour les titres H4
\newfontfamily\hFiveFont{Russo One} % Police pour les titres H5
% Pas de titre natif H6 avec LaTex
% =============================
% Définition des styles des titres
% =============================
% ---- TITRE H1 ----
\titleformat{\section}
[block] % Bloc pour prendre toute la ligne
{\hOneFont\fontsize{32pt}{36pt}\bfseries\color{\HOneColor}} % Police et couleur
{\ifthenelse{\equal{\TitleNumbering}{true}}{\thesection\hspace{-0.5em}}{}} % Numérotation si activée
{1em} % Espacement
{\TitleFormat} % Mise en majuscule
% ---- TITRE H2 ----
\titleformat{\subsection}
{\hTwoFont\fontsize{24pt}{28pt}\bfseries\color{\HTwoColor}}
{\ifthenelse{\equal{\TitleNumbering}{true}}{\thesubsection\hspace{-0.5em}}{}}
{1em}
{\TitleFormat}
% ---- TITRE H3 ----
\titleformat{\subsubsection}
{\hThreeFont\fontsize{18pt}{22pt}\bfseries}
{\thesubsubsection}{1em}{}
% ---- TITRE H4 ----
\titleformat{\paragraph}
{\hFourFont\fontsize{16pt}{20pt}\bfseries}
{\theparagraph}{1em}{}
% ---- TITRE H5 ----
\titleformat{\subparagraph}
{\hFiveFont\fontsize{14pt}{18pt}\bfseries}
{\thesubparagraph}{1em}{}
% =============================
% Gestion des marges et de la mise en page
% =============================
\usepackage[strict]{changepage} % Gestion avancée des marges
\usepackage{geometry} % Définition des marges
\geometry{twoside,
inner=24mm, % Marge intérieure (côté reliure)
outer=24mm, % Marge extérieure
top=24mm, % Marge supérieure
bottom=40mm, % Marge inférieure
footskip=16mm, % Distance entre le texte et le numéro de page
bindingoffset=6mm % Décalage pour la reliure
}
% Définit l'espace entre le texte et les notes de bas de page
\renewcommand{\footnoterule}{\vspace{18pt}\hrule width 0.3\textwidth \vspace{5pt}}
% =============================
% Gestion des numéros de pages
% =============================
\usepackage{fancyhdr} % Personnalisation des en-têtes et pieds de page
\pagestyle{fancy} % Activation du style personnalisé
\fancyhf{} % Efface les en-têtes et pieds de page par défaut
\fancyfoot[LE,RO]{\thepage} % Numérotation à gauche sur pages impaires et à droite sur pages paires
\renewcommand{\headrulewidth}{0pt} % Supprime la ligne d'en-tête
\renewcommand{\footrulewidth}{0pt} % Supprime la ligne de pied de page
% =============================
% Gestion des titres H1 : saut de page + en-tête
% =============================
\let\oldsection\section
\renewcommand{\section}[1]{%
\cleardoublepage % Saut de page avant le H1
\sectionmark{#1} % Stocke le titre H1 pour l'en-tête
\fancyhead[C]{} % Supprime l'en-tête sur la page du H1
{\oldsection{#1}} % Affiche le titre H1 normalement
\thispagestyle{empty} % Supprime l'en-tête et la pagination sur cette page
\fancyhead[C]{\fontsize{10pt}{12pt}\selectfont #1} % Remet le titre H1 en en-tête pour les pages suivantes
\clearpage % Saut de page après le H1
}
% =============================
% Mise en forme du code inline et des blocs de code
% =============================
% Charger le package pour la coloration et le fond des blocs de code
\usepackage[listings, skins, breakable]{tcolorbox} % Chargement avec les bonnes options
% Définition de la police Hack pour le code
\newfontfamily\codeFont{Hack} % Définit Hack comme police monospacée
% Appliquer Hack comme police principale pour le code
\renewcommand{\ttdefault}{lmtt} % Corrige la police de \texttt
\lstset{basicstyle=\codeFont\small} % Applique Hack aux listings
% =============================
% Blocs de code (fond gris, arrondi, police Hack)
% =============================
\newtcblisting{codeblock}{
colback=gray!10, % Fond gris clair
colframe=black, % Bordure noire
arc=4pt, % Coins arrondis (4px)
boxrule=0.5pt, % Épaisseur de la bordure
listing only, % Pas d'espace supplémentaire
breakable, % Autoriser la coupure sur plusieurs pages
fontupper=\codeFont, % Appliquer Hack
}
% Appliquer ce style aux environnements verbatim
\let\oldverbatim\verbatim
\renewcommand{\verbatim}{\codeblock}
% =============================
% Code inline (fond gris, arrondi, police Hack)
% =============================
\renewcommand{\texttt}[1]{%
\tcbox[colback=gray!10, arc=4pt, boxrule=0pt,
left=4pt, right=4pt, top=0pt, bottom=0pt, boxsep=2pt, on line]{\codeFont #1}
}
\begin{document}
\pagestyle{empty} % Supprime les numéros de page pour la couverture et la page blanche suivante
% Insérer la couverture en première page
\insertcover
\clearpage
% Ajouter une seule page blanche après la couverture
\mbox{}
% Réactiver le style de page mais sans afficher le numéro sur cette page blanche
\pagestyle{empty}
\pagenumbering{arabic}
\setcounter{page}{1}
% Afficher les numéros de page à partir de la première vraie page du contenu
\clearpage
\pagestyle{fancy}
$if(has-frontmatter)$
\frontmatter
$endif$
$if(title)$
\maketitle
$if(abstract)$
\begin{abstract}
$abstract$
\end{abstract}
$endif$
$endif$
$for(include-before)$
$include-before$
$endfor$
$if(toc)$
$if(toc-title)$
\renewcommand*\contentsname{$toc-title$}
$endif$
{
$if(colorlinks)$
\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$}
$endif$
\setcounter{tocdepth}{$toc-depth$}
\tableofcontents
}
$endif$
$if(lof)$
\listoffigures
$endif$
$if(lot)$
\listoftables
$endif$
$if(linestretch)$
\setstretch{$linestretch$}
$endif$
$if(has-frontmatter)$
\mainmatter
$endif$
% Contenu principal
$body$
$if(has-frontmatter)$
\backmatter
$endif$
$if(nocite-ids)$
\nocite{$for(nocite-ids)$$it$$sep$, $endfor$}
$endif$
$if(natbib)$
$if(bibliography)$
$if(biblio-title)$
$if(has-chapters)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
$endif$
$for(include-after)$
$include-after$
$endfor$
\newpage % Nouvelle page avant la dernière couverture
\insertbackcover
\end{document}
Si quelqu'un pouvais pouvait me donner au moins des pistes ou des conseils, ça serait formidable :)
En espérant trouvé une solution, je vous remercie par avance.