用R Markdown将方程式渲染为图像并将其包含在Word / PowerPoint输出文档中

时间:2018-09-07 11:49:09

标签: r r-markdown

我正在交叉发布此from the R Studio community page,因为这有点神秘。

是否可以要求Knitr将R Markdown中的方程式渲染为图像,然后将生成的图像粘贴到最终文档中?我想到的用例克服了在编织到Word / PowerPoint时MSFT公式编辑器的一些缺点。如果方程只是一个图像,那么我可以在MSFT文档中使用LaTeX质量方程,那真是太好了!

我发现最接近的东西是using latex2exp,并放入一个R Code块,该块生成一个实际上是渲染的LaTeX公式的图形。我有点喜欢这种骇客,但是latex2exp有一些局限性。

1 个答案:

答案 0 :(得分:1)

如评论中所述,webtex是一个简单的解决方案。定位docx时,Pandoc的--webtex开关无效。但是,可以使用Lua滤镜达到相同的效果。

local mediabag = require 'pandoc.mediabag'
local utils = require 'pandoc.utils'

local function url_encode(str)
  local encode_char = function(c)
    return ("%%%02X"):format(string.byte(c))
  end
  return str
    :gsub("\n", "\r\n")
    :gsub("([^%w%-%_%.%~])", encode_char)
end

local function webtex_url(formula)
  return 'https://latex.codecogs.com/png.latex?' .. url_encode(formula)
end

function Math(el)
  local filename = utils.sha1(el.text) .. '.png'
  local mime, contents = mediabag.fetch(webtex_url(el.text), '.')
  mediabag.insert(filename, mt, contents)
  local img = pandoc.Image({}, filename)
  return el.mathtype == 'DisplayMath'
    and {pandoc.LineBreak(), img, pandoc.LineBreak()}
    or img
end

将其保存到文件中,然后通过--lua-filter选项将该文件传递给pandoc。它将通过webtex将所有方程式转换为png图像。