使用d3.js在svg上呈现MathML

使用d3.js在svg上呈现MathML,svg,d3.js,mathml,Svg,D3.js,Mathml,我正在尝试使用d3.js在svg上呈现MathML方程。谁能帮我在svg上得到一个二次方程。我试着用外来对象来做,但没有成功。你有两个bug foreignObject必须具有宽度/高度属性 必须在mathml命名空间中创建mathml元素 在本例中修复这些结果 d3.ns.prefix.mathml = "http://www.w3.org/1998/Math/MathML"; var foreignObject = d3.select("body") .append("svg"

我正在尝试使用d3.js在svg上呈现MathML方程。谁能帮我在svg上得到一个二次方程。我试着用外来对象来做,但没有成功。

你有两个bug

  • foreignObject必须具有宽度/高度属性
  • 必须在mathml命名空间中创建mathml元素
在本例中修复这些结果

d3.ns.prefix.mathml = "http://www.w3.org/1998/Math/MathML";

var foreignObject = d3.select("body")
    .append("svg")
var x = foreignObject.append("foreignObject")
    .attr("requiredExtensions", "http://www.w3.org/1999/xhtml")
    .attr("width", "100")
    .attr("height", "100")
var text = x.append("mathml:mo")
var row = x.append("mathml:mrow")
row.append("mathml:mi").text("a")
row.append("mathml:mo").text('\u2062')
var msup = row.append("msup")
msup.append("mathml:mi").text("x")
msup.append("mathml:mi").text("2")
row.append("mathml:mo").text("+")
row.append("mathml:mi").text("b")
row.append("mathml:mo").text('\u2062')
row.append("mathml:mi").text('x')
row.append("mathml:mo").text('+')
row.append("mathml:mi").text('c')

我花了相当长的时间试图让它在JSFIDLE中工作,但没有成功,但它在我的PC上工作得非常好。你介意试试下面的方法吗?如果你也能用,请告诉我

第一步。加载MathJax

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
但是,如果您仍然喜欢MathML,则可以使用以下选项:

text.html("<math display=\"block\"><mrow><mi>x</mi><mo>=</mo><mfrac><mrow><mo>−</mo><mi>b</mi><mo>±</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>−</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math>")
text.html(“x=−b±b2−4ac2a“)
我知道我正在添加更多的脚本供您加载,但我的理解是MathML已经不再被广泛使用了

我希望有帮助

编辑 最后,这里有一个JSFIDLE:


谢谢

您能给我们展示一些您试图实现的代码吗?我从一个示例开始。代码在我尝试的ax square+bx+c中。但是还是没有成功。谢谢你的努力。这很奇怪。它不工作在铬。有什么我遗漏的吗?是Chrome不支持SVG上的MathML,还是它根本不支持SVG上的MathML。一点数学都没有。哎哟。需要为同样的问题找到另一个解决方案。是否可以将MathML转换为MathJax,然后加载它。上面给出的另一种解决方案适用于铬。因此,只需考虑将loudid MathML转换为MathJax syntax这很好,但我们有适当的MathML输入,需要在SVGNo问题上呈现。不过,我认为使用MathJax呈现MathML更好。此外,我不确定MathML是否真的得到了支持。Chrome并没有让它不高兴(正如@RobertLongson提到的)再次提出同样的问题。是否可以将MathML转换为MathJax语法。注意:cdn.MathJax.org即将结束,请查看迁移提示。
text.html("<math display=\"block\"><mrow><mi>x</mi><mo>=</mo><mfrac><mrow><mo>−</mo><mi>b</mi><mo>±</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>−</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math>")