LoginSignup
2

More than 1 year has passed since last update.

MathJaxを動的に処理した

Last updated at Posted at 2021-10-13

初めに

どうも、最近 Ruby on Rails 初めた人です。(記事と全く関係ない)

今回の記事は。
MathJaxというライブラリを使って数学のwebアプリを作っていたとき、動的に処理できなくて困ったので記事にまとめます。

MathJaxってなに?

MathJax はMathML、LaTeX、ASCIIMathMLで記述された数式をウェブブラウザ上で表示するクロスブラウザのJavaScriptライブラリである。MathJaxはApache Licenseのもとでオープンソースソフトウェアとしてリリースされている。
MathJax - Wikipedia

まぁ、要するに「カッコいい数式を表示できる機能」ってこと

二次方程式 [x=ax^2+bx+c] の解は \\
x = {-b \pm \sqrt{b^2-4ac} \over 2a}

こんなかんじ

どうやって使うの?

<script type="text/javascript" id="MathJax-script" async
  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>

↑こいつを <head> タグの中に入れるだけ!

あとは、 <body> タグの中に数式を放り投げるだけ。
数式は、ぐぐったら出てくるから、自分で調べて。

自分がしたかったこと

ボタンを押して数式を表示する
「スタートボタンを押して、事前に用意してあった数式を表示して、回答する」
という簡単な計算アプリを作っていた。
数式を表示するだけならすぐに実行できたが、.innerHTML もしくは .html を書き換えると、うまく行かなくなった。

結論

// head
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.0.4/math.min.js"></script>
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="script.js" charset="utf-8"></script>
// body
<div id="math">\\begin\{align\}半径 = \\frac{直径}{2}\\end\{align\}</div>
<button onClick="changeMath()"></button>
// script.js

function changeMath() {
  $("#math").html("\\begin\{align\}");

  $("#math").append("y=\\sin(\\theta+\\frac{\\pi}{2})+1");

  $("#math").append("\\end\{align\}");
  MathJax.Hub.Queue(["Typeset",MathJax.Hub,"quMain"]);
}

解説

表示されたボタンを押すと changeMath() が発火する。
そうすると、表示されていた数式が上の数式から下の数式に置き換わる。

半径 = { 直径 \over 2 }
y=\sin(\theta+\frac{\pi}{2})+1

以上

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2