21

私はmath.stackexchange.comのものとほとんど同じように見えるはずのUIを実装しています:

  1. stackoverflowで慣れ親しんだような派手な Markdown の使用
  2. $...記号の間で MathJax を使用して数式を解析して$います。

そこで、PageDown のデモをダウンロードしてセットアップしました。これは非常にうまく機能します。ここで、変更のたびに MathJax が動的に読み込まれるようにし<textarea>ます。

MathJax にはこのアプローチのがありますが、実行できません。これは「私の」コードがどのように見えるかです:

     <link rel="stylesheet" type="text/css" href="demo.css" />

    <script type="text/javascript" src="../../Markdown.Converter.js"></script>
    <script type="text/javascript" src="../../Markdown.Sanitizer.js"></script>
    <script type="text/javascript" src="../../Markdown.Editor.js"></script>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.js"></script>
    <script type="text/x-mathjax-config">
      MathJax.Hub.Config({
        tex2jax: {
          inlineMath: [["$","$"],["\\(","\\)"]]
        }
      });
    $("#wmd-input").keypress(function(event){
        UpdateMath($(this).val());
    });
    </script>
    <script type="text/javascript" src="../../../mathjax-MathJax-07669ac/MathJax.js?config=TeX-AMS_HTML-full">
    </script>
</head>
<body>
    <script>
      (function () {
        var QUEUE = MathJax.Hub.queue;  // shorthand for the queue
        var math = null;                // the element jax for the math output.

        QUEUE.Push(function () {
          math = MathJax.Hub.getAllJax("#wmd-preview")[0];
        });

        window.UpdateMath = function (TeX) {
          QUEUE.Push(["Text",math,"\\displaystyle{"+TeX+"}"]);
        }
      })();
    </script>

    <div class="wmd-panel">
        <div id="wmd-button-bar"></div>
        <textarea class="wmd-input" id="wmd-input" value=""/>

    </textarea>
    </div>
    <div id="wmd-preview" class="wmd-panel wmd-preview"></div>
    <br /> <br />
    <script type="text/javascript">(function () {
                 var converter1 = Markdown.getSanitizingConverter();
            var editor1 = new Markdown.Editor(converter1);
            editor1.run();
        })();
    </script>
</body>

このスニペットは、keypressイベントが発生するたびにプレビューを更新する必要があります。代わりに、ページのオンロードではテックスは正常にレンダリングされますが、入力を開始するとすぐに$...$コードがプレビューボックスに出力されます。

4

4 に答える 4

24

現在のセットアップにはいくつかの問題があります。まず、お借りした例は、複数の式を含む段落ではなく、単一の式を更新する例です。そのためには、 2 番目の動的な例(MathJax の例のページから)を検討する必要があります。値に関係するエラー メッセージがブラウザー コンソールに表示されるはずですnull(最初にエディターで何らかの計算を開始しない限り、エラー メッセージが表示されます)。mathnull

ただし、wmd エディターが wmd-preview 領域を更新するという 2 つ目の問題があり、MathJax の更新を行うために調整する必要があります。そうしないと、MathJax が作業している間に div の内容が変更される可能性があります。 . また、Wmd は、キーを押すたびに更新するよりもスマートに更新を行うため (たとえば、矢印キーでは更新が行われない)、調整もより効率的になります。wmd の SE バージョンには、それを可能にするフックがあります。

最後に、Markdown エンジンから数学を保護するために、さらに多くの作業を行う必要があります。これにより、アンダースコアやバックスラッシュなどが数学に表示されたときに Markdown によって処理されなくなります。これは少しトリッキーですが、それがないと、TeX コードが適切に処理されないという多くの問題に遭遇します。

最後の 2 つの問題に対処するには、MathJax を wmd にフックするために MSE で使用されるコードを調べることを検討してください。おそらく、それはあなたにそれを行う方法についての手がかりを与えるでしょう.

于 2012-06-27T16:35:07.030 に答える
15

マーク( Pagedownとは別の Markdown ライブラリ) と "MathJax" を "markdown+mathjax ライブ エディター" に結合しました。

デモを参照してください: http://kerzol.github.io/markdown-mathjax/editor.html

ソースを入手してください: https://github.com/kerzol/markdown-mathjax

于 2014-02-04T20:53:59.540 に答える
13

Stack Exchange のmathjax-editing.jsを少し変更して、Pagedown と MathJax を連携させる方法の基本的な例を作成しました。

Stack Exchange のコードは Davide Cervone のコードに基づいています。別の回答に関する彼のコメントを参照してください

サンプルのコードはgithubで見ることができます。

于 2015-10-16T23:51:38.770 に答える
7

Stack Overflow の Geoff Dalgas が、MathJax + PageDown 統合コードGist としてリリースしました。詳細については、メタ投稿を参照してください。

于 2016-02-12T16:55:38.720 に答える