org-babelは、htmlエクスポートのコード出力でコードを置き換えることができますか?


8

ノートのWebページを生成するためにorg-modeを使用しています。追加のHTMLなどを生成するコードを埋め込むことはできますか?org-babelは結果を生成しますが、コードに加えて結果を表示するようです。コード自体を置き換えるHTMLを作成するコードが欲しいです。


1
を使用し:exports resultsます。コードブロックのエクスポートを参照してください。(これがあなたのためにうまくいくかどうか、私がこれを答えに変換する必要があるかどうかを知らせてください。)
Constantine

これはHTMLで動作しますか?結果は<pre>タグ内にあると思います。
h4labs 2014

回答:


6

コメントで述べたように、コードブロックのエクスポートのセクションでは、:exportsオプションの許容値について説明します:(codeブロックの内容)、results(その評価の結果)、both(コードと結果)、none(何もエクスポートされません)。

デフォルトでは、Orgはソースコードブロックの評価結果を解釈しようとします(たとえば、それをテーブルに変換します)。このような解釈が失敗した場合、評価結果はモノスペーステキストとしてフォーマットされ<pre> ... </pre>、HTMLにエクスポートされたときにラップされているように見えます。

幸いにも私たちが使用してブロックの特別な種類の評価結果を置くために組織を伝えることができます:results(参照評価の結果とを:results)。ソースコードブロックを使用してHTMLページの一部を生成できるようにしたい場合は、Or :results value htmlまたは:results output htmlOrgを使用して結果を#+BEGIN_HTML ... #+END_HTMLブロックにラップします。

以下は最小限の例です(#+OPTIONS無関係です。を使用してエクスポートされたHTMLコードを簡単に検査できるように追加しましたC-c C-e h H)。

#+OPTIONS: html-postamble:nil
#+OPTIONS: html-preamble:nil html-scripts:nil html-style:nil
#+OPTIONS: html5-fancy:nil tex:t

Some text.

#+BEGIN_SRC python :exports results :results value html
  return "<hr> Generated HTML code. <hr>"
#+END_SRC

More text.

#+ begin#+ endのようにラップせずにコードブロックを結果で置き換える方法... Pythonスクリプトを使用して図のリストを挿入しようとしています。
godblessfq 2016

6
#+begin_src emacs-lisp :exports none
  (defun org-babel-execute:html (body params) body)
#+end_src

#+begin_src html :exports results :results html
  <input type="button" name="clickme" value="Click Me!">
#+end_src

これにより、ボタン付きのHTMLページ(HTMLへのエクスポート時に)が生成されます。

混乱を避けるため、最初のブロックはエクスポート中に評価されません。ポイントをそれに移動してを押して評価する必要がありC-c C-cます。

さらに、あなたは電話する必要があります

(org-babel-do-load-languages 'org-babel-load-languages '((html . t)))

または、このコードが実行される前に類似しているため、Babelはhtmlブロックを実行可能ファイルとして認識します。

しかし実際には、この例は主に、特定のバックエンドをターゲットとする独自の「言語」を追加する方法を示すことを目的としています。新しい言語を追加せずに、簡単にそれを行うことができます。おそらく、次のようなことを行うことで、複雑さを軽減できます。

#+begin_src emacs-lisp :exports results :results html
  "<input type=\"button\" name=\"clickme\" value=\"Click Me!\">"
#+end_src

私の最初のアプローチの利点は、で編集するとC-c 'html-modeオンになるということです。


また、そのemacsセッションの残りの部分でorg-babel-execute:htmlを再定義します。
Malabarba 14

@Malabarba私はそれがそれを持っていることを知りませんでした(それをしましたか?)。
wvxvw

わからないけど、そうだったと思いました。最初のコードブロックの目的は何ですか?2番目のコードブロックの処理方法を変更する関数を定義していませんか?
Malabarba 14

@Malabarbaうん、でも私の知る限りでははありませんob-html.el。したがって、HTMLのブロックをエクスポートするには、そのような関数を定義する必要があります(私が使用する他のマークアップ、特にYAMLに対してこれを行います)。これは#+begin_html ... #+end_html、変数をブロックに渡すことで、プリミティブテンプレートエンジンとしても使用できるという点が異なります(実際org-babel-execute:htmlよりも複雑です)。
wvxvw

そうですか。今では理にかなっています。
Malabarba 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.