首页
/ MathJax 2.7中实现粗体非斜体希腊字母的解决方案

MathJax 2.7中实现粗体非斜体希腊字母的解决方案

2025-05-22 10:15:36作者:滕妙奇

在数学公式排版中,有时需要显示粗体但非斜体的希腊字母。对于使用MathJax 2.7版本的用户,特别是通过bookdown生成HTML文档的用户,这可能会遇到一些技术挑战。本文将详细介绍如何在MathJax 2.7中实现这一效果。

问题背景

MathJax 2.7版本的默认TeX字体不包含直立的希腊字母(无论是粗体还是普通样式)。而较新版本的MathJax虽然支持\symrm命令,但由于bookdown对MathJax新版本的支持不完善,用户不得不继续使用2.7版本。

解决方案

使用STIX字体

STIX字体包含了所需的字符,可以满足我们的需求。由于MathJax 2.7的CommonHTML输出只支持MathJax-TeX字体,我们需要使用HTML-CSS或SVG输出渲染器。

配置代码示例

以下是一个完整的MathJax配置方案,它定义了一个自定义的\symbf命令来实现粗体直立希腊字母:

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  "HTML-CSS": {
    fonts: ["STIX-Web"]
  },
  SVG: {
    font: "STIX-Web"
  },
  TeX: {Augment: {
    Definitions: {macros: {symbf: 'Symbf'}},
    Parse: {prototype: {
      csMathchar0mi: function (name, mchar) {
        var MML = MathJax.ElementJax.mml;
        var def = {};
        if (Array.isArray(mchar)) {def = mchar[1]; mchar = mchar[0]}
        this.Push(this.mmlToken(MML.mi(MML.entity("#x"+mchar)).With(def)));
      },
      Symbf: function (name) {
        var MML = MathJax.ElementJax.mml;
        var math = this.ParseArg(name);
        this.Push(MML.mstyle(math).With({mathvariant: "bold"}));
      }
    }}
  }}
});
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.9/unpacked/MathJax.js?config=TeX-AMS_SVG"></script>

代码解析

  1. 我们首先配置MathJax使用STIX-Web字体
  2. 重写了csMathchar0mi函数,移除了默认的斜体样式设置
  3. 定义了一个新的Symbf宏命令,用于应用粗体样式
  4. 最后加载MathJax库,使用SVG渲染器

输出渲染器选择

对于bookdown用户,需要注意输出渲染器的选择:

  1. 使用SVG输出:配置为TeX-AMS_SVG
  2. 使用HTML-CSS输出:配置为TeX-AMS_HTML

在bookdown中,可能需要修改默认的MathJax配置,将TeX-MML-AM_CHTML改为TeX-AMS_HTML,或者直接指定MathJax的URL为包含正确配置的版本。

注意事项

  1. 此解决方案可能会影响其他数学符号的显示,建议在实施前进行全面测试
  2. 对于复杂的文档,可能需要调整其他相关配置
  3. 考虑到性能因素,SVG渲染器通常比HTML-CSS渲染器更高效

通过以上方法,用户可以在MathJax 2.7中实现粗体非斜体希腊字母的显示,满足特定的排版需求。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
144
1.93 K
kernelkernel
deepin linux kernel
C
22
6
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
274
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
189
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
930
553
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
423
392
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
75
66
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.11 K
0
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
64
511