Je n'arrive pas à afficher des blocs de code dans le document PDF que je génère avec Pandoc à partir d'un fichier Markdown. Aucun problème avec le code en ligne cependant.

Pour info, voici le fichier YAML :

lang: FR-fr
documentclass: book
fontsize: 11pt
csquotes: true
toc: true
toc-title: "Table des matières"
cover-image: "cover.png"  # Image pour la couverture (1ère de couverture)
back-cover-image: "backcover.png"  # Image pour la 4ème de couverture

Et voici le code du template LaTeX :

% =============================
% 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}

% =============================
% Code inline (fond gris, arrondi, police Hack)
% =============================
\DeclareTotalTCBox{\texttt}{m}{%
    fontupper=\codeFont,
    colback=gray!10, % Fond gris
    arc=4pt, % Coins arrondis
    boxrule=0pt, % Pas de bordure
    left=4pt, right=4pt, % Espacement horizontal interne
    top=0pt, bottom=0pt, % Espacement vertical interne
    boxsep=0.5pt, % Espacement autour du texte
    on line}{\strut#1}

% =============================
% Blocs de code (fond gris, arrondi, police Hack)
% =============================
\DeclareTCBListing{verbatim}{}{
    colback=gray!10, % Fond gris clair pour le bloc
    arc=4pt, % Coins arrondis (4px)
    boxrule=0pt, % Épaisseur de la bordure
    listing only, % Pas d'espace supplémentaire autour
    breakable, % Autoriser la coupure sur plusieurs pages
    fontupper=\codeFont\ttfamily, % Appliquer Hack
    enhanced, % Améliore le rendu du fond et des bordures
    listing engine=listings
}

Actuellement j'ai une font a chasse fixe (celle par défaut je pense), mais ni fond gris, ni la bonne font (a savoir Hack).

Si il y a des options aussi pour activer la numérotation de ligne et la coloration syntaxique, je prends.

Posée 20 Mar, 15:46

LaTeXBold's gravatar image

LaTeXBold
957
Taux d'acceptation : 6%

Déjà, les lignes documentclass: book et la commande documentclass{article} ne semblent pas cohérentes.

(20 Mar, 16:49) polymorphisme polymorphisme's gravatar image

Pouvez-vous me donner plus de détails ? Je ne comprends pas le lien avec documentclass{article}. J’ai vérifié, et je ne l’ai nulle part, y compris dans le fichier .tex généré après transformation.

Pour information le code en ligne fonctionne parfaitement, seul les blocs de code ne sont pas fonctionnel. Le code provient des conseils de @touhami.

(21 Mar, 14:35) LaTeXBold LaTeXBold's gravatar image

Voici un code surce et le résultat. alt text

% !TEX xelatex
\documentclass{article}
\usepackage{fontspec} 
\setmainfont{Playfair Display}
\usepackage[listings, skins, breakable]{tcolorbox}

\newfontfamily\codeFont{Hack}

% =============================
\DeclareTotalTCBox{\texttt}{m}{%
    fontupper=\codeFont,
    colback=gray!10, % Fond gris
    arc=4pt, % Coins arrondis
    boxrule=0pt, % Pas de bordure
    left=4pt, right=4pt, % Espacement horizontal interne
    top=0pt, bottom=0pt, % Espacement vertical interne
    boxsep=0.5pt, % Espacement autour du texte
    on line}{\strut#1}

% =============================
% Blocs de code (fond gris, arrondi, police Hack)
% =============================
\DeclareTCBListing{verbatim}{}{
    colback=gray!10, % Fond gris clair pour le bloc
    arc=4pt, % Coins arrondis (4px)
    boxrule=0pt, % Épaisseur de la bordure
    listing only, % Pas d'espace supplémentaire autour
    breakable, % Autoriser la coupure sur plusieurs pages
    fontupper=\codeFont, % Appliquer Hack
    enhanced, % Améliore le rendu du fond et des bordures
    listing engine=listings,
    listing options={basicstyle=\codeFont\small}
}

\begin{document}
\texttt{foo\_bar} and
\begin{verbatim}
for bar \i in {1,2,10}
    do this
\end{verbatim}
\end{document}

Remarque: essayer de supprimer

\renewcommand{\ttdefault}{lmtt}
\lstset{basicstyle=\codeFont\small}

Puis à la définition de \DeclareTCBListing{verbatim} remplacer fontupper=\codeFont\ttfamily par fontupper=\codeFont et ajouter listing options={basicstyle=\codeFont\small}

Lien permanent

Publiée 25 Mar, 13:49

touhami's gravatar image

touhami
10.0k410
Taux d'acceptation : 51%

OK, alors j'ai pris en compte les modifications suivantes :

Puis à la définition de \DeclareTCBListing{verbatim} remplacer fontupper=\codeFont\ttfamily par fontupper=\codeFont et ajouter  listing options={basicstyle=\codeFont\small}

Mais je n'ai toujours pas la bonne police, ni le fond gris.

Pour le fond gris, je suspecte que c'est cette option que je n'ai pas intégrée : \documentclass{article}.

Car j'ai actuellement ceci :

\documentclass[
$for(babel-otherlangs)$
  $babel-otherlangs$,
$endfor$
$if(babel-lang)$
  $babel-lang$,
$endif$
$if(fontsize)$
  $fontsize$,
$endif$
$for(classoption)$
  $classoption$$sep$,
$endfor$
]{$documentclass$}

Et je pense que je doit le garder car j'utilise des éléments dans le fichier YAML (j'avais essayé de les transférer dans le template, sans succès).

Si je supprime ce code pour mettre à la place \documentclass{article}, je prends une erreur :

Error producing PDF.
! LaTeX Error: Command \chaptermark undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.262 \renewcommand{\chaptermark}

Par contre je ne comprends pas ce que je dois faire de ça :

\renewcommand{\ttdefault}{lmtt}
\lstset{basicstyle=\codeFont\small}

Et dernier point, j'utilise le moteur lualatex, car si j'utilise xelatex, je perds la mise en forme en gras.

OK, je viens de générer directement le fichier .tex a la place du PDF et j'obtiens ceci :

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{Je test un **bloc** de code.}
\NormalTok{0 de la font Hack}
\end{Highlighting}
\end{Shaded}

Shaded au lieu de verbatim, je vais creuser.

Lien permanent

Publiée 25 Mar, 17:24

LaTeXBold's gravatar image

LaTeXBold
957
Taux d'acceptation : 6%

EDIT : (ca fonctionne)

OK, pour forcer le verbatim, il faut utiliser dans la commande Pandoc le flag : --no-highlight.

Ce qui permet de forcer le moteur de rendu de Pandoc et d'obtenir ceci :

\begin{verbatim}
Je test un **bloc** de code.
0 de la font Hack
\end{verbatim}

Par contre, je n'arrive pas à obtenir une version avec la coloration syntaxique.

J'ai installé pygments avec brew (je suis sur Mac), mais ça ne change rien.

Par exemple si je lance ceci : pandoc test.md --pdf-engine=lualatex --from markdown+hard_line_breaks+mark+emoji --metadata-file=metadata.yaml --template=template.tex -o livre.pdf --highlight-style=pygments --pdf-engine-opt=--shell-escape

J'obtiens ce message :

[WARNING] [makePDF] LaTeX Warning: Command \@parboxrestore has changed. Check if current package is valid. :

Si j'utilise cette commande :

pandoc test.md --pdf-engine=lualatex --from markdown+hard_line_breaks+mark+emoji --metadata-file=metadata.yaml --template=template.tex -o livre.pdf --highlight-style=pygments

Ca ne fonctionne plus, c'est à dire que ce n'est pas la bonne font et plus de fond gris. Le rendu dans le fichier tex n'est plus verbatim et reviens à Shaded.

EDIT 2 : J'ai toujours pas utilisez cette ligne comme expliqué dans le post ci-dessus : documentclass{article}

Lien permanent

Publiée 25 Mar, 17:33

LaTeXBold's gravatar image

LaTeXBold
957
Taux d'acceptation : 6%

Modifiée 25 Mar, 21:10

1] Très bien, donc c'est l'option --no-highlight. Pour la coloration syntaxique ouvrir une nouvelle question. N'oublier pas de supprimer ou commenter

\renewcommand{\ttdefault}{lmtt} \lstset{basicstyle=\codeFont\small}

2] Oui, garder ton fichier template.tex tel qu'il est et ne pas utiliser \documentclass{article}.

(26 Mar, 08:06) touhami touhami's gravatar image

Merci pour les précisions et les solutions proposées :D

(26 Mar, 09:34) LaTeXBold LaTeXBold's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.

Mots-clés de la question :

×42
×31
×7

Question posée : 20 Mar, 15:46

Question vue : 352 fois

Dernière mise à jour : 26 Mar, 09:34