数学は引用可能であるべき

引用数式について調査しました(PRを作成するか、既存のPRに貢献することを検討しています)。

初期の考えと調査結果をここにまとめます。

  • 引用はすべて、これらの主要なコンポーネントを経由するようです。
  • buildQuote 関数
  • TopicController.selectedText
  • 引用に渡されるコンテンツは this.quoteState.buffer から取得されます。これは QuoteButton._selectionChanged で(おそらく他の場所でも)設定されます。
  • これは selectedText を呼び出します。
  • これは toMarkdown を呼び出します。
  • buildQuote 関数は投稿オブジェクトを受け取ります。これは投稿の完全なJSON記述だと思います。例。

したがって、私の最初の印象では、これらの点のいずれかが修正可能かもしれません。

  • toMarkdown はさまざまなHTMLタグに対して要素を照合します。MathJaxはカスタム要素を使用していると思いますが、検出可能だと思います(SVGレンダリングはそうではないかもしれません)。KaTeXもそうでしょうか?
  • selectedText はコードブロックやoneboxのような要素のマッチングを行います。MathJax/KaTeX要素を検出して変換できるかもしれません。(注:変換ロジックをメインのDiscourseコードベースではなく、discourse-mathプラグインに追加できるように、フックまたは同様のものを用意するのが良いでしょう。)
  • 他の点は、これら2つほど適していないようです。

アプローチと生の数式を取得する方法に関するその他の考え。

KaTeX / MathJax + SVG[^1] の動作によっては、数式の各インスタンスにはルートHTML要素があると思います(アクセシビリティなどのための非表示要素がいくつかあるため、複数になる可能性もあります)。したがって、数式が存在する場所がわかれば、投稿の生のコンテンツから $ で区切られたインスタンスを解析できるかもしれません(ただし、インタープリターはトリッキーです。コードベースにすでに存在するものはありますか?)。

[^1]:MathJax + SVGはサポートされていないと思いますが、したがって問題ではないかもしれません。

あるいは、MathJaxには少なくとも右クリック > texを表示するような機能があります(これは $ のペア間のリテラル文字列であるはずです)。それをどのようにフックできるかはわかりませんが、MathJax v2、v3、およびKaTeXでそれが可能な方法があれば、それを使用してフォーマットされた数式を選択して $ ... $ に置き換えることができるはずです(注:これはインライン数式の場合に機能します。他の種類の場合もカバーする必要があります。それらは $$ ... $$ または [/ ... /] デリミタを使用します。)

現在の問題点:

  • フックを実装する方法がわかりません。また、使用できるより良いものや、Discourseのコードベースでのより良い方法があるかどうかもわかりません。
  • MathJax/KaTeXに関するいくつかの不明点があり、調査が必要です。
  • HTML要素 - それらを確実に検出するにはどうすればよいですか?
  • 生のTeXコードをどのように取得しますか?

修正する場所/対象、その他の実装方法、またはその他のアイデアがあれば、投稿してください。

「いいね!」 6