找回密码
 快速注册
搜索
查看: 75|回复: 4

[MathML]mlabeledtr默认行为是将第一个mtd子元素设为display:none

[复制链接]

3147

主题

8381

回帖

6万

积分

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

积分
65357
QQ

显示全部楼层

hbghlyj 发表于 2022-5-7 16:06 |阅读模式
MathJax可以将\tag{⋯}转换为公式编号:
MathJax.tex2mml('a+b\\tag1')
输出
"<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\">
  <mtable displaystyle=\"true\">
    <mlabeledtr>
      <mtd id=\"mjx-eqn:1\">
        <mtext>(1)</mtext>
      </mtd>
      <mtd>
        <mi>a</mi>
        <mo>+</mo>
        <mi>b</mi>
      </mtd>
    </mlabeledtr>
  </mtable>
</math>"
但是在Firefox中,mlabeledtr没有显示.
后来我安装了presentation mathml polyfill插件(开发者:Frédéric Wang, David carlisle是w3c的mathml core的文档的editor,文档中写道“Editors:   David Carlisle (NAG)    Frédéric Wang (Igalia)”)

3147

主题

8381

回帖

6万

积分

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

积分
65357
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-5-7 16:11
在“关于此扩展”中写道“This add-on adds support for advanced MathML features like equation labeling or elementary math that are not implemented natively. For the latter, it relies on a XSLT stylesheet written by David Carlisle.”(这个附加组件增加了对高级 MathML 功能的支持,例如方程标签或未原生实现的初等数学。 对于后者,它依赖于 David Carlisle 编写的 XSLT 样式表。)它说“后者”应该是“elementary math”,是依赖一个XSLT stylesheet,但是“前者”方程标签,它没有说怎么实现的.......
这个扩展的GitHub页面:github.com/fred-wang/webextension-presentation-mathml-polyfill
这里有一个讨论github.com/w3c/mathml/issues/72
插件包含三部分:
elementary-math.js
mfenced.js
mlabeledtr.js

3147

主题

8381

回帖

6万

积分

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

积分
65357
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-5-7 16:11
下面是一个测试:(第一行是带编号的行.第一个mtd也就是那个X被视为编号) X Y Z W P Q R S T 代码是
  1. <math>
  2. <mtable>
  3. <mlabeledtr>
  4. <mtd>
  5. <mn>X</mn>
  6. </mtd>
  7. <mtd>
  8. <mi>Y</mi>
  9. </mtd>
  10. <mtd>
  11. <mi>Z</mi>
  12. </mtd>
  13. <mtd>
  14. <mn>W</mn>
  15. </mtd>
  16. </mlabeledtr>
  17. <mtr>
  18. <mtd>
  19. <mi>P</mi>
  20. </mtd>
  21. <mtd>
  22. <mi>Q</mi>
  23. </mtd>
  24. <mtd>
  25. <mi>R</mi>
  26. </mtd>
  27. <mtd>
  28. <mi>S</mi>
  29. </mtd>
  30. <mtd>
  31. <mi>T</mi>
  32. </mtd>
  33. </mtr>
  34. </mtable>
  35. </math>
复制代码
使用了上面的插件以后,代码变为
  1. <mtable>
  2. <mtr>
  3. <mtd style="visibility: hidden">
  4. <mn>X</mn>
  5. </mtd>
  6. <mtd>
  7. <mi>Y</mi>
  8. </mtd>
  9. <mtd>
  10. <mi>Z</mi>
  11. </mtd>
  12. <mtd>
  13. <mn>W</mn>
  14. </mtd>
  15. <mtd>
  16. <mn>X</mn>
  17. </mtd></mtr>
  18. <mtr><mtd></mtd>
  19. <mtd>
  20. <mi>P</mi>
  21. </mtd>
  22. <mtd>
  23. <mi>Q</mi>
  24. </mtd>
  25. <mtd>
  26. <mi>R</mi>
  27. </mtd>
  28. <mtd>
  29. <mi>S</mi>
  30. </mtd>
  31. <mtd>
  32. <mi>T</mi>
  33. </mtd>
  34. <mtd></mtd></mtr>
  35. </mtable>
复制代码
未使用插件时,那个X不会显示,那个Y仍然与下面的P对齐.使用插件后截图:

3147

主题

8381

回帖

6万

积分

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

积分
65357
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-5-7 16:19
插件的源代码好像只是把mlabeledtr转换成mtable并且把编号放在一个后面的mtd里?
并且在公式前面添加了空单元格以保持与带标签的行的正确对齐。
把mtable的width设为100%就可以编号居右了

3147

主题

8381

回帖

6万

积分

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

积分
65357
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-5-9 02:04
Gecko-specific notes

Starting with Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6) labels are hidden by default (mlabeledtr > mtd:first-child {display: none}) and will longer break the table rendering completely (see bug 356870). For the actual implementation of this element see bug 689641.



MathML参考资料
[1] mathml.igalia.com/
[2] mathml-refresh.github.io/
[3] w3c.github.io/mathml-core/

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

GMT+8, 2025-3-4 19:40

Powered by Discuz!

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