HTML 标签在 Rmarkdown 到 word 文档

HTML tags in Rmarkdown to word document

是否可以在呈现为 word 的 Rmarkdown 文档中使用 HTML 标签?

例如:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

渲染为 html_document 时完美运行,但渲染为 word_document 时效果不佳。

这里提出了一个关于标签的更具体的问题,但没有解决方案:Underline in RMarkdown to Microsoft Word

好的,我们开始吧:

---
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 解析文本的方式,请参阅 here 以获取终端中的完整列表(或 运行 pandoc --list-extensions=markdown)。我们启用 raw_html 以确保 pandoc 不会丢弃原始的 HTML 标签,并禁用 markdown_in_html_blocks 以确保我们将整个 HTML 标签作为 pandoc 内部的一个块格式。

下一个设置是pandoc_args,我们告诉pandoc在转换期间使用Lua filter修改文档。过滤器挑选出所有 HTML 块,将它们解析为 HTML 而不是 Markdown,并将原始 HTML 替换为解析结果。

因此,如果您使用 pandoc 可以读取的原始 HTML,您会没事的。如果您使用的是 pandoc 无法读取的特殊说明,那么上述设置也无济于事。您必须重写 OOXML 中的标记,docx 中使用的 XML 格式。