【问题标题】:HTML tags in Rmarkdown to word documentRmarkdown中的HTML标签到word文档
【发布时间】:2020-10-01 09:16:24
【问题描述】:

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

例如:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

在呈现为 html_document 时完美运行,但在呈现为 word_document 时效果不佳。

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

【问题讨论】:

  • 据我所知,仅使用 HTML 标签是不可能的。 HTML 标签在呈现为 HTML 时起作用的原因是 HTML 代码没有被 rmarkdown、knitr 或 pandoc 触及,而是简单地作为文本传递给最终的 HTML 文档。在 HTML 的情况下,浏览器知道如何处理这个“文本”。但在 Word 或 Latex 中,它只是将按原样显示的文本。如果您的最终目标只是单词输出,请查看officedown 包,它为 rmarkdown 添加了一些额外的单词功能。

标签: r r-markdown knitr pandoc


【解决方案1】:

好的,我们开始吧:

---
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 格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2015-07-26
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多