Come aggiungere un bordo ai blocchi di codice in pandoc?

Aug 22 2020

Sto scrivendo un file Markdown con blocchi di codice al suo interno, quindi lo sto creando sia in DOCX che in PDF con pandoc, in particolare:

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

Il defaults.ymlfile specifica solo i margini LaTeX e include un ToC.

L'output sembra molto carino, ma mi piacerebbe che ci fossero dei bordi intorno ai blocchi di codice, per renderli visivamente separati dal testo circostante.

Questa domanda su TeX StackExchange suggerisce di cambiare lo stile di evidenziazione in un tema scuro, ma i miei lettori preferiranno sicuramente uno chiaro.

Questa domanda SO suggerisce di passare al pacchetto elenchi, ma questo produce un codice molto più brutto rispetto a quello predefinito di pandoc. (Anche quel post ha 6 anni e da allora pandoc è cambiato molto.)

C'è un modo che non abbia uno di questi svantaggi?

Risposte

2 tarleb Aug 22 2020 at 00:04

Per LaTeX, puoi utilizzare il pacchetto tcolorbox altamente personalizzabile per avvolgere il blocco di codice, inserendo il codice necessario tramite un filtro 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

Vedere la documentazione di tcolorbox per maggiori dettagli.


Docx è più semplice: modifica lo stile del testo "Codice sorgente", quindi utilizza il documento modificato come --reference-doc.