Forgot password?
 Register account
Author: kuing

今起用新的 MathJax 3 支持数学公式

[Copy link]

0

Threads

412

Posts

6093

Credits

Credits
6093
QQ

Show all posts

爪机专用 Posted 2024-12-10 08:08
hbghlyj 发表于 2024-12-10 07:11
这样会运行两次MathJax:初始化时运行一次,放在最后MathJax.typesetPromise()又运行一次。

https://doc ...
ready 与 pageReady 的区别是什么呢?
I am majia of kuing

0

Threads

412

Posts

6093

Credits

Credits
6093
QQ

Show all posts

爪机专用 Posted 2024-12-10 08:10
hbghlyj 发表于 2024-12-10 07:13
第12行是多余的吧。

第6行已 MathJax.typesetPromise() 然后加了 title,为什么要在第12行再次MathJax.t ...
window.MathJax = {
  startup: {
    ready: () => {
      MathJax.startup.defaultReady();
      MathJax.startup.promise.then(() => {
        var mjxes = document.getElementsByTagName('mjx-container');
        for(let mjx of mjxes){
                let tex = findTeX(mjx);
                mjx.setAttribute('title', tex);
        }
      });
    }
  }
};
这样写吗?
I am majia of kuing

3152

Threads

7905

Posts

610K

Credits

Credits
64068
QQ

Show all posts

hbghlyj Posted 2024-12-10 08:55
爪机专用 发表于 2024-12-10 00:08
ready 与 pageReady 的区别是什么呢?
ready 在 pageReady 之前,见:docs.mathjax.org/en/latest/options/startup/st … p.html#startup-ready

如果您不需要修改启动模块创建的对象,那么替换 pageReady() 是更好的选择。

3152

Threads

7905

Posts

610K

Credits

Credits
64068
QQ

Show all posts

hbghlyj Posted 2024-12-10 09:05
爪机专用 发表于 2024-12-7 12:35
O,搜索发现代码出自这:groups.google.com/g/mathjax-users/c/x5Z7JBElOas/m/Z4DYXY_nEQAJ
上面的需要在MathJax运行后多次调用findTeX,相当于循环了两次。
链接中的第二种办法“添加一个 renderAction”比上面的更好,这样当每个数学公式插入到页面时会将原始 TeX 添加为 mjx-container 的 title 属性,只循环了一次就完成。
  1. MathJax = {
  2.   options: {
  3.     renderActions: {
  4.       addTeX: [151,
  5.         (doc) => {for (const math of doc.math) MathJax.config.addTeX(math, doc)},
  6.         (math, doc) => MathJax.config.addTeX(math, doc)
  7.       ]
  8.     }
  9.   },
  10.   addTeX(math, doc) {
  11.     doc.adaptor.setAttribute(math.typesetRoot, 'title', math.math);
  12.   }
  13. };
Copy the Code

3152

Threads

7905

Posts

610K

Credits

Credits
64068
QQ

Show all posts

hbghlyj Posted 2024-12-10 09:09
hbghlyj 发表于 2024-12-10 01:05
链接中的第二种办法“添加一个 renderAction”比上面的更好
renderAction在文档中:https://docs.mathjax.org/en/late ... ument-renderactions
示例:How can I manual modify mathjax renderActions with SVG ...

411

Threads

1619

Posts

110K

Credits

Credits
11813

Show all posts

abababa Posted 2024-12-10 09:48
kuing 发表于 2024-12-9 15:26
将那段代码放入了 zdy3pc.js 里,也就是只对 PC 版的帖子内容页有效,加载该 js 的位置在本页所有楼层之 ...
我也不懂这些,昨天问了maven,他说只加title的话,可以像下面这样写(原话是“监听 dom 载入结束”):
  1. document.addEventListener('DOMContentLoaded', () => {
  2.         let mjxes = document.getElementsByTagName('mjx-container');
  3.         for(let mjx of mjxes) {
  4.                 let tex = findTeX(mjx);
  5.                 mjx.setAttribute('title', tex);
  6.         }
  7. });
Copy the Code
然后还有草稿本里的不加title的问题,我觉得写完那些,应该已经做完了加title了,然后草稿本里应该是自己新写的,显示的是后出现的mjx-container,应该不受影响。


3152

Threads

7905

Posts

610K

Credits

Credits
64068
QQ

Show all posts

hbghlyj Posted 2024-12-10 10:04
kuing 发表于 2024-12-9 07:26
奇怪的是,现在是有时行,有时不行。
放在MathJax配置pageReady中就可以固定执行先后顺序

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

 Author| kuing Posted 2024-12-10 12:14
过于专业,有点难懂,晚点再试,吃个饭先😊

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

 Author| kuing Posted 2024-12-10 14:12
Last edited by kuing 2024-12-10 14:45撤销了昨天 zdy3pc.js 的改动。
改为使用 137# 说的 renderAction 的方法,确实是一步到位,没有顺序问题。
现在无论首页、主题列表、帖子内容页,甚至草稿本即时生成的公式,全都有 title,暂时没什么问题。
(看网页源码可查看当前 mathjax 配置)

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

 Author| kuing Posted 2024-12-10 16:11
Last edited by kuing 2024-12-10 16:18
kuing 发表于 2024-11-30 17:14
我突然有个想法,如果给 mathjax 公式的元素 <mjx-container> 加个 title 参数,内容为公式代码,这样鼠标 ...
发现这样搞之后还是有点不好:
对于一些很长的行间公式,它占的位置很大*,鼠标非常容易不觉意地停留在其上,然后显示的 title 就阻挡到公式。
这样就影响到正常阅读体验。😥
__________
*行间公式的区域是整行,就算实际公式很窄,两边的空白也包括在内。

411

Threads

1619

Posts

110K

Credits

Credits
11813

Show all posts

abababa Posted 2024-12-10 17:25
kuing 发表于 2024-12-10 16:11
发现这样搞之后还是有点不好:
对于一些很长的行间公式,它占的位置很大*,鼠标非常容易不觉意地停留在其 ...
那可以判断公式的长度吧,比如100个字符以内的就加title,太长的就不加。

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

 Author| kuing Posted 2024-12-10 18:01
abababa 发表于 2024-12-10 17:25
那可以判断公式的长度吧,比如100个字符以内的就加title,太长的就不加。
😅行是行,就是将 addTeX 那里改成
  addTeX(math, doc) {
    if(math.math.length < 100) { doc.adaptor.setAttribute(math.typesetRoot, 'title', math.math); }
  }

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

 Author| kuing Posted 2024-12-11 16:53
hbghlyj 发表于 2024-12-11 08:56
刚才看这帖时出现公式不正常显示:

怀疑也与加了这段代码有关。
点进去几次,也刷新了几次,都没出现这现象😳
下次你出现的时候查看一下元素,看看那些文字去哪了,按道理这应该不会影响到公式以外的文本的呀😳

Mobile version|Discuz Math Forum

2025-6-4 17:38 GMT+8

Powered by Discuz!

× Quick Reply To Top Edit