Tagi HTML w Rmarkdown do dokumentu Word

Oct 01 2020

Czy jest jakaś możliwość używania tagów HTML w dokumentach Rmarkdown renderowanych do Worda?

Na przykład:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

Działa doskonale podczas renderowania jako html_document, ale nie podczas renderowania jako word_document.

Zadano tutaj bardziej szczegółowe pytanie dotyczące tagów, ale bez rozwiązania: Podkreśl w RMarkdown do Microsoft Word

Odpowiedzi

2 tarleb Oct 03 2020 at 14:08

Jasne, zaczynamy:

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

gdzie read_html.luamusi być plikiem w tym samym katalogu z następującą zawartością:

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

Rozpakujmy powyższe, aby zobaczyć, jak to działa. Pierwszą rzeczą, którą zauważysz, są dodatkowe parametry word_document. md_extensionsZmodyfikować sposób, że pandoc analizuje tekst, patrz tutaj aby uzyskać pełną listę (lub metę pandoc --list-extensions=markdown) w terminalu. Umożliwiamy raw_html, aby upewnić się, że pandoc nie odrzutów znaczniki HTML surowy i wyłączyć markdown_in_html_blocks, aby upewnić się, że mamy cały tag HTML jako jeden blok w formacie wewnętrznym pandoc użytkownika.

Następnym ustawieniem jest to pandoc_args, że mówimy pandocowi, aby używał filtru Lua do modyfikacji dokumentu podczas konwersji. Filtr wybiera wszystkie bloki HTML, analizuje je jako HTML zamiast Markdown i zastępuje surowy kod HTML wynikiem analizy.

Więc jeśli używasz surowego HTML, który pandoc może odczytać, wszystko będzie dobrze. Jeśli używasz specjalnych instrukcji, których pandoc nie może odczytać, konfiguracja opisana powyżej również nie pomoże. Musiałbyś przepisać znaczniki w OOXML, formacie XML używanym w docx.