Comment ajouter une bordure aux blocs de code dans Pandoc?

Aug 22 2020

J'écris un fichier Markdown avec des blocs de code, puis je le construis à la fois en DOCX et PDF avec pandoc, en particulier:

pandoc myfile.md --to=docx --defaults=defaults.yml -o myfile.docx
pandoc myfile.md --to=latex --defaults=defaults.yml -o myfile.pdf

Le defaults.ymlfichier spécifie simplement les marges LaTeX et inclut une ToC.

Le résultat est très joli, mais j'aimerais qu'il y ait des bordures autour des blocs de code, pour les séparer visuellement du texte environnant.

Cette question TeX StackExchange suggère de changer le style de surbrillance en un thème sombre, mais mes lecteurs préféreront certainement un thème clair.

Cette question SO suggère de passer au package de listes, mais cela produit du code beaucoup plus laid que la valeur par défaut de pandoc. (Ce message a également 6 ans, et pandoc a beaucoup changé depuis.)

Y a-t-il un moyen qui n'a pas l'un de ces inconvénients?

Réponses

2 tarleb Aug 22 2020 at 00:04

Pour LaTeX, vous pouvez utiliser le package tcolorbox hautement personnalisable pour envelopper le bloc de code, en insérant le code nécessaire via un filtre Lua :

function raw_tex (t)
  return pandoc.RawBlock('tex', t)
end

--- Wrap code blocks in tcolorbox environments
function CodeBlock (cb)
  return {raw_tex'\\begin{tcolorbox}', cb, raw_tex '\\end{tcolorbox}'}
end

--- Ensure that the longfbox package is loaded.
function Meta (m)
  m['header-includes'] = {raw_tex '\\usepackage{tcolorbox}'}
  return m
end

Consultez la documentation de tcolorbox pour plus de détails.


Docx est plus simple: modifiez le style de texte "Code source", puis utilisez le document modifié comme --reference-doc.