从RMarkdown编译至HTML时如何添加自定义LaTeX命令定义
你遇到的问题本质是PDF和HTML输出的公式渲染逻辑差异导致的:
- 输出PDF时,所有头部的TeX命令会直接交给LaTeX编译器处理,所以两种尝试都能生效
- 输出HTML时,公式由MathJax在浏览器端渲染,MathJax只会处理被包裹在数学环境(
$$/\(等)中的内容,直接插入HTML头部的裸TeX命令既不会被MathJax识别,还会被浏览器当成普通文本显示
以下两种可行方案均支持多Rmd文件复用自定义命令,无需修改原有Rmd的正文内容:
方案1:MathJax宏配置(推荐)
这种方法性能最优,不会产生多余的隐藏元素:
- 新建公共配置文件
mathjax-common.html,内容如下:
<script> MathJax = { tex: { macros: { // 所有自定义命令按「命令名: 对应展开内容」格式填写,注意反斜杠要转义为两个反斜杠 bmat: '\\begin{bmatrix}', emat: '\\end{bmatrix}' } } } </script>
- 编译时直接引用该配置文件即可,命令如下:
Rscript -e "rmarkdown::render('test.rmd',quiet=TRUE,output_format=rmarkdown::html_document(pandoc_args=c('--include-in-header=/full/path/to/mathjax-common.html')))"
方案2:隐藏数学环境包裹
如果你不想修改原有LaTeX命令的写法,可以直接用隐藏的行内公式环境包裹所有命令:
- 新建公共配置文件
latex-preamble.html,内容如下:
<span style="display:none;"> \( \newcommand{\bmat}{\begin{bmatrix}} \newcommand{\emat}{\end{bmatrix}} \) </span>
- 编译时同样用
--include-in-header参数引用该文件即可生效。
内容的提问来源于stack exchange,提问作者CloudIcarus
相关产品推荐
相关产品推荐

