数式表記 JavaScripts
(C) by theR.A.N.S. 2002
改訂 2002.6.4
改訂 2004.5.20
営利目的での配布を禁じます。

 html で数式を表記するための JavaScript です。(日本語環境専用)

概要
チュートリアル
便覧
JavaScript 超入門
使用許諾
概要
 理工系の文書には数式は付きものです。一方、ネットの普及につれてhtml文書の需要も高まっています。
 htmlで数式を表記するにはどうすれば良いか?色々な方法があるでしょう。例えば
  y=ax+b
のようなものなら、そのまま書いてもほぼ大丈夫です。
  ax2+bx+c
程度でも、ソースはそれほど複雑ではない。
 しかし、
x+a
2+b
となると、ソースはそれほど簡単ではない。そしてもっと複雑な数式をいくつも書くとなると大変苦労します。  この文書には、そのような数式を表記するための JavaScript のライブラリが含まれています。是非多くの方にご利用いただきたいと思っております。

チュートリアル
関数MF()とMFw()
 このライブラリは関数MF()を中核としています。
 関数MFw()は、MF()の出力を本文中に書くものです。すなわち、MFw() はdocument.write(MF()) と全く同等です。
 MF()の内容については便覧を参照してください。

使用例
という数式を書くためのソースの例を下に示します。
---------+---------+---------+
<script language="JavaScript">
<!--
MFw("/","1","x");
//-->
<</script>
---------+---------+---------+
 このように、関数MFw()は本文中にJavaScriptのパートとして埋め込まれます。したがって、これを使うためには若干のJavaScriptに関する知識が必要です。しかしそれほど難しいものではありません。
 上と同じ結果は次のソースでも得られます。
---------+---------+---------+
<script language="JavaScript">
<!--
document.write(MF("/","1","x"));
//-->
<</script>
---------+---------+---------+
 つまり、関数MF("/","1","x")は
  <table><tr><td><u>1</u><tr><td>x</table>
という文字列を作りますが、これを document.write() で実際に文中に書くのが関数MFw("/","1","x")です。

 次に
という例を考えます。
なら次のように書けば良い。
---------+---------+---------+
<script language="JavaScript">
<!--
MFw("√","x<sup>2</sup>+b",3);
//-->
</script>
---------+---------+---------+
 しかし、これを分母として書くためには関数MFw()の引数としなければならない。つまり、

