gpt4 book ai didi

rstudio - 如何通过 Pandoc 和 Knit 从 Rmarkdown 访问 MathJax 扩展(如 siunitx)?

转载 作者:行者123 更新时间:2023-12-02 10:25:29 27 4
gpt4 key购买 nike

Rmarkdown 合作在Rstudio ,使用pandocknitr ,我的目标是通过 LaTeX 输出 PDF 和 HTML 输出 MathJax 。我想使用一些 MathJax可用的扩展,以便为 PDF 目标提供更丰富的 LaTeX。具体来说,我正在尝试使用 siunitx现在扩展,尽管我也对其他扩展感兴趣(例如 physics )。

使用siunitx与 LaTeX 一起用于 PDF 输出工作得很好,但我很难让它与 HTML 输出一起工作。

这里是一个 Rmarkdown 文件示例:

---
title: "siunitx test"
author: "chriss"
date: "June 13, 2017"
output:
html_document:
mathjax: https://cdn.rawgit.com/mathjax/MathJax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML
number_sections: yes
pdf_document:
keep_tex: yes
latex_engine: xelatex
number_sections: yes
header-includes: \usepackage{siunitx}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# The Problem

I would like to be able to use `siunitx` latex macros from `Rmarkdown`,
targetting PDF output via latex and html with MathJax. It should get me proper
formatting of things like $\SI{120}{\W\per\square\m}$ and $\SI{0.8}{\A\per\W}$,
as long as I put them in a latex math environment, so that MathJax picks them
up.

The PDF output is OK when I add the `header-includes: \usepackage{siunitx}` to
the `YAML` header, but how can I access the MathJax `siunitx` extension via the
knitr -> pandoc -> mathjax/html route?

Check: is MathJax working in general: $\frac{1}{r^2}$

这对 PDF 来说很好,但是 $\SI{}{}$逐字输出并在 HTML 输出中和 RStudio 中以红色突出显示。我有pandoc获取MathJax来自rawgit.org ,因为默认为 cdn.mathjax.org即将不复存在,而且似乎不再有 Contrib带有扩展名的路径。

我尝试添加 MathJax$\require{siunitx}$siunitx 的路径有变化延长,无济于事。这会导致 HTML 查找 siunitx扩展名,但显然在错误的地方:https://cdn.rawgit.com/mathjax/MathJax/2.7.1/extensions/TeX/siunitx.js?V=2.7.1 ,这是 404 .

如果我删除 \require{}并删除输出 HTML 文件中加载 MathJax 的部分动态(标记为 <!-- dynamically load mathjax for compatibility with self-contained --> ),并手动添加:

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]},
errorSettings: {message: undefined},
TeX: { extensions: ["[burnpanck]/siunitx/unpacked/siunitx.js"] }
};
MathJax.Ajax.config.path['burnpanck'] =
'https://rawgit.com/burnpanck/MathJax-third-party-extensions/master';
</script>
<script type="text/javascript"
src="https://cdn.rawgit.com/mathjax/MathJax/2.7.1/latest.js?config=TeX-AMS-
MML_HTMLorMML"></script>

到 HTML 文件的 header ,然后它会短暂弹出有关 siunitx.js 的某些问题的投诉。但会产生正确的输出(这是 siunitx MathJax 扩展示例中 header 的修改版本,来自 here )

这表明我可以修改 pandoc 的 HTML 模板反射(reflect)这些变化,事情基本上就可以了。

但是,仍然存在以下问题:

  • 以这种方式更改 HTML 模板是修复 HTML 输出的正确方法吗?这些是现在打算使用的 URL cdn.mathjax.org正在下降,或者我应该使用更好的吗?
  • 为什么我仍然收到有关 siunitx.js 的警告?
  • 需要做什么才能拥有 Rstudio了解siunitx预览内容?是否已经有一种方法可以启用此功能(例如,说服它使用 siunitx 扩展,假设它是基于 MathJax 构建的),或者这将是一个功能请求..?

确实,如果有一种简单的方法来访问 MathJax 那就太好了开箱即用的扩展,无需编辑模板等麻烦,只需在 Rstudio 中进行适当处理即可图形用户界面。我可以想象可能有Rstudio可以从额外功能中受益但不想/无法跳过这些障碍来访问它的用户。

更新加载有关 siunitx.js 的“工作”HTML 时看到的警告消息似乎是当前版本 siunitx.js 的普遍问题,由于 MathJax CDN 的更改,请参阅此处提出的问题:https://github.com/burnpanck/MathJax-third-party-extensions/issues/5

最佳答案

我正在使用includes in_header来解决这个问题。

---
title: "doku1"
output:
html_document:
includes:
in_header: header.html
pdf_document:
keep_tex: yes
latex_engine: pdflatex
number_sections: no
header-includes: \usepackage{mhchem, siunitx}
---

header.html 看起来像这样

<script type="text/x-mathjax-config">
MathJax.Ajax.config.path["mhchem"] = "https://cdnjs.cloudflare.com/ajax/libs/mathjax-mhchem/3.3.2";
MathJax.Ajax.config.path['myExt'] = 'https://rawgit.com/burnpanck/MathJax-third-party-extensions/master';
MathJax.Hub.Config({
TeX: { extensions: ["AMSmath.js","AMSsymbols.js","[myExt]/siunitx/unpacked/siunitx.js","[mhchem]/mhchem.js", "color.js"] }
});
</script>

它可以工作,但是相当慢。

约翰

关于rstudio - 如何通过 Pandoc 和 Knit 从 Rmarkdown 访问 MathJax 扩展(如 siunitx)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44521381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com