有一种方法可以在 SVG 图表中包含 MathJax SVG 元素,而无需foreignObject
. 该技术的完整演示位于http://puzlet.com/m/b00b3。
假设您的网页中有这样的 SVG 图(并包含任何 SVG 元素):
<svg id="diagram" xmlns='http://www.w3.org/2000/svg'
xmlns:xlink="http://www.w3.org/1999/xlink"
version='1.1' width='720' height='100'>
</svg>
和以下 MathJax:
<div id="mathjaxSource">
$\Omega$
</div>
使用这个 CoffeeScript(加上 jQuery)将 MathJax 元素集成到您的 SVG 图表中:
diagram = $("#diagram") # SVG diagram
obj = new MathJaxObject "mathjaxSource" # MathJax object (see class definition below)
obj.appendTo diagram # Append MathJax object to diagram
obj.translate 100, 200 # Position MathJax object within diagram
您还可以使用width()
和height()
方法进行居中和垂直对齐。
class MathJaxObject
constructor: (@divId, @scale=0.02) ->
@source = $("##{@divId}").find ".MathJax_SVG"
@svg = @source.find "svg"
g = @svg.find "g"
@group = $(g[0]).clone()
@translate 0, 0
viewBox: -> @svg[0].viewBox
width: -> @scale * @viewBox().baseVal.width
height: -> @scale * @viewBox().baseVal.height
translate: (@dx, @dy) ->
dy = @dy + (-@scale * @viewBox().baseVal.y)
@group[0].setAttribute "transform",
"translate(#{@dx} #{dy}) scale(#{@scale}) matrix(1 0 0 -1 0 0)"
appendTo: (diagram) ->
diagram.append @group