MFw("/","x+a","

")

のような表現が必要です。これは次のように関数MF()を関数MFw()の引数として利用すれば実現できます。
---------+---------+---------+
<script language="JavaScript">
<!--
MFw("/", "x+a", MF("√","x2+b",3));
//-->
<</script>
---------+---------+---------+
 引数は直接出力するのではなく文字列として与えなければならないので、MFw()ではなくMF()としなければならないわけです。

多項式等
という式を考えます。容易に考えられるのは次の表現でしょう。
---------+---------+---------+
<script language="JavaScript">
<!--
document.write("u"+MF("/","∂u","∂x"));
//-->
</script>
---------+---------+---------+
しかし、この結果は
となってしまいます。
次の例はuと を表の要素として並べます。
---------+---------+---------+
<table>
<tr><td>u
<td>
<script language="JavaScript">
<!--
MFw("/","∂u","∂x");
//-->
</script>
</table>
---------+---------+---------+
 これは一応まともな結果が得られます。しかしながら、もっと複雑な数式になった場合は大変面倒です。

配列MFtermと関数MFtermsw()
 上と同じ結果は配列MFtermと関数MFtermsw()を使ってより簡単に得られます。
---------+---------+---------+
<script language="JavaScript">
<!--
i=1;
MFterm[i++] = "u";
MFterm[i] = MF("/","∂u","∂x");
MFtermsw(i);
//-->
</script>
---------+---------+---------+
 配列MFtermは最大32個の要素が許されます。
MFterm[1]から順番に式の項("u"," ")を入れます。
 関数MFtermsw(i)はこれらの要素を表として出力します。MFtermswの引数 i は実際の要素の数です(最大32)。
 たとえば、流体力学で登場する Navier-Stokes 方程式は次のようなものです。
 これは以下のソースで得られます。
---------+---------+---------+
<script language="JavaScript">
<!--
i=1;
MFterm[i++] = MF("/","∂u","∂t");
MFterm[i++] = "+u";
MFterm[i++] = MF("/","∂u","∂x");
MFterm[i++] = "+v";
MFterm[i++] = MF("/","∂u","∂y");
MFterm[i++] = "+w";
MFterm[i++] = MF("/","∂u","∂z");
MFterm[i++] = "=−";
MFterm[i++] = MF("/","1","ρ");
MFterm[i++] = MF("/","∂p","∂x");
MFterm[i++] = "+ν(";
MFterm[i++] = MF("/","∂<sup>2</sup>u","∂x<sup>2</sup>");
MFterm[i++] = "+";
MFterm[i++] = MF("/","∂<sup>2</sup>u","∂y<sup>2</sup>");
MFterm[i++] = "+";
MFterm[i++] = MF("/","∂<sup>2</sup>u","∂z<sup>2</sup>");
MFterm[i] = ")";
MFtermsw(i);
//-->
</script>
---------+---------+---------+
 このように、MFterm の要素としては、
  ・一つの MF() 関数
  ・MF() 関数を含まないひとかたまり("+u"、"=−"、"+ν("など)
を選ぶのが最適です。

 2次方程式
  ax2+bx+c=0
の解は
ですが、このソースは次のとおりです。
---------+---------+---------+
<script language="JavaScript">
<!--
i=1;
MFterm[i++] = BR+"<u>−b±";
MFterm[i] = MF("√","b<sup>2</sup>−4ac",4)+"</u>";
bunshi = MFterms(i);

i=1;
MFterm[i++] = BR+"x=";
MFterm[i] = MF("/",bunshi,"2a");
MFtermsw(i);
//-->
</script>
---------+---------+---------+
 右辺の分子
は、
    i=1;
    MFterm[i++] = BR+"<u>−b±";
    MFterm[i] = MF("√","b<sup>2</sup>−4ac",4)+""</u>";
    bunshi = MFterms(i);
によって変数 bunshi に保存されます。MFterms(i) は 配列 MFterm から文字列を作る関数です。
 分子が変数 bunshi に保存されたら、配列 MFterm は破棄しても良いので、
    i=1;
    MFterm[i++] = BR+"x=";
    MFterm[i] = MF("/",bunshi,"2a");
 として MFterm を作り直します。このとき、関数MF()の引数として bunshi が使われます。
 最後に
    MFtermsw(i);
によって式全体が出力されます。


便覧

document.write(MF(...)) と同等の関数 MFw(...)
document.write(MF("/","1","x"));
MFw("/","1","x");

多項式

JavaScript 超入門
 JavaScript はhtml文書の中で使われる「スクリプト言語」のひとつで、これによって様々な機能を実現できます。解説書も多数出ていますので、詳細はそれらに譲り、ここではもっとも初歩的な事項だけを説明します。

簡単な例
 次は非常に簡単な JavaScript の例です。
---------+---------+---------+
<script language="JavaScript">
<!--
document.write("こんにちわ!");
//-->
</script>
---------+---------+---------+

 これを html文書の本文中に書いておけば、ブラウザで見ると、これの書かれた位置には

こんにちわ!

と表示されます。つまり上の JavaScript ソースは、html文書中に

こんにちわ!

と書くのと同じことです。
 なお、JavaScript ソースは、
<script language="JavaScript">
で始まり、
</script>
で終わることが決められています。
<!--

//-->
は(現在ではあまり意味がないのですが)、歴史的な経緯で必ずつけるオマジナイと考えて下さい。

JavaScript ソースを書く
 現在ではhtml文書はワープロ・ソフトその他で簡単に作成できます。専用のソフトもあります。しかし JavaScript を書くなら、エディタが良いでしょう。エディタというのは文書などの入力を迅速に行うことに特化したソフトのことです。Windows には「メモ帳(ノートパッド)」という簡単なエディタが標準で付属しています。また、より高度なエディタを求めるなら、WZ、秀丸などが有名です。

 それでは、エディタによって次の文書を書いてみましょう。
---------+---------+---------+
<html>
<head>
<title>JavaScript テスト</title>
</head>
<body>
<script language="JavaScript">
<!--
document.write("こんにちわ!");
//-->
</script>
</body>
</html>
---------+---------+---------+
 これに適当な名前(たとえば"test1.html")を付けて保存し、ブラウザで見て下さい。
 このように、JavaScript ソースは、本文中(<body>から</body>まで)に書かれるのが普通です。

関数
 上の例に出てきた
  document.write
は JavaScript に標準の関数のひとつです。この関数は、引数(この例では"こんにちわ!")を表示するという機能を持っています。たとえば何らかの条件によって表示内容を変えるといった JavaScript ソースを書くこともできます。これが JavaScript を使う大きなメリット(通常のhtml文書ではできない)のひとつなんですが、ここでは説明しません。ともかく、JavaScript ではこのような様々な機能を持った関数を利用することができます。
 関数には document.write のように JavaScript に初めから備え付けられているものもありますが、他にユーザーが独自に定義する関数もあります。
 ユーザー定義関数は、html文書のヘッダ部(<head>から</head>まで)に書かれるのが普通です。この文書のヘッダ部にも様々な関数が置かれています。ブラウザの「ソース表示」で見て下さい。

次のソースを見て下さい。
---------+---------+---------+
<html>
<head>
<title>JavaScript テスト-2</title>
function MFdivw(x,y)
{
document.write("<table><tr><td><center><u>"+x+"</u>");
document.write("<br>"+y+"</center></table>");
}
</head>
<body>
<script language="JavaScript">
<!--
MFdivw("1","x");
//-->
</script>
<script language="JavaScript">
<!--
MFdivw("x+a","x+b");
//-->
</script>
</body>
</html>
---------+---------+---------+

 ヘッダ部では MFdivw(x,y) という関数(function)が定義されています。この関数の内容は
  document.write("<table><tr><td><center><u>"+x+"</u>");
  document.write("<br>"+y+"</center></table>");
つまり"<table><tr><td><center><u>"+x+"</u>"および"<br>"+y+"</center></table>"という2つの文字列を出力します。ただしxとyは引数として与えられます。
 本文中には2つの JavaScript ソースがあり、どちらも関数 MFdivw を使っています。最初のほうでは引数が"1"と"x"で、2つ目では引数が"x+a"と"x+b"です。これをブラウザで見ると次のようになります。


 同じ結果を得ることが目的なら、次のhtml文書でも可能です。
---------+---------+---------+
<html>
<head>
</head>
<body>
<table><tr><td><center><u>1</u> <br>x</center></table>
<table><tr><td><center><u>x+a</u> <br>x+b</center></table>
</body>
</html>
---------+---------+---------+

 これでは本文の1行目と2行目は"1"が"x+a"に、"x"が"x+b"になっているのをを除いて全く同じです。その共通の部分を関数 MFdivw とし、異なる部分だけを引数として与えるのが前記の JavaScript ソースです。このように一度関数を定義しておけば、引数を与えるだけで何処にでも何度でも同じ処理をできるわけです。

使用許諾
 この文書に収録された JavaScript ソースはどなたでも自由にコピーして使用できます。ただし営利目的での配布を禁止します。  非営利目的の配布は自由ですが、JavaScript の性格上、www.nn.iij4u.or.jp/~therans/から直接入手したもの以外についてはセキュリティの責任をもてませんので、ご注意下さい。

 これらの JavaScript ソースをご使用になる方はユーザー登録をお願いします。登録は無論、無料です。登録された方には、バージョンアップ情報などをお報せします。また将来有料化した場合(未定ですが)、優待サービスを考えております。
 下の様式の事項を書いてtherans@nn.iij4u.or.jpまでお送り下さい。

数式表記 JavaScripts ユーザー登録
氏名(必須) 
住所(必須) 
メールアドレス(必須) 
電話番号 
ご職業またはご専攻 
勤務(通学)先 
勤務(通学)先住所 
勤務先電話番号 
ご意見、ご要望等