canvas - 在 <canvas> 上渲染 MathJax 输出

标签 canvas mathjax

我搜索过这个话题,但找不到直接的答案,而且我也不擅长 javascript。所以我希望有人可以告诉我如何做到这一点。

我只是喜欢在 canvas2D 中显示数学。我用 context.fillText将字符串传递给 canvas2d,但该字符串显然没有被 Mathjax 处理,因为它不在页面本身上。

这是一个 MWE。我需要修改什么才能使数学显示在 Canvas 上?

<!DOCTYPE html>

<html>
<head>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] }});
</script>

<script type="text/javascript" 
  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>        
</head>    
<body>

</p>Trying to render $\sin(x)$ inside canvas 2D as text</p>

<div>
<canvas id="e" width="200" height="200"></canvas>
<script>
  var canvas = document.getElementById("e");
  var context = canvas.getContext("2d");
  context.font = "normal 16px Arial";
  context.fillText("test string", 50, 50);
  context.fillText("$\sin(x)$", 50, 100);
</script>
</div>    
</body>
</html>

我现在得到的输出是

Mathematica graphics

同样,我确实理解为什么它不起作用,因为数学在字符串中,Mathjax 无法看到并处理它。但它必须是一个供 Canvas 使用的字符串。我不能只写 context.fillText($\sin(x)$, 50, 100);没有字符串引号,因为它不起作用。

可能是一个相关的问题是this,但不确定。

How do I format html with MathJax after loading it using jQuery.load?

最佳答案

<canvas>文本绘制操作是独立于 DOM manipulation 的操作因此 Mathjax 无法与 Canvas 文本渲染操作交互。

我不确定是否存在 <canvas>目前 MathJax 的渲染器后端。至少通过检查当前 MathJax 演示中的渲染选项似乎并非如此。因此,MathJax 只能在 DOM 上创建输出。

出于安全原因,浏览器不允许在 <canvas> 上渲染 DOM直接,虽然这在技术上是可能的。否则,人们可能会通过在 <iframe> 中渲染站点来窃取您登录的站点(例如 Facebook)的内容。然后渲染这个 <iframe>在 Canvas 上。

关于canvas - 在 <canvas> 上渲染 MathJax 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20852529/

相关文章:

javascript - 如何从 MathJAX.js 获取 MathExpression

ipad - 在 iPad Safari 上限制 Canvas 捏缩小

javascript - 我的 javascript 示例存在一些问题。请帮忙

javascript - 如何使用JavaScript在HTML canvas元素上播放嵌入YouTube网址

jupyter-notebook - 如何更改 IPython Notebook 中显示方程的对齐方式?

node.js - 爬取数据时如何获取MathJax中的元素?

c# - WPF Canvas 缩放/变换以适合

javascript - h1 在 Canvas 上但不可选择/不可触摸?

javascript - 是否可以让 MathJax 仅在特定标签内转换 LaTeX?

javascript - Mathjax 打破\mathcal 和下标