HTML-теги в Rmarkdown to word документ

Oct 01 2020

Есть ли возможность использовать HTML-теги в документах Rmarkdown, преобразованных в word?

Например:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

Отлично работает при рендеринге как html_document, но не при рендеринге как word_document.

Здесь был задан более конкретный вопрос о тегах, но без решения: Подчеркнуть в RMarkdown to Microsoft Word

Ответы

2 tarleb Oct 03 2020 at 14:08

Конечно, поехали:

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

где read_html.luaдолжен быть файл в том же каталоге с этим содержимым:

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

Давайте распакуем приведенное выше, чтобы увидеть, как это работает. Первое, что вы заметите, - это дополнительные параметры word_document. md_extensionsИзменить способ , которым pandoc разбирает текст см здесь для полного списка (или запуска pandoc --list-extensions=markdown) в терминале. Мы raw_htmlвключаем, чтобы убедиться, что pandoc не отбрасывает необработанные теги HTML, и отключаем markdown_in_html_blocksas, чтобы гарантировать, что мы получим весь тег HTML как один блок во внутреннем формате pandoc.

Следующая настройка pandoc_argsуказывает pandoc использовать фильтр Lua для изменения документа во время преобразования. Фильтр выбирает все блоки HTML, анализирует их как HTML вместо Markdown и заменяет необработанный HTML результатом анализа.

Так что, если вы используете необработанный HTML, который может читать pandoc, все будет в порядке. Если вы используете специальные инструкции, которые pandoc не может прочитать, то описанная выше установка тоже не поможет. Вам придется переписать разметку в OOXML, формате XML, используемом в docx.