Tags HTML no Rmarkdown para documento do Word

Oct 01 2020

Existe alguma possibilidade de usar tags HTML em documentos Rmarkdown renderizados em Word?

Por exemplo:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

Funciona perfeitamente ao renderizar como html_document, mas não ao renderizar como word_document.

Uma pergunta mais específica sobre as tags foi feita aqui, mas sem solução: Sublinhado no RMarkdown para o Microsoft Word

Respostas

2 tarleb Oct 03 2020 at 14:08

Claro, vamos lá:

---
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>

onde read_html.luadeve haver um arquivo no mesmo diretório com este conteúdo:

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

Vamos desempacotar o acima para ver como funciona. A primeira coisa que você notará são os parâmetros adicionais para word_document. Para md_extensionsmodificar a maneira como o pandoc analisa o texto, veja aqui uma lista completa (ou execução pandoc --list-extensions=markdown) em seu terminal. Habilitamos raw_htmlpara garantir que o pandoc não descarta as tags HTML brutas e desabilitamos markdown_in_html_blockspara garantir que obtenhamos a tag HTML inteira como um bloco no formato interno do pandoc.

A próxima configuração é pandoc_args, onde dizemos ao pandoc para usar um filtro Lua para modificar o documento durante a conversão. O filtro seleciona todos os blocos HTML, analisa-os como HTML em vez de Markdown e substitui o HTML bruto pelo resultado da análise.

Portanto, se você estiver usando HTML bruto que o pandoc pode ler, você ficará bem. Se você estiver usando instruções especiais que o pandoc não consegue ler, a configuração descrita acima também não ajudará. Você teria que reescrever a marcação em OOXML, o formato XML usado em docx.