在RMarkdown`output =“html_document”中使用额外的Latex包用于数学表达式

问题描述 投票:2回答:1

我知道如何使用额外的Latex-packages从.Rmd文件输出pdf格式

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

在YAML标题中。

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

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

使用额外的Latex-Packages也可能对output: html_document感兴趣 - 特别是在数学表达式中(MWE如下)

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

## Use "Defined by" Symbol

$$sin(x) \coloneqq \frac{opposite}{hypothenuse}$$
r-markdown knitr mathjax
1个回答
3
投票

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

可以使用\coloneqq重新创建简单的命令,例如\newcommand。最简单的方法是通过include-before选项添加这些。使用您的MWE和数学元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输出。

替代方案

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

© www.soinside.com 2019 - 2024. All rights reserved.