2017-11-30 12 views
0

私はKatex形式を使用して数式を表示するプロジェクトに取り組んでいます。Katex/Latexの構文に変数値を入力してください

ここで私は少し問題に直面しています。

画分をレンダリングすると仮定I値のX可変値の別の変数Yを持っている場合、katex構文は今 \drac{x}{y}

あります。

私はどのように値をKatex構文に挿入しますか?

私はkatex構文XYは、実際の値に置き換えられます

var x = 3; 
var y = 5; 

\dfrac{x}{y} 

のようなものを持っていると思います。

注: - 私もKatexをレンダリングするためにhttps://github.com/talyssonoc/react-katex

を使用しています。

+0

[String.replace()](https://www.w3schools.com/jsref/jsref_replace.asp)? –

+0

この場合 '\ dfrac {a} {c}'と変数があります** a **と** c **? @NicoSchertler – besrabasant

+0

この場合はどうですか?変数のセットを持っていなければならず、すべての変数を置き換えます。 –

答えて

1

私はこれに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}aarrayでなく、rrlrlである場合は、変数と見なすべきではありません。これを修正することは、多くの意味論的洞察を必要とするため、実際には問題があります。

このジレンマに取り組む1つの方法は、KaTeXにレンダリングをさせ、その結果のDOMサブツリーで置換を行うことです。変数は<span class="mord …">…</span>mordは数学的には一般的です)と識別できる必要があります。これは、KaTeXが出力に使用している正確な表現に依存していることを意味します。したがって、KaTeXの固定版を確実に実行する必要があります。これらの内部的な事柄は予告なしに変更される可能性があります。 \underbraceのようなものでさえ現時点でこの代替アプローチで動作するように見えますが、一部の(おそらく将来の)バージョンでは、これは指定されたボックスの幅に依存する特定の構造を壊すかもしれないという事実にも注意してください。

+0

ありがとうございます、あなたの洞察のために@MvG。私は_macros_について知りませんでした...どうもありがとうございました...私はすでにkatexによって提供されているJavaScriptの文字列補間方法を使用していました...あなたはドキュメントの最下部にそれを見つけることができます小さな式ではうまく動作しますが、より大きな式ではうまくいきます...それは地獄に変わります...そして、私は複数のソースからの変数値を代用しなければなりません。 – besrabasant

関連する問題