如何在Quarto的MathJax HTML输出中使用CTAN的statmath扩展?
问题
在Quarto中使用CTAN的statmath包时,PDF输出能正常渲染\indist宏,但采用MathJax渲染的HTML输出无法识别该宏,显示异常。示例代码如下:
--- title: "Quarto Math" format: pdf: pdf-engine: xelatex include-in-header: text: | \usepackage{statmath} html: html-math-method: mathjax include-in-header: - text: | <script> window.MathJax = { loader: { load: ['[tex]/statmath'] }, tex: { packages: {'[+]': ['statmath']} } }; </script> --- $$X_n \indist X$$
解决方法
核心问题是MathJax默认扩展库中并没有内置statmath包,因此你之前尝试加载[tex]/statmath的配置无效。可以通过以下两种方式解决:
方法一:手动定义\indist宏
直接在HTML配置中给MathJax添加宏定义,替换原有的statmath加载代码,确保宏的实现和statmath包一致:
--- title: "Quarto Math" format: pdf: pdf-engine: xelatex include-in-header: text: | \usepackage{statmath} html: html-math-method: mathjax include-in-header: - text: | <script> window.MathJax = { tex: { macros: { indist: "\\stackrel{\\text{ind}}{\\longrightarrow}" } } }; </script> --- $$X_n \indist X$$
方法二:自定义MathJax扩展包(适配多宏场景)
如果需要使用statmath包中的多个宏,可以编写自定义扩展:
- 在项目目录下创建
statmath-extension.js文件,内容如下:
MathJax.Extension["tex/statmath"] = { version: "1.0", init: function (MathJax) { var TEX = MathJax.InputJax.TeX; TEX.Definitions.Add({ macros: { indist: "\\stackrel{\\text{ind}}{\\longrightarrow}", // 按需添加statmath包中的其他宏定义 } }, null, true); } }; MathJax.Ajax.loadComplete("[tex]/statmath.js");
- 修改Quarto配置,加载自定义扩展:
--- title: "Quarto Math" format: pdf: pdf-engine: xelatex include-in-header: text: | \usepackage{statmath} html: html-math-method: mathjax include-in-header: - text: | <script> window.MathJax = { loader: { paths: { custom: "." }, load: ['custom/statmath-extension'] }, tex: { packages: {'[+]': ['statmath']} } }; </script> --- $$X_n \indist X$$
内容的提问来源于stack exchange,提问作者Doug Ezra Morrison
相关产品推荐
相关产品推荐

