使用MCP优化 MathJax 数学环境中文发虚发淡
在整理 MathJax 公式样式时,我发现数学环境里的中文(例如 align 里写的“求/设/及”)看起来会偏淡、边缘发虚、不如正文清晰。本文记录用 MCP 浏览器调试定位到 MathJax 的中文渲染节点,并通过 source/custom/math/math.css 为数学环境中文单独设置 CJK 字体栈与字重,从而提升清晰度。
问题复现
复现文章:source/_posts/math/数学题.md(Front-matter 已开启 math: true)。
在页面中,中文直接写在数学环境里,例如:
1 | |
现象是:
- 正文里的中文显示正常
- 公式里的中文(“求/设/及”等)明显更细、更淡,观感像“糊了一层”
用 MCP 在浏览器里定位
打开本地预览(示例):
http://localhost:4000/2025/12/18/math/数学题/
在 DevTools(通过 MCP)里选中公式中的中文字符后,可以看到它并不是普通的 span,而是 MathJax 生成的节点:
- 外层:
<mjx-container jax="CHTML" ...>(说明用的是 MathJax v3 的 CHTML 输出) - 中文:多出现在
mjx-utext(MathJax 的“文本”节点)
继续看 Computed 样式,会发现中文节点最终落在了“公式字体栈”的回退路径上:
mjx-container的font-family以数学字体为主(如 STIX/Cambria/Times)- 当遇到中文字符时会 fallback 到系统 CJK 字体,但字重/渲染策略与正文不同,导致观感偏淡
解决方案:数学环境中文单独走 CJK 字体栈
思路是:只针对数学环境的中文节点(mjx-utext)覆盖字体与字重,不去全局替换数学公式本身的拉丁/符号字体。
我在 source/custom/math/math.css 增加了两组变量,并添加一条针对性规则:
--math-cjk-font-family:中文字体栈(优先系统常见 CJK 字体)--math-cjk-font-weight:中文在数学环境中的字重(默认 500)
核心 CSS(节选):
1 | |
这样做的好处:
- 公式符号仍使用数学字体(不影响公式风格)
- 仅把数学环境里的中文拉回到更清晰的 CJK 字体与更合适的字重
验证
修改后:
- 浏览器对页面
Ctrl+Shift+R强制刷新 - 再次选中公式中的“求/设/及”,确认
mjx-utext的 Computed 中:font-family命中PingFang SC / Microsoft YaHei / Noto Sans SC ...font-weight为500
主观观感上,数学环境里的中文清晰度与正文更接近,“发虚/发淡”明显改善。
可调参数
如果你觉得还不够“黑”,可以把:
--math-cjk-font-weight: 500;改成600
如果你希望全设备一致(不同系统字体差异会影响观感),可以考虑后续引入一款统一的 CJK 字体(自托管或 CDN),再把它放到 --math-cjk-font-family 的最前面。
相关文件
source/custom/math/math.css_config.fluid.yml(custom_css引入/custom/math/math.css)source/_posts/math/数学题.md
使用MCP优化 MathJax 数学环境中文发虚发淡
http://sakura.lsk.icu/2025/12/20/优化日记/4.mathjax-cjk-text-clarity-fix/