ディスコース数学

:discourse2: 概要 Discourse Math は、Discourse フォーラムで数式をレンダリングするために MathJax (デフォルト) または KaTeX を使用します。
:open_book: インストールガイド このプラグインは Discourse コアにバンドルされています。プラグインを個別にインストールする必要はありません。

数式の有効化

Math プラグインは、admin/plugins ページからアクセスできる設定から有効にできます。

Math settings

機能

有効化すると、$ で囲むことでインライン数式をレンダリングできます。例: $E=mc^2$

$$ で囲むことで、数式のブロックをレンダリングできます。

$$
\sqrt{(-1)} \; 2^3 \; \sum \; \pi
$$

Discourse Math は、“I spent 20$ and another 100$” のような文が変換されないようにするためのヒューリスティックを使用しています。

LaTeX デリミタ

サイト設定から有効化すると、標準的な LaTeX デリミタも使用できます。

  • インライン: \(...\) - 例: \(E=mc^2\)
  • ブロック: \[...\] - 例:
    \[
    \frac{1}{2}
    \]
    

AsciiMath (MathJax のみ)

MathJax を使用している場合、区切り文字として % を使用する asciimath の処理を有効にできます: %E=mc^2%

コンポーザー統合

コンポーザーには、ツールバーに数式の挿入ボタンがあり、キーボードショートカットは Shift+M です。これにより、次の操作ができるモーダルが開きます。

  • インラインモードとブロックモードの切り替え
  • LaTeX 式の入力
  • プレビューと投稿への挿入

リッチテキストエディタでは、数式は編集可能なノードとして表示され、式を変更するための編集ボタンがあります。

チャットサポート

数式は、Discourse Chat のメッセージでも、同じ設定とレンダリングエンジンを使用してレンダリングされます。

レンダリングエンジン

MathJax (デフォルト)

  • バージョン: 4.1
  • 出力形式: HTML (デフォルト) または SVG
  • 機能:
    • コンテキストメニュー (数式を右クリック)
    • スクリーンリーダー向けのアクセシビリティ強化
    • Alt+クリックでズーム (175% ズーム)
    • AsciiMath サポート

KaTeX (代替案)

  • 機能:
    • 高速レンダリング
    • 化学式用の Mhchem 拡張機能
    • CopyTex 拡張機能 - 数式をクリックして LaTeX ソースをクリップボードにコピー
    • \label\ref\eqref マクロによる相互参照サポート

サイト設定

“math” で管理画面の設定を検索すると、関連するすべてのサイト設定が表示されます。

名前 説明
discourse math enabled Discourse Math プラグインを有効にする ($ と $$ ブロックに特別な処理を追加)
discourse math provider 数式レンダリングプロバイダー: mathjax (デフォルト) または katex
discourse math enable latex delimiters LaTeX 形式のデリミタを有効にする: インライン用 \(...\)、ブロック用 \[...\]
discourse math mathjax output MathJax の出力形式: html (デフォルト) または svg (MathJax のみ)
discourse math enable menu 数式用のコンテキストメニューを有効にする (MathJax のみ)
discourse math enable accessibility テキスト強化などのアクセシビリティ機能を有効にする (メニュー付き MathJax のみ)
discourse math zoom on click Alt+クリック操作で 175% ズーム (メニュー付き MathJax のみ)
discourse math enable asciimath % デリミタによる asciimath 処理を有効にする (MathJax のみ)

:discourse2: 当社でホストしていますか?このプラグインは、すべてのホスティングティアで利用可能です Math | Discourse - Civilized Discussion

「いいね!」 70

2件の投稿が新しいトピックに分割されました: メールでのMathJax書式のサポートを追加

2件の投稿が新しいトピックに分割されました: Mathjaxをバージョン3にアップグレードできますか?

6件の投稿が新しいトピックに分割されました: LaTeXスタイルのブロックとインラインでの数式サポートの追加

投稿が新しいトピックに分割されました: ブロック内で数式が正しくレンダリングされない

投稿が新しいトピックに分割されました: プレビューで数式がレンダリングされない

15件の投稿が新しいトピック「Math and AI workarounds」に分割されました

26件の投稿が新しいトピックに分割されました: Mathjaxをバージョン4にアップグレードする

Discourse Math の新しい MathJax (v4.1) 統合に移行した後の、実世界での簡単な(肯定的な)所感です。

気づいた品質向上の 1 つは、入力が無効であるかマクロが未定義の場合に、MathJax が非常に具体的で局所的なフィードバックをくれるようになったことです。

  • 周囲の有効な構造(例: \\frac{...}{...}、括弧など)は引き続き正しくレンダリングされます。
  • 認識されないコマンドは、式全体を失敗させたり、混乱を招く部分的なエラーを生成したりするのではなく、文字通りそのまま表示されます(例: \\sinc がテキストとして表示される)。

実際には、何が正しいかを隠すことなく、修正が必要な箇所がすぐにわかるため、特に教育的な文脈や数式を多用する投稿を反復処理する際に非常に役立ちます。

たとえば、\\sinc が定義されていることに頼るのではなく、演算子として明示的に記述する堅牢な方法は次のとおりです。

\frac{\Delta}{T}\operatorname{sinc}\!\left(\frac{\omega_r\Delta}{2}\right)

これには以下が必要です。

\operatorname{sinc}(x)=\frac{\sin x}{x}

全体として、この「可能な限りレンダリングし、残りは明確に表示する」という動作は、以前の/透明性の低いエラーモードと比較して、大きなユーザビリティの向上だと感じます。MathJax のアップグレード作業に関わったすべての方に感謝します。

「いいね!」 3

Google経由でこちらにアクセスされた方に一言。このプラグインは、無料ホスティングプランでは利用できません。 :expressionless_face:

こんにちは、お困りの状況はお察しします。そのようなご感想を持たれたことをお詫び申し上げます。今後のケースについては、こちらhttps://discourse.org/pluginsのプラン別プラグインディレクトリをご覧ください。

数学プラグインは、このページにプロ/ビジネス/エンタープライズ用プラグインとして掲載されています。そのため、無料プランでも利用可能だと誤解されることがあるかもしれません。無料で提供するよう提案しているわけではありません。ただ、もう少し明確にすべきだと考えます。

「いいね!」 1

はい。Discourse pricing | Discourse - Civilized Discussion のページには、プラグインを含め、すべてのプランとその制限がリストされており、どのプラグインが利用可能かすぐに確認できます。

「いいね!」 1

新しいツール「RaTeX」を見つけました。
Rust で書かれており、Katex と 100% 互換性があります。

GitHub - erweixin/RaTeX: >99.5% KaTeX syntax coverage. LaTeX math renderer in pure Rust. No JavaScript, no WebView, no DOM. One Rust core → iOS, Android, Flutter, Web, PNG. C ABI · WASM · Server-side PNG/SVG. · GitHub

良い代替案になるかもしれません。

面白い問題を見つけました。

物理学の問題を計算しているのですが、\dot\ddot は問題なく動作しますが、\dddot が存在しません。さらに、この関数に \dddot が含まれると、その後の数式がすべて正常に動作しなくなります。

「いいね!」 1

@xiasummer \dddot{r}

\dddot{r}.

を試してみましょう。
ここでは動作するようです。MathJax と KaTeX の両方で私のサイトで試しました。

「いいね!」 1