[投诉] 希望能够增加对MathML的支持,能够在日志中方便的写公式

  [复制链接]
查看: 6673|回复: 8
发表于 2011-3-18 16:30:31 | 显示全部楼层 |阅读模式
本帖最后由 niuyingli 于 2011-3-18 16:36 编辑


据我所知,目前对MathML支持的公共博客只有www.blogger.com,可惜已经被屏蔽了。有一篇帖子:
http://yusufma.blogspot.com/2008/10/bloggermathml.html
介绍如何在博客里写公式,可是博客必须能够接受javascript。这个帖子是被屏蔽的。原文如下:

=======================================================
2008年10月28日 星期二让blogger支持MathML公式输出 我想在我的blog里显示公式怎么办?我可以把每个公式变成图片文件,然后把公式作为图片显示。我不需要截屏软件,OpenOffice可以很方便的把包含公式的文档转换为包含图片的HTML文件。但是这么做太笨了。更好的办法是用MathML在网页上显示公式。 MathML是XML的一个应用,是W3C推荐使用的网页数学公式显示方案。遗憾的是,目前不是所有的浏览器都支持MathML。Firefox本身包含对MathML的支持,但是你可能需要安装显示数学公式需要的字体。如果你使用Linux,你的发行版很可能包含(甚至已经安装)了该字体,请以mathml为关键词搜索以确定是否已经安装。如果你不幸使用Windows,请到这里按照说明自行安装字体。如果你更不幸使用IE浏览器,那只好自生自灭了。(开个玩笑,请安装MathPlayer插件)。 现在你可以到这里测试一下你的浏览器是不是可以正确显示MathML公式了。能显示,很好。可是,blogger并不能自动支持MathML的显示,因为blogger的网页扩展名都是html,浏览器不会自动按照xml来显示。这个问题可以这么解决:到这里下载一个小javascript文件,把这个文件直接放到你的blogger template文件的head里面,或者放到互联网上某个地方,在template的head里面加入下面一行:<script type="text/javascript" src="javascript文件的链接"></script>这样blogger就可以显示你的MathML公式了。 MathML语法非常复杂,要想直接用MathML写出一个公式并不容易。TtM是个把LaTeX公式转换成MathML代码的小工具。这下就方便多了。把转换好的MathML代码复制到你的blog就可以了。 下面是一个MathML显示公式的例子:
U(r)=A0W0W(z)exp[-ρ2W2(z)]exp[-jkz-jkρ22R(z)+jζ(z)]





<script type="text/javascript" src="javascript文件的链接"></script>
这样blogger就可以显示你的MathML公式了。 MathML语法非常复杂,要想直接用MathML写出一个公式并不容易。TtM是个把LaTeX公式转换成MathML代码的小工具。这下就方便多了。把转换好的MathML代码复制到你的blog就可以了。 下面是一个MathML显示公式的例子:
=======================================================

