如何在 <canvas> javascript 中绑定 <span> 以获得数学公式
how to bind an <span> in an <canvas> javascript to get mathematic formulas
我有一个小问题,无法理解如何从 canvas 元素中的现有 KaTex Js 文件中实现一个公式,以获得与
相同的符号
<span id="mykatex1">...</span>
<script>
katex.render("f(a,b,c) = (a^2+b^2+c^2)^3", mykatex1);
</script>
。但我想要
中 的位置
ctx.fillText( "-A", p_index_a, p_index_a );
扇区,其中
"-A"
是。 ...
这就是我的问题。也许它存在另一种方式如何在 canvas 区域中实现数学函数,但 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>
将我的评论提升为答案。
此答案并未按所述回答您的问题,而是为您实际尝试实现的目标提供了替代方案。
回到 KaTeX pull request 251 I had done some work to make my personal fork of KaTeX render to canvas, for the sake of integration with CindyJS as in this demo。
直接绘制到 canvas 的主要好处是它可以与修改 canvas 的其他东西很好地集成,包括裁剪、分层、转换、多个处理步骤,将整个东西保存为单个图像,和类似的。此外,垂直对齐 HTML 到明确定义的基线非常困难。
自发布以来,我就忘记了围绕我的拉取请求进行的讨论。最后我知道有一些计划开发一些可以在各种后端布局的中间表示,包括 HTML+CSS 和 Canvas。不确定这项努力取得了多大进展。我的 PR 已被关闭,因为它已经过时了。
我有一个小问题,无法理解如何从 canvas 元素中的现有 KaTex Js 文件中实现一个公式,以获得与
相同的符号<span id="mykatex1">...</span>
<script>
katex.render("f(a,b,c) = (a^2+b^2+c^2)^3", mykatex1);
</script>
。但我想要
中 的位置ctx.fillText( "-A", p_index_a, p_index_a );
扇区,其中
"-A"
是。 ... 这就是我的问题。也许它存在另一种方式如何在 canvas 区域中实现数学函数,但 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>
将我的评论提升为答案。
此答案并未按所述回答您的问题,而是为您实际尝试实现的目标提供了替代方案。
回到 KaTeX pull request 251 I had done some work to make my personal fork of KaTeX render to canvas, for the sake of integration with CindyJS as in this demo。
直接绘制到 canvas 的主要好处是它可以与修改 canvas 的其他东西很好地集成,包括裁剪、分层、转换、多个处理步骤,将整个东西保存为单个图像,和类似的。此外,垂直对齐 HTML 到明确定义的基线非常困难。
自发布以来,我就忘记了围绕我的拉取请求进行的讨论。最后我知道有一些计划开发一些可以在各种后端布局的中间表示,包括 HTML+CSS 和 Canvas。不确定这项努力取得了多大进展。我的 PR 已被关闭,因为它已经过时了。