私はこれにmacro substitutionを使用すると思います。式を生成している機械によって、\frac{\x}{\y}
と表示される数式を取得してください。次に、それらのマクロの代わりに変数名または値を代入することができます。このような何か:
katex.render("\\frac{\\x}{\\y}", element, {
macros: {
"\\x": String(x),
"\\y": String(y),
}
});
あなたは数式が最初に構築されている方法を制御する方法を持っていない場合、これは単にそれにコマンドを代入する式に値を代入するから問題をシフトします。その場合、おそらく入力文字列をcommands \…
と他の文字にトークン化したいと思うでしょう。コマンドはそのままで、他の文字は変数置換の対象となります。
ことの一つは、グループ化されるのに注意してください:入力\frac xy
がうまくレンダリングしますが、(テキストとマクロ置換の両方があなたを与えるものです)x=34.5
と素朴な方法で置換y=5.67
、結果\frac 34.55.67
で\frac{3}{4}.55.67
としてレンダリングされます。したがって、数式に含まれるマクロのそれぞれが{…}
で囲まれているか、"\\x": "{" + x + "}"
のように置換するときに別のレベルの{…}
を追加してください。数式の中に{…}
でマクロを囲むことは、マクロが次のスペースを食べることを心配する必要がないという利点があります。\text{\x is 2}
は悪いですが、\text{{\x} is 2}
が良いです。
でも正しくグループ化されていても、すべての非コマンドが実際に変数であるわけではないので、このアプローチは完璧ではありません。例えば、\begin{array}{rlrl}…\end{array}
でa
がarray
でなく、r
がrlrl
である場合は、変数と見なすべきではありません。これを修正することは、多くの意味論的洞察を必要とするため、実際には問題があります。
このジレンマに取り組む1つの方法は、KaTeXにレンダリングをさせ、その結果のDOMサブツリーで置換を行うことです。変数は<span class="mord …">…</span>
(mord
は数学的には一般的です)と識別できる必要があります。これは、KaTeXが出力に使用している正確な表現に依存していることを意味します。したがって、KaTeXの固定版を確実に実行する必要があります。これらの内部的な事柄は予告なしに変更される可能性があります。 \underbrace
のようなものでさえ現時点でこの代替アプローチで動作するように見えますが、一部の(おそらく将来の)バージョンでは、これは指定されたボックスの幅に依存する特定の構造を壊すかもしれないという事実にも注意してください。
出典
2017-11-30 17:47:28
MvG
[String.replace()](https://www.w3schools.com/jsref/jsref_replace.asp)? –
この場合 '\ dfrac {a} {c}'と変数があります** a **と** c **? @NicoSchertler – besrabasant
この場合はどうですか?変数のセットを持っていなければならず、すべての変数を置き換えます。 –