其实需要能够在博客里写入如下代码:

  1. <script type="text/javascript">
  2. /*
  3. March 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen

  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or (at
  7. your option) any later version.
  8. This program is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  11. (at http://www.gnu.org/copyleft/gpl.html) for more details.
  12. */

  13. function convertMath(node) {// for Gecko
  14.   if (node.nodeType==1) {
  15.     var newnode =
  16.       document.createElementNS("http://www.w3.org/1998/Math/MathML",
  17.         node.nodeName.toLowerCase());
  18.     for(var i=0; i < node.attributes.length; i++)
  19.       newnode.setAttribute(node.attributes[i].nodeName,
  20.         node.attributes[i].nodeValue);
  21.     for (var i=0; i<node.childNodes.length; i++) {
  22.       var st = node.childNodes[i].nodeValue;
  23.       if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n")
  24.         newnode.appendChild(convertMath(node.childNodes[i]));
  25.     }
  26.     return newnode;
  27.   }
  28.   else return node;
  29. }

  30. function convert() {
  31.   var mmlnode = document.getElementsByTagName("math");
  32.   var st,str,node,newnode;
  33.   for (var i=0; i<mmlnode.length; i++)
  34.     if (document.createElementNS!=null)
  35.       mmlnode[i].parentNode.replaceChild(convertMath(mmlnode[i]),mmlnode[i]);
  36.     else { // convert for IE
  37.       str = "";
  38.       node = mmlnode[i];
  39.       while (node.nodeName!="/MATH") {
  40.         st = node.nodeName.toLowerCase();
  41.         if (st=="#text") str += node.nodeValue;
  42.         else {
  43.           str += (st.slice(0,1)=="/" ? "</m:"+st.slice(1) : "<m:"+st);
  44.           if (st.slice(0,1)!="/")
  45.              for(var j=0; j < node.attributes.length; j++)
  46.                if (node.attributes[j].nodeValue!="italic" &&
  47.                  node.attributes[j].nodeValue!="" &&
  48.                  node.attributes[j].nodeValue!="inherit" &&
  49.                  node.attributes[j].nodeValue!=undefined)
  50.                  str += " "+node.attributes[j].nodeName+"="+
  51.                      """+node.attributes[j].nodeValue+""";
  52.           str += ">";
  53.         }
  54.         node = node.nextSibling;
  55.         node.parentNode.removeChild(node.previousSibling);
  56.       }
  57.       str += "</m:math>";
  58.       newnode = document.createElement("span");
  59.       node.parentNode.replaceChild(newnode,node);
  60.       newnode.innerHTML = str;
  61.     }
  62. }

  63. if (document.createElementNS==null) {
  64.   document.write("<object id="mathplayer"\
  65.   classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987"></object>");
  66.   document.write("<?import namespace="m" implementation="#mathplayer"?>");
  67. }
  68. if(typeof window.addEventListener != 'undefined'){
  69.   window.addEventListener('load', convert, false);
  70. }
  71. if(typeof window.attachEvent != 'undefined') {
  72.   window.attachEvent('onload', convert);
  73. }
  74. </script>


  75. <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle displaystyle="true"><mrow><mi>U</mi><mo stretchy="false">(</mo><mi>r</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mrow><mi>A</mi></mrow><mrow><mn>0</mn></mrow></msub><mfrac><mrow><msub><mrow><mi>W</mi></mrow><mrow><mn>0</mn></mrow></msub></mrow><mrow><mi>W</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mi>exp</mi><mrow><mo>[</mo><mo>-</mo><mfrac><mrow><msup><mrow><mi>ρ</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mrow><msup><mrow><mi>W</mi></mrow><mrow><mn>2</mn></mrow></msup><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>]</mo></mrow><mi>exp</mi><mrow><mo>[</mo><mo>-</mo><mi>jkz</mi><mo>-</mo><mi>jk</mi><mfrac><mrow><msup><mrow><mi>ρ</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mrow><mn>2</mn><mi>R</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>+</mo><mi>j</mi><mi>ζ</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo><mo>]</mo></mrow></mrow></mstyle></math>
复制代码


或者
  1. <script type="text/javascript" src="javascript文件的链接"></script>


  2. <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle displaystyle="true"><mrow><mi>U</mi><mo stretchy="false">(</mo><mi>r</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mrow><mi>A</mi></mrow><mrow><mn>0</mn></mrow></msub><mfrac><mrow><msub><mrow><mi>W</mi></mrow><mrow><mn>0</mn></mrow></msub></mrow><mrow><mi>W</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mi>exp</mi><mrow><mo>[</mo><mo>-</mo><mfrac><mrow><msup><mrow><mi>ρ</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mrow><msup><mrow><mi>W</mi></mrow><mrow><mn>2</mn></mrow></msup><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>]</mo></mrow><mi>exp</mi><mrow><mo>[</mo><mo>-</mo><mi>jkz</mi><mo>-</mo><mi>jk</mi><mfrac><mrow><msup><mrow><mi>ρ</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mrow><mn>2</mn><mi>R</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>+</mo><mi>j</mi><mi>ζ</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo><mo>]</mo></mrow></mrow></mstyle></math>
复制代码


其中 src="javascript文件的链接",是将这个脚本放在网上的某个位置,例如:
src="http://www1.chapman.edu/~jipsen/mathml/mathhtml/MathMLinHTMLforFirefoxAndIE.js"

在做笔记的时候,经常需要输入公式。所以希望考虑支持MathML的问题。谢谢!
回复

使用道具 举报

发表于 2011-3-19 05:44:17 | 显示全部楼层
嗯,这个对搞数学的确实很必要,不过这个我先研究一下才能答复你
回复 支持 反对

使用道具 举报

发表于 2011-4-21 13:48:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2011-5-9 14:32:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2011-5-9 21:07:34 | 显示全部楼层
回复 yhhuang 的帖子

印象中这个网站好像可以通过Tex语句直接生成图片公式的吧?——然后粘到博客中?
回复 支持 反对

使用道具 举报

发表于 2011-5-10 01:12:01 | 显示全部楼层
本帖最后由 yhhuang 于 2011-5-9 09:12 编辑

回复 beimu1009 的帖子

通过javascript,直接生成
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-14 14:43:34 | 显示全部楼层
本帖最后由 niuyingli 于 2011-6-2 11:03 编辑

Tex语句直接生成图片公式的方式不好,不方便修改。而且图片在行文中与文字混排的时候不容易对齐。所以还是支持使用MathML或者Mathjax。对于学习和从事科研的人来说,方便的编辑公式真是太重要了!可是寻遍了祖国大江南北各个著名的博客和空间系统,竟没有找到一个支持以上功能的。希望网站开发者能够高瞻远瞩,尽快增加对公式编辑的支持。届时科研博客将会有革命性的变化,我们甚至可以将论文的理论推导过程方便的呈现在网上,也可以在网上讨论公式的推演过程。对我们科研和教育事业将有极大的推动!
回复 支持 反对

使用道具 举报

发表于 2011-7-5 04:50:22 | 显示全部楼层
niuyingli 发表于 2011-5-14 14:43
Tex语句直接生成图片公式的方式不好,不方便修改。而且图片在行文中与文字混排的时候不容易对齐。所以还是 ...

现在我们已经使用了MathJax到博客系统中,谢谢你的好建议呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-5 10:31:25 | 显示全部楼层
阿平 发表于 2011-7-5 04:50
现在我们已经使用了MathJax到博客系统中,谢谢你的好建议呀

十分感谢阿平以及新科学的工作团队!据我所知,目前新科学是国内唯一支持公式的科研交流网站。相信仅凭这点就能够吸引大量的科研工作者、老师和学生使用新科学作为科研交流的平台。希望大家能够相互转达!
回复 支持 反对

使用道具 举报

精彩图文
Copyright;  © 新科学想法 2016-2017   浙公网安备 33010202000686号   ( 浙ICP备09035230号-1 )