2019年8月29日木曜日

Emacs の ox-hugo で HUGO を (2)

org-mode の babel(org-src) で PlantUML のスクリプトを記述して、ox-hugo で Hugo に反映できるかやってみた。

  • まず、emacs で plantuml-mode をインストしておく。

    (use-package plantuml-mode :ensure t
      :mode (("\\.plantuml\\'"  . plantuml-mode)
             ("\\.ptuml\\'" . plantuml-mode))
      :config
      (setq plantuml-jar-path (expand-file-name "~/bin/plantuml.jar"))
      (setq plantuml-exec-mode '(jar))
      )
    
  • 次に、org-mode の babel で plantuml を有効にしたりする。

      (use-package ob :ensure nil :after org :demand
        :config
        (setq org-confirm-babel-evaluate t)  ;; 実行は確認してから
        ;; = blockdiag
        (use-package ob-blockdiag :ensure t :demand :after ob)
        ;; = mermaid
        (use-package ob-mermaid :ensure t :demand :after ob
          :mode  ("\\.mmd\\'" . mermaid-mode)
          :config
          (setq ob-mermaid-cli-path "/home/ほげ/.yarn/bin/mmdc")
          )
        ;; = plantuml
        (setq org-plantuml-jar-path (expand-file-name "~/bin/plantuml.jar"))
        ;;
        ;; = gnuplot これをインストしないと動かなかった。 [2019-08-13]
        (use-package gnuplot :ensure t :demand  :after ob)
        ;;
        ;; = active Babel languages
        (org-babel-do-load-languages
         'org-babel-load-languages
         '((R          . t)
           (emacs-lisp . t)
           (awk        . t)
           (shell      . t)
           (python     . t)
           (perl       . t)
           (dot        . t)
           (gnuplot    . t)
           (ditaa      . t)
           (mermaid    . t)
           (plantuml   . t)
           ))
        ;;                  ;
        (add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))
        (add-to-list 'org-src-lang-modes '("diag" . xdiag)) ;; blockdiag
        (add-to-list 'org-src-lang-modes '("mermaid" . mermaid))
        (add-to-list 'org-src-lang-modes '("plantuml" . plantuml))
        (add-to-list 'org-src-lang-modes '("gnuplot" . gnuplot))
        )
    
  • hugo の org file での記述は以下。both が code なら、コードだけ。 `:exports` の オプションは、code, results, both, none。

        #+caption: plantuml test code 00
        #+name: plantuml-code-00
        #+BEGIN_SRC plantuml :file plantuml_test1.png :cmdline -charset UTF-8 :exports code
        @startuml
        class Foo1 {
          複数行に
          対応している。
          ..
          as you want
          and group
          ==
          things together.
          __
          You can have as many groups
          as you want
          --
          End of class
        }
    
        class User {
          .. Simple Getter ..
    ​      + getName()
    ​      + getAddress()
          .. Some setter ..
    ​      + setName()
          __ private data __
          int age
          -- encrypted --
          String password
        }
        @enduml
        #+END_SRC
    
        #+CAPTION: plantuml test 01 result
        #+RESULTS:
        [[file:plantuml_test1.png]]
    

    caption の使い方が良く解らない。 both にしたときの、result のキャプション指定が別らなかった。とりあえず、code にして、手作業で指定。 blogg的な使い方なんで、キャプション抜きでよいか。

    あと、hugo での build も、 shell ではなく、 org-babel で行うようにした。 hugo は早いけど、やはり十数秒必要なので、オプションで `:async` を設定してみた。 (万能ではないので、動作確認が必要みたい)

        #+BEGIN_SRC shell :async
        cd ~/Documents/mup/hugo; hugo
        #+END_SRC
    

画像の作成は、sphinx のように、ビルダー側でなく、 emacs 側でハンドリングするので、他のスクリプトも、emacs で作業できるなら、 使えるということだろう。当たり前か。

しかし、postが少し増えると、ファイルがすぐに大きくなるので、 org-refile や org-archive なんかが頻繁に必要になるかもと思う。個別ファイルの方が良かったかも。杞憂?

org-refile は、起動に時間がかかるので、avy-org-refile-as-child が使えないかと...

0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...