在Rmarkdown中为html和pdf格式排列的公式

时间:2016-02-15 15:56:30

标签: html latex r-markdown pandoc

我喜欢编写可以拥有html输出和pdf输出的rmd文件。在我的大多数用例中都有效。只是对齐公式不起作用,因为我需要html中的exta美元符号:

以下适用于HTML:

---
title: "Test"
author: "RW"
date: "Monday, February 15, 2016"
output: html_document
---

Testing formulae

$$
\begin{align} 
              y &= x \\
              z &= a
\end{align}
$$

我必须删除$才能使其在pdf中运行(这很自然,因为这对乳胶而言太过分了):

---
title: "Test"
author: "RW"
date: "Monday, February 15, 2016"
output: pdf_document
---

Testing formulae

\begin{align} 
              y &= x \\
              z &= a
\end{align}

有没有办法让它在html和pdf中运行?

1 个答案:

答案 0 :(得分:1)

您可以使用自定义pandoc filter执行此操作。这个删除了乳胶输出的数学环境,只有它使用align。将脚本保存为math.py在路径中或与Rmd文件相同的目录中

#!/usr/bin/env python

from pandocfilters import toJSONFilter, RawInline, stringify
import re

align = re.compile("\\\\begin{align}")


def math(k, v, f, meta):
    if k == 'Math' and f == 'latex' and re.search(align, v[1]):
        return RawInline('latex', v[1])


if __name__ == "__main__":
    toJSONFilter(math)

并将其添加到您的yaml前端:

---
title: "Test"
author: "RW"
date: "Monday, February 15, 2016"
output: 
  pdf_document:
    pandoc_args:
    - --filter
    - definition_to_bold.py
---

Testing formulae

$$
\begin{align} 
              y &= x \\
              z &= a
\end{align}
$$

现在,用$$align环境编写的所有方程式都可用于乳胶。

您将需要python和pandocfilters库(pip install pandocfilters)。