0

我有一个小问题要了解如何从画布元素中的现有 KaTex Js 文件中实现一个公式,以获得与我得到的相同的符号

<span id="mykatex1">...</span>
<script>
  katex.render("f(a,b,c) = (a^2+b^2+c^2)^3", mykatex1);
</script>

.但我想要 <span> 的位置

ctx.fillText( "-A", p_index_a, p_index_a );

部门,其中

 "-A" 

是。...这就是我的问题。也许它存在如何在画布区域中实现数学函数的另一种方式,但是 atm 我有点困惑和无计划如何处理它。顺便一提。那是一个功能齐全的空白动态图。免费使用。一个解决方案会很酷,因为计划是在图形区域中实现相同的符号。谢谢

<!DOCTYPE html>
<html lang="de">
<head>
  <title>Simple guide to using KaTeX</title>
  <link rel="stylesheet" href="css/js_formeln__katex.min.css">
  <script src="js/katex.min.js"></script>
  <style type="text/css">
    canvas {
      border: 1px solid black;
      font: 1.2em "Fira Sans", sans-serif;
    }
  </style>
</head>
<body>
  <p><span id="mykatex1">...</span></p>
  <script>
    katex.render("f(a,b,c) = (a^2+b^2+c^2)^3", mykatex1);
  </script>
  <body onload="draw();">
  <canvas id="canvas" width="2000" height="1000" ></canvas>
</body>

<script>
  function draw() {
    var canvas = document.getElementById('canvas');
    if (canvas.getContext) {

    var ctx = canvas.getContext('2d');
    var b_x = 300, b_y = 300;
    var b_x_erweitern_um = 600;
    var b_y_erweitern_um = 100;
    var x = 0, y = 0;
    var grid_breite_x_y = 10;
    var linewidth_1 = 0.1 , linewidth_2 = 1;
    var freier_oberer_rand = 10;
    var nach_links_verkleinern = 0;
    var nach_rechts_verkleinern = 500;
    var d_in = 0.5;

    for ( x ; x <= b_x - freier_oberer_rand - nach_links_verkleinern - 
      nach_rechts_verkleinern + b_x_erweitern_um ; x += grid_breite_x_y ) {
      ctx.moveTo( d_in + x + freier_oberer_rand + nach_rechts_verkleinern , freier_oberer_rand );
      ctx.lineWidth = linewidth_1;
      ctx.lineTo( d_in + x + freier_oberer_rand + nach_rechts_verkleinern , b_x + b_y_erweitern_um);
    }

    // horizontale Linien
    for ( y + freier_oberer_rand ; y <= b_y - freier_oberer_rand + b_y_erweitern_um ; y += grid_breite_x_y ) {
      ctx.moveTo( freier_oberer_rand + nach_rechts_verkleinern , d_in + y + freier_oberer_rand);
      ctx.lineWidth = linewidth_1;
      ctx.lineTo( b_x - nach_links_verkleinern + b_x_erweitern_um , d_in + y + freier_oberer_rand );
    }
    ctx.strokeStyle = "black";
    ctx.stroke();

    // Pfeile für x
    ctx.beginPath();
    ctx.fillStyle = 'black';
    ctx.moveTo( b_x - nach_links_verkleinern + b_x_erweitern_um + 10, b_y + b_y_erweitern_um );
    ctx.lineTo( b_x - nach_links_verkleinern + b_x_erweitern_um + 5, b_y + b_y_erweitern_um - 2 );
    ctx.lineTo( b_x - nach_links_verkleinern + b_x_erweitern_um + 5, b_y + b_y_erweitern_um + 2 );
    ctx.lineTo( b_x - nach_links_verkleinern + b_x_erweitern_um + 10, b_y + b_y_erweitern_um );
    ctx.fill();
    // Pfeile für y
    ctx.beginPath();
    ctx.moveTo( freier_oberer_rand + nach_rechts_verkleinern , freier_oberer_rand - 10 );
    ctx.lineTo( freier_oberer_rand + nach_rechts_verkleinern + 2 , freier_oberer_rand - 5 );
    ctx.lineTo( freier_oberer_rand + nach_rechts_verkleinern - 2 , freier_oberer_rand - 5 );
    ctx.lineTo( freier_oberer_rand + nach_rechts_verkleinern , freier_oberer_rand - 10 );
    ctx.fill();

    // Bezeichnung x und y
    ctx.beginPath();
    ctx.font = '10pt Calibri';
    ctx.fillStyle = 'black';

    ctx.fillText( "y", freier_oberer_rand + nach_rechts_verkleinern - 10, freier_oberer_rand + 2 );
    ctx.fillText( "x", b_x - nach_links_verkleinern + b_x_erweitern_um , b_y + b_y_erweitern_um + 10 );

    var h_font      = 30;
    var p_index_a   = 30;
    var p_index_b   = 90;
    var omega       = "0x03A9";
    var test        = "\\frac{d}{dx}\\left[\\int_a^xf(t)dt\\right]=f(x)";
    var test2       = encodeURIComponent("\\frac{d}{dx}\\left[\\int_a^xf(t)dt\\right]=f(x)");

    ctx.beginPath();
    ctx.font = '30px Helvetica, Arial, sans-serif';
    ctx.fillStyle = 'lime';
    ctx.fillText( "-A", p_index_a, p_index_a );
    ctx.fillText( "Aufprallfläche der Teilchen", p_index_b, p_index_a );
    ctx.fillStyle = 'red';
    ctx.fillText( "-V", p_index_a, p_index_a*2 );
    ctx.fillText( "Volumen bei d. Impulsion", p_index_b, p_index_a*2 );
  }
  else {
    alert("Dein Browser unterstützt das <canvas> Element nicht");
  }
}
draw();
</script>
4

1 回答 1

-1

将我的评论推广到答案。

该答案并未如所述回答您的问题,而是为您实际尝试实现的目标提供了替代方案。

回到KaTeX 拉取请求 251,我做了一些工作,使我个人的 KaTeX 分支渲染到画布,以便与CindyJS集成,就像在这个演示中一样。

直接绘制到画布的主要好处是它可以很好地与修改画布的其他东西集成,包括剪切、分层、转换、多个处理步骤、将整个东西保存为单个图像等等。此外,将 HTML 垂直对齐到明确定义的基线非常困难。

自从我发布它后,我就忘记了围绕我的拉取请求的讨论。最后我知道有一些计划来开发一些可以在各种后端布局的中间表示,包括 HTML+CSS 和 Canvas。不知道这项努力取得了多大进展。我的 PR 已被关闭,因为它变得相当过时了。

于 2018-11-07T16:20:25.857 回答