3

これが私がやろうとしていることです:

組織ドキュメントから生成された HTML に表示し、そのコードを HTML ページで実行したい JavaScript コードのスニペットがあります。単純な例として、次のようにします。

  #+NAME: block-name
  #+BEGIN_SRC javascript
  alert("Ding!");
  #+END_SRC

  #+NAME: insert-script
  #+BEGIN_SRC emacs-lisp :export results
  (format "<script type=\"text/javascript\">%s</script>" block-name)
  #+END_SRC

  #+CALL: insert-script()

しかし、これは undefined symbol について文句を言いますblock-name

非常によく似たこの質問を見つけましたが、そこにある答えはうまくいきません。Emacs org-mode で、あるコード ブロックのソース コードを別のコード ブロックへの入力にする

ブロックの内容/名前を参照するための構文は何ですか?

編集:

私は近づいていますが、まだそこにはありません:

   #+NAME: block-name
   #+BEGIN_SRC javascript :exports code
   alert("Ding!");
   #+END_SRC

   #+BEGIN_SRC emacs-lisp :exports results :var script=block-name
   (print (format "<script type=\"text/javascript\">%s</script>" script))
   #+END_SRC

   #+RESULTS:

これには 2 つの問題があります。script変数の値はnilで、スクリプト タグはエスケープされています (山かっこは and に置き換えられてい&lt;ます&gt;。スクリプト タグを評価の外に置くことで、この特定の置換のケースを見つけることができましたが、一般的にこれを防ぐことはできません。ルール (スクリプト内に「より少ない」または「より大きな」記号がある場合、それらは置き換えられます)。

EDIT1:

もうすぐそこ!

org-babel-get-src-block-infovariable に名前が付けられている場合は、コードのブロックのコンテンツをローカルに保存するようにアドバイスしました<name>-text。これにより、後で取得できます。

(defadvice org-babel-get-src-block-info (after org-babel-store-info)
  (let* ((info-copy ad-return-value)
         (block-name (nth 4 info-copy))
         (block-text (nth 1 info-copy)))
    (when block-name
      (set (make-local-variable
            (intern (format "%s-text" block-name))) block-text))
    info-copy))
(ad-activate 'org-babel-get-src-block-info)

使用例:

   #+NAME: block-name
   #+BEGIN_SRC javascript :exports code
   alert("Ding!");
   #+END_SRC

   #+NAME: insert-script
   #+BEGIN_SRC emacs-lisp :exports results :results html
     (print (format "<script type=\"text/javascript\">%s</script>"
                    block-name-text))
   #+END_SRC

   #+RESULTS:

エスケープは:results htmlオプションで処理されます。これにより、Org は HTML を文字どおりに挿入します。


  #+NAME: math
  #+BEGIN_SRC js :exports none :noweb yes
    // Logarithm of base two:
    var y = Math.log(x) / Math.log(2);
  #+END_SRC

  #+BEGIN_SRC emacs-lisp :tagnle example :exports results :noweb yes :results html
    (print (format "<script>%s</script>" "<<math>>"))
  #+END_SRC

  #+RESULTS:

失敗する最小限の例を次に示します。

しかし、これは機能し、「期待される」結果を生成します:

  #+NAME: math
  #+BEGIN_SRC js :exports none :noweb yes
    // Logarithm of base two:
    var y = Math.log(x) / Math.log(2);
  #+END_SRC

  #+BEGIN_SRC emacs-lisp :tagnle example :exports both :noweb yes :results html
    ; <<math>>
    (print (format "<script>%s</script>" "your script could be here"))
  #+END_SRC

の出力<script>your script could be here</script>と、eLisp コード ブロックのコメント内の JavaScript コード。

4

2 に答える 2

-1
#+BEGIN_HTML
<script>
    (function(){alert("ding !");})();
</script>
#+END_HTML
于 2014-10-22T21:09:01.770 に答える