在RMarkdown`output =“ html_document”`中为数学表达式使用其他Latex包

时间:2018-09-06 10:01:09

标签: r-markdown knitr mathjax

我知道如何使用

从.Rmd文件的pdf格式输出中使用附加的Latex软件包。
---
header-includes:
   - \usepackage{mathtools}
---

在YAML标头中。

但是,如果有人指定output: html_document,这当然不起作用。

---
output: html_document
header-includes:
   - \usepackage{mathtools}
---

output: html_document也可能需要使用附加的Latex-Packages,尤其是在数学表达式中(见下文MWE)

---
title: "MWE"
output: html_document
header-includes:
   - \usepackage{mathtools}
---

## Use "Defined by" Symbol

$$sin(x) \coloneqq \frac{opposite}{hypothenuse}$$

1 个答案:

答案 0 :(得分:2)

MathJax提供了许多extensions,并且还有第三方扩展。如果无法通过这种方式获得所需的软件包,那么事情会变得很困难。

可以使用\coloneqq重新创建简单的命令,例如\newcommand。最简单的方法是通过include-before选项添加它们。将您的MWE与数学Meta SE中的solution结合使用,您将获得:

---
title: "MWE"
output:
  html_document: default
include-before:
- '$\newcommand{\coloneqq}{\mathrel{=}}$'
---

## Use "Defined by" Symbol

$$sin(x) \coloneqq \frac{opposite}{hypothenuse}$$

输出:

Screenshot of MWE exported as HTML

背景

RMarkdown是围绕pandoc构建的,它执行大多数格式转换。 Pandoc通过LaTeX创建PDF(默认情况下),并将仅包含源中提供的所有原始LaTeX命令。看到\usepackage{mathtools}时,不分析该软件包,但仅将命令逐字添加到中间LaTeX中。但是,在导出为HTML时,通过LaTeX命令没有任何意义,因此任何此类命令都将从输出中省略,因此文档中的任何\usepackage都不会影响HTML输出。 / p>

替代解决方案

如果您使用的是非常复杂的LaTeX软件包,则可以考虑设置一个复杂的管道以继续使用它:例如,可以使用pandoc filter提取所有方程式,并将每个方程式编译为单独的文档,然后将生成的PDF转换为SVG。最后,该SVG然后可以包含在HTML输出中。这是不平凡的,可能不值得付出。建议对include TikZ pictures使用类似的方法。