找回密码
 快速注册
搜索
楼主: kuing

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

[复制链接]

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

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

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

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

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2024-12-10 16:11
本帖最后由 kuing 于 2024-12-10 16:18 编辑
kuing 发表于 2024-11-30 17:14
我突然有个想法,如果给 mathjax 公式的元素 <mjx-container> 加个 title 参数,内容为公式代码,这样鼠标 ...


发现这样搞之后还是有点不好:
对于一些很长的行间公式,它占的位置很大*,鼠标非常容易不觉意地停留在其上,然后显示的 title 就阻挡到公式。
这样就影响到正常阅读体验。😥
__________
*行间公式的区域是整行,就算实际公式很窄,两边的空白也包括在内。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-12-10 17:25
kuing 发表于 2024-12-10 16:11
发现这样搞之后还是有点不好:
对于一些很长的行间公式,它占的位置很大*,鼠标非常容易不觉意地停留在其 ...

那可以判断公式的长度吧,比如100个字符以内的就加title,太长的就不加。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 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); }
  }

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

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

怀疑也与加了这段代码有关。

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

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2024-12-11 17:44
hbghlyj 发表于 2024-12-11 17:28
用Firefox访问,没出现这现象
用Chrome Version 131.0.6778.139 和 Version 131.0.6778.140 (最新版本) 访 ...

我把那些代码去掉了,不加 title 了,看看是否还有这现象?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2024-12-11 17:52
hbghlyj 发表于 2024-12-11 17:44
仍然有。应该是Chrome的问题?发到了 https://github.com/mathjax/MathJax/issues/3315 问问 ...

凡是有 details 的帖子都是这样吗?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-12-13 17:05
kuing 发表于 2024-12-11 09:52
凡是有 details 的帖子都是这样吗?

issues.chromium.org/issues/383593255
下面有一些评论:
似乎 <details> 所基于的内容中存在一些潜在的错误,而这些错误在这里暴露出来了。具体来说,如果我关闭 ::details-content 伪元素上的 display: block 规则(如果您在 devtools 中打开“显示用户代理影子 DOM”设置,您可以在检查器中看到它),隐藏的内容就会恢复 - 而如果我将其重新打开,内容就会保留下来!旧代码中存在这种切换,但现在不再存在了。因此,似乎有些东西无法响应内容可见性更改而显示该文本,但旧的(但不再存在)显示更改掩盖了这个错误。

为什么插入的元素(在我的示例中为 0x27640050fe20)被重建,但它们之间的插入文本(在我的示例中为 0x276400510470)却没有被重建?

最直接的原因是,在我们打开details元素后,我们调用 HTMLSlotElement::RebuildDistributedChildrenLayoutTrees。对于元素,此时 NeedsRebuildLayoutTree() 为真,因为 NeedsReattachLayoutTree() 为真。这是因为之前在 HTMLSlotElement::RecalcStyleForSlotChildren 中,change.TraverseChild() 为真,因为 Node::GetStyleChangeType 为 kLocalStyleChange。另一方面,对于文本节点,在 RebuildDistributedChildrenLayoutTrees 中,NeedsReattachLayoutTree() 为 false,而在之前的 RecalcStyleForSlotChildren 中,我们没有重新计算文本节点的样式,因为 change.TraverseChild() 为 false。

元素中存在的 kLocalStyleChange 早在打开details元素之前就一直存在,没有改变。为什么文本节点中没有它?因为在 HTMLSlotElement::DetachDisplayLockedAssignedNodesLayoutTreeIfNeeded 中,我们分离了文本节点的布局树,但没有分离元素。这是因为 GetForceReattachLayoutTree() 对于文本节点为真,但对于元素为假,这反过来又回到了 Node::SetForceReattachLayoutTree 中的不同行为(在 HTMLSlotElement::UpdateFlatTreeNodeDataForAssignedNodes 内部对两者调用),但它在元素上提前退出而没有设置标志。

不过,我不确定这些是否有用。可能是我上面描述的某些部分出了问题——但也可能是由于我上面描述的一系列事件,元素案例中恰好掩盖了一些额外的无效情况。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2024-12-13 17:07
hbghlyj 发表于 2024-12-13 17:05
https://issues.chromium.org/issues/383593255
下面有一些评论:
似乎 <details> 所基于的内容中存在一些 ...

看不懂……

反正现在确定不是加 title 那段代码的原因,那我就加回去了啊

点评

是的  发表于 2024-12-13 17:09

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:13

Powered by Discuz!

× 快速回复 返回顶部 返回列表