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 件のコメント:
コメントを投稿