Tag HTML in Rmarkdown in documento word

Oct 01 2020

C'è qualche possibilità di utilizzare tag HTML nei documenti Rmarkdown resi in Word?

Per esempio:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

Funziona perfettamente durante il rendering come html_document, ma non durante il rendering come word_document.

Una domanda più specifica sui tag è stata posta qui, ma senza soluzione: Sottolineato in RMarkdown in Microsoft Word

Risposte

2 tarleb Oct 03 2020 at 14:08

Certo, eccoci qui:

---
output:
  word_document:
    md_extensions: +raw_html-markdown_in_html_blocks
    pandoc_args: ['--lua-filter', 'read_html.lua']
---

# This is rendered as heading

<h1> And this is one, too </h1>

dove read_html.luadeve essere un file nella stessa directory con questo contenuto:

function RawBlock (raw)
  if raw.format:match 'html' and not FORMAT:match 'html' then
    return pandoc.read(raw.text, raw.format).blocks
  end
end

Spacchettiamo quanto sopra per vedere come funziona. La prima cosa che noterai sono i parametri aggiuntivi a word_document. Per md_extensionsmodificare il modo in cui pandoc analizza il testo, vedi qui per un elenco completo (o esegui pandoc --list-extensions=markdown) nel tuo terminale. Permettiamo raw_htmla fare in modo che Pandoc non scarta i tag HTML e cruda disabilitare markdown_in_html_blocksda garantire che si ottiene l'intero tag HTML come un blocco in formato interno di Pandoc.

L'impostazione successiva è pandoc_args, dove diciamo a pandoc di utilizzare un filtro Lua per modificare il documento durante la conversione. Il filtro seleziona tutti i blocchi HTML, li analizza come HTML invece di Markdown e sostituisce l'HTML grezzo con il risultato dell'analisi.

Quindi se stai usando HTML grezzo che pandoc può leggere, starai bene. Se stai usando istruzioni speciali che pandoc non è in grado di leggere, neanche la configurazione descritta sopra sarà di aiuto. Dovresti riscrivere il markup in OOXML, il formato XML utilizzato in docx.