HN 日本語サマリー

← 一覧へ戻る
プログラミング

Mathupにおけるテンソル表記

Tensor Notation in Mathup (mathup.xyz)

12 pointsby runarberg1 コメント

要約

Mathupは、AsciiMathにインスパイアされたシンプルなマークアップ言語で記述された数式を、構造化されたMathMLに変換するライブラリです。コマンドライン、Node.jsパッケージ、またはブラウザスクリプトとして利用でき、MathJaxのような高機能なレンダリング機能は持たず、軽量かつ高速な数式変換に特化しています。これにより、開発者は複雑なMathMLタグを直接記述することなく、簡潔な記法で数式を表現できます。

全文翻訳

インストール npm npm install mathup import mathup from "mathup"; クライアント 以下のいずれかをダウンロードしてください: モジュール (フル, ミニ) スクリプト (フル, ミニ) カスタム要素としてモジュール (フル, ミニ) カスタム要素としてスクリプト (フル, ミニ) スタイルシート (フル; カスタム要素には不要) そしてモジュールをインクルードします: <script type="module" src="mathup.js"></script> <link rel="stylesheet" href="mathup.css" /> カスタム要素: <script type="module" src="math-up-element.js"></script> またはスクリプト: <script src="mathup.iife.js"></script> <link rel="stylesheet" href="mathup.css" /> 使用方法 const expression = "1+1 = 2"; const options = {}; // オプション const mathml = mathup(expression, options); mathml.toString(); // => "<math><mrow><mn>1</mn><mo>+</mo><mn>1</mn></mrow><mo>=</mo><mn>2</mn></math>" const mathNode = mathml.toDOM(); // => [object MathMLElement] // 既存の<math>ノードをインプレースで更新 mathup("3-2 = 1", { bare: true }).updateDOM(mathNode); カスタム要素 <math-up display="inline" dir="ltr" decimal-mark="," col-sep=";" row-sep=";;" > 1+1 = 2 </math-up> コマンドライン npm install -g mathup mathup [options] -- <expression> # または標準入力から echo <expression> | mathup [options] オプション (デフォルト値付き) const options = { decimalMark: ".", // -m --decimal-mark="." colSep: ",", // -c --col-sep="," rowSep: ";", // -r --row-sep=";" display: "inline", // -d --display="inline" dir: "ltr", // --rtl bare: false, // -b --bare }; 注意: 小数点記号として, を選択した場合、; がデフォルトの列区切り文字になります。また、; が列区切り文字の場合、;; がデフォルトの行区切り文字になります。小数点記号と行区切り文字の両方に, を使用できますが、その場合、行区切り文字と次の数字の間にスペースを追加する必要があります。ただし、その場合は両方を明示的に設定する必要があります。 const options = { decimalMark: ",", colSep: ",", }; 素早く記述 / 読みやすい このパッケージは、単一の関数 mathup を公開しています。これは、AsciiMathにインスパイアされたマークアップ言語で書かれたシンプルな数式を、直感的に構造化されたMathMLに出力します。コマンドライン、サーバーのNode.jsパッケージ、またはブラウザスクリプトとして使用できます。ブラウザでは、ドキュメント内の数式を解析する方法を選択できます。数式らしい部分を注意深く探す、$…$で囲まれたすべての式を解析する、または他の優れたツールを利用するなどです。出力の処理方法も選択できます。別のプログラムにパイプする、DOMに直接挿入する、またはコンソールにログ出力するなどです。 なぜMathJaxを使わないのか? MathJaxは、ドキュメントに複雑な数式を含めることだけが目的の場合に安全に使用できる優れたツールです。しかし、MathJaxは、単純な数式を構造化された形式に変換する以上の多くのことを行う複雑なソフトウェアであり、それだけが目的であれば、MathJaxは明らかに過剰です。Mathupは、(より少ないことを行うことで) MathJaxよりもはるかに高速であることを約束します。MathJaxは式を検索し、解析し、変換し、レンダリングしますが、Mathupは解析と変換のみを行い、レンダリングはブラウザに任せます。 なぜAsciiMath / なぜTeXではないのか? 私は、オーバーヘッドなしで数式を素早く記述できるようにしたかったため、このツールを作成しました (例: \frac{1}{2} の代わりに 1/2)。TeXの式は、特にキーボードで \, {, } へのアクセスが複雑な場合、冗長で記述が面倒になることがあります。しかし、このパッケージの目的は、人々が冗長でない方法でMathMLを完全に制御できるようにすることではなく、人々が簡単な式を簡単に記述できるようにすることです。もちろん、記述方法で可能な限り多くの表現力を提供しようとしますが、すべての複雑なことを可能にすることを約束するわけではありません。MathMLの完全なサポートが必要で、タグをすべて記述したくない場合は、別のツールを探すべきです。TeX形式でMathMLを記述できるようにする他の優れた取り組みがあります。例えばTeXZillaをご覧ください。 リファレンス 基本 Mathupは、MathMLの4つのトークン要素 (識別子 <mi>, 演算子 <mo>, 数値 <mn>, テキスト <mtext>) を使用します。Mathupは、単純な式を書くときに、これらのどれを意味するかを認識します。例えば: 1+1 = 2 ⇒ <mrow> <mn>1</mn> <mo>+</mo> <mn>1</mn> </mrow> <mo>=</mo> <mn>2</mn> sin theta ⇒ <mi>sin</mi><mi>θ</mi> Mathupは、記述するほとんどのUnicode文字も認識します。文字が数学的演算子のコードブロックのいずれかから来た場合、それは<mo>タグで囲まれます。それ以外の場合は、<mi>タグで囲まれます。さらに、d が微分の一部であることが明らかな場合、<mo>タグで囲まれます。 数値 数値は通常、あなたが考える通りのものです (Unicode数字の Ⅻ や ↋ を含む)。しかし、奇妙な方法で数値を書きたい場合 (例えば、単語で書く、16進数文字列、またはローマ数字)、文字列の前に#を付けます (例: #0x2A)。または、数値に英数字以外の文字が含まれる場合は、バッククォートで囲みます (Markdownのように) #`…`のように: #`forty two` または #`` `42 `` を使用して `42 を数値にします。 演算子 Pc, Pd, Pe, Pf, Pi, Po, Ps, Sm, または So のUnicodeカテゴリにあるものはすべて演算子と見なされます。さらに、バックスラッシュ \ の直後に続くシンボル文字または英数字文字列は演算子 (<mo>) になります。演算子として複数のシンボル文字、または複数の単語が必要な場合 (例: <mo>for each</mo>)、Markdownのセマンティクスに従って囲むことができます (例: \`for each` または \`` ` `` を <mo>`</mo> にします)。以下も対応する演算子にマッピングされます。 オペレーショナル .$ 関数適用 (ゼロ幅) .* 見えない乗算 (ゼロ幅) .+ 見えない加算 (ゼロ幅) lim lim mod mod - − +- ± -+ ∓ * · xx × -: ÷ // ⁄ prod ∏ sum ∑ ** ∗ @ ∘ ^^ ∧ vv ∨ nn ∩ uu ∪ int ∫ dint ∬ oint ∮ != !== ≢ o+ ⊕ ox ⊗ o. ⊙ ^^^ ⋀ vvv ⋁ nn ⋂ uuu ⋃ *** ⋆ |><| ⋈ |>< ⋉ ><| ⋊ その他 ' ′ '' ″ ''' ‴ '''' ⁗ aleph ℵ del ∂ grad ∇ oc, prop ∝ /_ ∠ /_ △ || ∥ ~= ≅ ~~ ≈ sub ⊂ sup ⊃ sube ⊆ supe ⊇ <>, diamond ⋄ [], square □ <| ⊲ |> ⊳ リレーショナル in ∈ !in ∉ -= == ≡ <= <= >= >= -< ≺ >- ≻ -<= ⪯ >= ⪰ <<< ≪ >>> ≫ 論理 and and if if or or otherwise otherwise not ¬ AA ∀ EE ∃ |-- ⊢ TT ⊤ _|_ ⊥ |== ⊨ 矢印 <- larr ← uarr ↑ -> arr → darr ↓ harr ↔ ->> ↠ >-> ↣ |-> ↦ lArr ⇐ => rArr ⇒ <=> iff, hArr ⇔ >->> ⤖ 句読点 ., 見えない区切り文字 (ゼロ幅) ... … :. ∴ vdots ⋮ cdots ⋯ ddots ⋱ 識別子 数値、演算子、またはテキストではないものはすべて識別子と見なされます。これには、ラテン文字、ギリシャ文字、アラビア文字 (A, π, ح) や絵文字も含まれます。表の単語や上記の演算子表に一致しない限り、各文字は個別の識別子と見なされます。フェンスで囲むことで、任意の文字シーケンスを単一の識別子として強制できます (例: `Gamma` は <mi>Gamma</mi> を生成し、`` f` `` は <mi>f`</mi> を生成します)。以下も単一の識別子を生成します: 標準関数 cos cos cosh cosh cot cot csc cosec det det dim dim gcd gcd lcm lcm ln ln log log max max min min mod mod sec sec sin sin sinh sinh tan tan tanh tanh ギリシャ文字 Delta Δ Gamma Γ Lambda Λ Omega Ω Phi Φ Pi Π Psi Ψ Sigma Σ Theta Θ Xi Ξ alpha α beta β chi χ epsilon ɛ eta η gamma γ kappa κ lambda λ mu μ nu ν omega ω phi φ phiv ϕ pi π psi ψ rho ρ sigma σ tau τ theta θ upsilon υ xi ξ zeta ζ 追加識別子 oo ∞ O/ ∅ CC ℂ NN ℕ QQ ℚ RR ℝ ZZ ℤ テキスト 二重引用符 ("some text") で囲むと、テキストとして表示されます。テキスト注釈に引用符が含まれている場合は、さらに引用符で囲むことができます (バッククォートフェンスのように)。"" "text string" "" は <mtext>"text string"</mtext> を生成します。 スペース MathMLには <mspace> という要素があります。2つ以上の連続したスペースは、意味のある箇所でその要素に変換されます。スペースの幅は次のようになります: "width" = { 0.35(n - 1)\, n = 2 または n = 3 の場合 0.5(n - 1)\, n = 4 または n = 5 の場合 n - 3\, n > 5 の場合 } ここで n は連続するスペースの数であり、幅は ex 単位です。ex は文字 'x' の高さです。