18 Jun 2017, 16:51

MathJax を使って WordPress に org2blog で数式ありの投稿をする

このブログは、org2blog というライブラリを使って、 Emacs org-mode でかかれた文章を HTML に変換して投稿している。

今回、org-mode から HTML へ変換した文章中で 数式を扱う方法を調べてみた。

MathJax をつかう

MathJax とは、javascript でかかれた 数式を表示するためのライブラリ。 Latex なみの数式表現が扱えるようになる。

すべてのブラウザで動作し、表示するクライアント側での設定はいらない。

さらに、MathJax のファイル群のインストールは必要ない。

MathJax は、コンテンツデリバリネットワーク(Contents Delivery Network、CDN)で公開・配信されているので、 JavaScript ライブラリをダウンロードして、サーバーにアップロードといった作業は必要はないのである。

MathJax を使用するには、<html>…</html> タグの中に以下を書く。

<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>

<body>…</body> の中で、MathJax の記法(MathML、LaTeX、ASCIIMathML)を使って数式を書くと、 数式がレンダリングされる。

org-mode で MathJax をつかう

org-mode は MathJax にデフォルトで対応しているようだ(version. 9.0.5)

なので、org-mode の文章中に 数式を 書いて、org-export で HTML 形式で export すればよい。

これに今まで気づかなかったのは、自分の環境では、#+OPTIONS: TeX:nil を指定していたから。 ここは、Tex t でなければいけない。

Default の設定だと参照する MathJax の version が古いらしく、以下の設定で最新が使える。

(setf org-html-mathjax-options
      '((path "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML")
        (scale "100") 
        (align "center") 
        (indent "2em")
        (mathml nil))
      )
(setf org-html-mathjax-template
      "<script type=\"text/javascript\" src=\"%PATH\"></script>")

org2blog は、html 形式に org-mode の文章を変換してから、WordPress にアップロードする。 org2blog で WordPress に投稿すれば、WordPress 上でも数式が表示される。

Example

\[〜\] で囲んで数式を表示

\[f(a)= \frac{1}{2\pi i}\oint_{\Gamma} \frac{f(z)}{z-a}dz\]

$$f(a)= \frac{1}{2\pi i}\oint_{\Gamma} \frac{f(z)}{z-a}dz$$

\(〜\) で囲んで本文中に表示

\(〜\) で囲んで、本文中に$a$を表示。

参考

あとは、Latex 記法を覚えるだけだ。(これが一番大変)

07 Jan 2017, 09:40

babel-loader:org-mode で init.el を管理する方法

私の現時点での.emacs 管理方法を紹介します。リポジトリは以下です。

org ファイルがならんでます。そうです!

emacs の設定ファイルを org-mode で管理しています。

org-mode で書いた設定ファイルを hoge.org -> hoge.el に変換しています。

それを可能にするパッケージが、babel-loader です。

org-mode で init.el を管理することで得られる 7 つの恩恵

benel-loader は init-loder と組み合わせることによって、効果を発揮します。 hoge.org -> hoge.el に変換したファイルを init-loader によって、 一つずつロードしていくからです。

rubikitch さんが以下のような記事を年末に書きました。

それにならって、org-mode で init.el を管理することの恩恵を考えて見たいと思います。

  1. 説明をコメントとして書かないですむ。… ;; で説明をコメントアウトする見苦しさとはおさらば。
  2. 説明とコードを一緒に 一元管理できる。… Run Book Automation です。
  3. org-mode に慣れていれば説明を書きやすい。… I love org-mode!!
  4. org-mode の折りたたみ機能によって、階層的に設定を管理できる。
  5. 設定ファイルがブログ記事になる … こんな感じです。Emacs プログラミング言語開発環境 | Futurismo
  6. 読みやすい。他人に見せやすい。… とくに github にあげるといい感じにシンタックスハイライトしてくれる。
  7. 書いていて楽しい!!

私の Emacs 起動方法

以下、自分き Emacs の起動順序について抜粋しながら書く。

フォルダ構成

フォルダ構成はこんな感じ。

.emacs.d
  |- init.el ... 一番初めに起動されるファイル
  |- inits ... org ファイルが入っているディレクトリ
       |- 00_init.org
       |- ....
       |- 90_color.org
  |- el-get
      |- repo 
          |- el-get 
          |- el-get で取得したパッケージ群
      |- user-recipes ... el-get 用の自分のレシピ

init.el: el-get

まずは、el-get を一番初めにダウンロードする。

;; el-get ロードパス設定
(add-to-list 'load-path (locate-user-emacs-file "el-get/repo/el-get"))

;; ダウンロードした elisp 置き場
(setq el-get-dir "~/.emacs.d/el-get/repo")

;; ダウンロードしていないときはダウンロード
(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "http://raw.github.com/dimitri/el-get/master/el-get-install.el")
    (let (el-get-master-branch)
      (goto-char (point-max))
      (eval-print-last-sexp))))

;; 初期化処理用
(setq el-get-user-package-directory "~/.emacs.d/el-get/init-files")

;; レシピ置き場
;; 追加のレシピ置き場
(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get/user-recipes")

init.el: org-mode

org-mode を読み込む。load-path に

;; org-mode/lisp, org-mode/contribe/lisp をロードパスに追加する
(let* ((org-dir (expand-file-name
                 "lisp" (expand-file-name
                         "org-mode" el-get-dir)))
       (org-contrib-dir (expand-file-name
                         "lisp" (expand-file-name
                                 "contrib" (expand-file-name
                                            ".." org-dir)))))
  (setq load-path (append (list org-dir org-contrib-dir)
                          (or load-path nil))))
(require 'org)

init.el: init-loader

(el-get-bundle emacs-jp/init-loader)

;; バイトコンパイルする
;; 初めのバイトコンパイルは手動で実施する必要がある
(setq init-loader-byte-compile t)

;; エラー発生時にだけ log を開く
;; (setq init-loader-show-log-after-init t)
(setq init-loader-show-log-after-init 'error-only)

init.el: babel-loader

el-get で babel-loader をインストール

(el-get-bundle takaishi/babel-loader.el)
(add-to-list 'load-path (locate-user-emacs-file "el-get/repo/babel-loader.el"))
(require 'babel-loader)

;; インデント保持
;; これをしないと 変換された elisp ファイルのインデントがずれる.
(setq org-src-preserve-indentation t)

;; inits 配下の org ファイルを elc に変換して読み込み.
(bl:load-dir "~/.emacs.d/inits/")

inits:00_init.org フォルダを再帰的にロードパスに追加

;; @ load-path
;; for Emacs 23 under
(defvar user-emacs-directory "~/.emacs.d")

;; load-path の追加関数
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name (concat user-emacs-directory path))))
    (add-to-list 'load-path default-directory)
    (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
        (normal-top-level-add-subdirs-to-load-path))))))

;; load-path に追加するフォルダ
;; 2 つ以上フォルダを指定する場合の引数 => (add-to-load-path "elisp" "xxx" "xxx")
(add-to-load-path "elisp" "inits" "el-get" "local" "mylisp")

inits:00_init.org: use-package

パッケージ管理のパッケージ

(package-initialize nil)
(el-get-bundle use-package)

;; use-package が存在しないときはなにもしない
(add-to-list 'load-path "~/.emacs.d/el-get/repo/use-package")
(unless (require 'use-package nil t)
  (defmacro use-package (&rest args)))

inits:00_init.org: el-get 同期 Package

el-get で自動にインストールするパッケージをひたすら列挙。

(defvar my/el-get-packages-all
  '(
    ;; 03_display
    popwin
    switch-window
    isearch-dabbrev
    ;; open-junk-file
    iy-go-to-char
    key-chord
    jump-char
    recentf-ext
    stripe-buffer

    ;; 20_text
    hydra
    swiper
    yasnippet
    dired-k
    migemo
    undo-tree
    define-word
    auto-complete
    anzu
    auto-highlight-symbol
    highlight-symbol
    multiple-cursors
    bm
    emacs-async
    pcre2el
    ht
    iedit
    codic
    search-web
    wgrep
    expand-region
    ag
    auto-capitalize
    omni-kill

    ;; 以下省略
    )
  "A list of packages to install from el-get at launch.")

inits: 00_init.org el-get config

;; 通知は minibuffer のみ
(setq el-get-notify-type 'message)

;; パッケージをインストール
(el-get 'sync my/el-get-packages-all)

inits: 01_global.org … 90_color.org

babel-loader によって、次々と org ファイルを el に変換して読み込んでいく。

Special Thanks

06 Dec 2016, 06:46

org2blog で BEGIN_HTML が動かない場合の対処方法

いつも、このブログは org2blog を利用して、Emacs から書いているのだが、

#+BEGIN_HTML

#+END_HTML

を書いても、HTML を記事の中に埋め込むことができなくなった。

解決方法

いろいろと試行錯誤してみたところ、以下の書き方だとうまくいった。

#+begin_export html

#+end_export

誰かの参考になればとおもいメモ。

22 Aug 2015, 14:50

org-modeでマイクロブログ!! org-agendaに twitterのつぶやきを表示する方法

org-agendaに twitterのつぶやきを表示してみました.

これらの関連記事のまとめになります.

方法

以下のようなRuby スクリプトをかいて、自分のつぶやきをorg形式で保存. rubyからtwitterのtweetを取得するために、twitter gemを利用.

#!/usr/bin/ruby
require 'twitter'
require 'pp'

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

lines = nil

# ファイルに保存してあるツイートを一旦読込み
File.open("/home/tsu-nera/gtd/journal/twitter.org", "r") do |file|
  lines = file.readlines
end

# ツイートを配列に挿入
client.user_timeline("tsu_nera").each do |tweet|
  t = tweet.created_at.dup.utc.localtime
  lines << "** <#{t.strftime("%Y-%m-%d %H:%M")}> #{tweet.text}\n"
end

# 重複除去
lines.uniq!

# 書き込み
File.open("/home/tsu-nera/gtd/journal/twitter.org", "w") do |file|
  lines.each do |line|
    file.puts line
  end
end

以下のような感じで保存される.

** <2015-08-22 22:43> 投稿テスト
** <2015-08-22 22:23> twitterの投稿をorg-agandaからみることができるかどうかテスト
** <2015-08-22 21:51> clojureを写経してばかりいるけど、自分で一からかける気がしないなぁ。
** <2015-08-22 19:21> test
** <2015-08-20 21:59> 名言を書き溜めてEmacsからランダムに参照するというライフハック。https://t.co/DYmuvM3Faq
** <2015-08-16 23:19> courseraの講義受けて同じようにアルゴリズム取引に挑戦したけど、全く儲からずに泣いている自分がここにいます。 / “自家製プログラムでアルゴリズム取引に励む個人投資家 - WSJ” http://t.co/VzE8Rl9aTc
** <2015-08-10 01:06> ドラクエ3の性格占い、しあわせものだった。
** <2015-08-09 22:17> 集中力がおちたと最近とても感じる。
** <2015-08-09 20:51> clojureで為替レートを取得する処理を書いてみた。https://t.co/lUgKXdfp2o
** <2015-08-09 14:45> walkcar http://t.co/xakyqwcqid
** <2015-08-09 14:42> walkcarほしい。会社の通勤使いたい。これで遅刻しなくてすむ。https://t.co/Tu0trSq4tf
** <2015-08-09 13:34> ニューラルネットワークによる自動作曲。信じられない…。http://t.co/WD2NAwFXxN
** <2015-08-08 14:22> 最近、無駄についつい本を買って積ん読してしまう。でも、FXで湯水のごとくお金がなくなっていくので、もうどうでもいいやと思えてきた。
** <2015-08-08 05:58> @kanata_56 違う言語を学ぶと見える世界も変わりますね。
** <2015-08-08 04:00> ネストの深さは悪しきものだと思っていたが、今はカッコの深さがカッコいいと思う今日この頃。
** <2015-08-08 01:33> もう3か月も仕事でプログラミングしてない。こんな状態が続くなら畜生転職だ。
** <2015-08-08 01:29> 今週も仕事が暇で辛かった。
** <2015-08-06 19:19> かった!よむ! http://t.co/306Ai5M6LF
** <2015-08-04 04:19> 4時なのに眠れない。明日の会社のC言語テストはズタボロだな。
** <2015-08-03 23:16> ランボー怒りのシャワー浴びよ

このファイルを org-agenaの対象ファイルに指定する.

(setq org-agenda-files '("~/gtd/main.org"
                         "~/gtd/inbox.org"
                         "~/gtd/journal/journal.org"
                         "~/gtd/journal/twitter.org"
                         "~/gtd/habits.org"))

これで、org-agenda view をみると、 twitterのコメントが時間つきで表示されているのだ.

なにができるようになったか

以前, org-journalに書き溜めたコメントを org-agendaでみるハックを書いた.

今回、twitterのつぶやきが org-agendaで見られるようになった. このことによって、

  • 公開したいつぶやきは、twitterへ
  • 非公開のつぶやきは、 org-journalへ

というように分けることができるようになった. どちらの書き込みにも、ミニバッファから投稿できるようにした.

twitterをミニバッファ経由での書き込みにするには、以下の記事を.

org-journalへミニバッファからコメントを書くには、 以下の関数を呼べばいい.

(defun org-journal-from-minibuffer (x)
  "write from minibuffer"
  (interactive "sEnter message: ")
  (let ((tweet-message
         (concat "** " (format-time-string org-journal-time-format) x "\n")))
    (write-region tweet-message nil
                  (concat org-journal-dir org-journal-file-format) 'append))))

これで、個人のつぶやきをミニバッファから書き溜めて、 org-agendaという統一 viewで閲覧することができるようになった.

以上、Happy Hacking!!

08 Aug 2015, 10:54

xmobarに org-clockの状態と時刻を表示する超コネタ

org-clockと xmobarを愛用しているひとのための超コネタ.

org-clockの状態を xmobarに表示します.

clock状態を表示する

以下のスクリプトをまずは用意して、パスの通った場所におく.

  • xmobar-clocking-monitor.sh
#!/bin/bash
if [[ $(emacsclient --e '(org-clocking-p)') == 't' ]] ; then
    echo "<fc=grey,#000000>"
else
    echo "<fc=white,#ff0000>"
fi

.xmobarrcの設定はあとで書きます.

clocking時間を表示する

以下のelispを書くと、現在の時間をファイルに吐き出してくれる.

(display-time)
(defun esf/org-clocking-info-to-file ()
  (with-temp-file "~/tmp/clocking"
    ;; (message (org-clock-get-clock-string))
    (if (org-clock-is-active)
        (insert (format "org: %d (%d/%d) min"

                        (- (org-clock-get-clocked-time) org-clock-total-time)
                        org-clock-total-time
                        (org-clock-get-clocked-time))

                )
      ) ;;(org-clock-get-clock-string)
    )
  )
(add-hook 'display-time-hook 'esf/org-clocking-info-to-file)

.xmobarrcの設定

以下のように設定を書く. これで、xmobar上に、clock状態と clocking時刻が表示される.

Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
       , borderColor = "black"
       , border = TopB
       , bgColor = "black"
       , fgColor = "grey"
       , position = TopW L 90
       , lowerOnStart = True
       , persistent = False
       , commands = [ Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
            -- , Run Swap [] 10
                    , Run Battery ["Bat0"] 600
                    , Run Com "xmobar-clock-monitor.sh" [] "orgClock" 10
                    , Run Com "sh" ["-c", "cat ~/tmp/clocking"] "orgShow" 10
                , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
            ]   
       , sepChar = "%"
       , alignSep = "}{"
       , template = "%cpu% | %memory% | %battery% }{ <fc=#ee9a00>%date%</fc> %orgClock%clock</fc> %orgShow%"
       }

以上、Happy Hacking!!

08 Aug 2015, 07:45

org-clockでのタイムトラッキングを絶対に忘れない方法

Emacs org-modeの org-clocking機能は、 とても便利なタイムトラッキングツールで気に入っている.

しかし、よく時間をはかるのを忘れる。なんとかできないかと考えたお話.

時間をはかっていないとgntpでデスクトップ通知

時間計測中かどうかは、org-cloking-pという関数で分かる. この真偽を5秒ごとに監視して、時間計測をしていなかったらデスクトップ 通知をウザったく出すことにした.

EmacsでGrowlデスクトップ通知をするには、以下のライブラリが使える.

以下のように設定を書いた. What are you doing??

(defun org-clocking-alart ()
  (unless (org-clocking-p)
    (gntp-notify 'alert "What are you doing!!"
                 "You should start clocking ('・_・`)"
                 "localhost")))
(run-at-time t 5 'org-clocking-alart)

これはウザい….(‘・_・`)

clock-in / out でも通知

ついでに、clockin,out時にも通知がでるようにした. これはいい.

(add-hook 'org-clock-in-hook
          (lambda ()
            (gntp-notify 'alert "Clock In"
                         "Happy Hacking! (^o^)/"
                         "localhost")))

(add-hook 'org-clock-out-hook
          (lambda ()
            (gntp-notify 'alert "Clock Out"
                         "Good Job!"
                         "localhost")))

clockin で 時間見積り

ついでについでに、clock-inするときに、時間見積りを必ずするようにした.

(add-hook 'org-clock-in-prepare-hook
          'my/org-mode-ask-effort)

(defun my/org-mode-ask-effort ()
  "Ask for an effort estimate when clocking in."
  (unless (org-entry-get (point) "Effort")
    (let ((effort
           (completing-read
            "Effort: "
            (org-entry-get-multivalued-property (point) "Effort"))))
      (unless (equal effort "")
        (org-set-property "Effort" effort)))))

以上、Happy Hacking!!

06 May 2015, 12:51

その場の感情を ライフログ!! org-journal でひとりツイッターする

自分は、あまり twitter につぶやかない.

なぜなら、つぶやくとタイムラインが、ドロドロの鬱ったーにかわるので.

感情は、しかし、どこかに吐き出さないと、健康によくない.

そこで、その場の感情を即座に記録するための仕組みを org-journal で実現したので紹介.

org-journal でできること

org-journal は、Emacs から即座に、日記を書くための elisp.

できることは、

  1. ショートカット(C-c C-j)で journal.org を開く.
  2. 日付を挿入する.
  3. 感情を書き留める.
  4. org-journal を去る.

以下、自分の設定例.

(require 'org-journal)

(setq org-journal-date-format "%x")
(setq org-journal-time-format "<%Y-%m-%d %R> ")
(setq org-journal-file-format "journal.org")
(setq org-journal-dir "~/gtd/journal/")

上記設定では、journal.org ファイルにどんどん書き込んでいくが、 日付ごとに記録するファイルをわけることも可能だ.

実は org-capture でもできる

これだけならば、org-capture でもできないことはない. org-journal は、設定が org-capture に比べて特化している.

org-agenda で一日の振り返り

この機能の好きなところは、org-agenda との連携.

以下のようにタイムスタンプを挿入するように設定して、 journal.org を agenda ファイル対象にすることで、 org-agenda view につぶやきを載せることができる.

(setq org-journal-time-format "<%Y-%m-%d %R> ")

howm で過去ログを検索

howm テキストファイルを evernote のように管理するツール.

howm はデータをひとつのフォルダに保存するのだが、 このフォルダから、org-journal のフォルダにシンボリックリンク をはることで、howm から org-journal 結果が検索できる.

howm には、過去のいろいろな情報を溜め込んでいるので、 過去に相談したくなったら、howm から org-journal が引けるのはうれしい.

以上、Happy Hacking!!

04 May 2015, 17:03

ボクの考えた Emacs org-mode による TaskChute の実施方法

最近、自分のタスク管理がズタボロである.

数年前は、ライフハックに熱をあげてバリバリ頑張っていたのだが、 いまやタスクに終われてシクハックに熱をあげているという状態.

具体的には、週末に MOOC の課題に追われてしまう. 本来ならば、毎日コツコツと勉強していればよいのだが、 平日に関係ない割り込みのタスクをしてまう結果、週末にバタバタする.

そこで、自分のタスク管理について、見直してみることにした.

なにが問題か? 課題はなにか?

  • どのくらい自由な時間があるのか
  • どのくらいのタスクをかかえているのか

この 2 つを把握していないところが問題だ.

譬えれば、デパートに買い物にいったものの、 自分がいくらお財布にお金を持っているのか知らない状態. 気づけば、買い物をしすぎて、支払いができなくなっていた…

さらに、問題点を深堀りすると、 一日の仕事量は感覚的に分かるのだけれども、 一週間くらいの 長期間での空き時間とタスクの関係 がわからない.

なので、*1 週間の空き時間とタスクの量を見積もること* が今回の課題.

そこでタスクシュートだ!

作業量を見積もるためのタスク管理手法について、 タスクシュートがつかえそうだった.

タスクシュートは、やることをすべて洗い出して、 一列に並べて処理していくツール. 詳しくは、以下.

今回は、みんな大好き?Emacs org-mode でこれらをどう実現するかを考えた.

org-mode による実現方法

時間を見積もる

org-mode には、時間を見積もる機能があるので、これを利用する.

アジェンダビューから C-c C-x C-c で カラムビューを起動して、 閲覧、編集をする.

カラムビューの設定

以下、カラムビューのための基本的な設定.

; global Effort estimate values
(setq org-global-properties (quote ((
      "Effort_ALL" . "00:05 00:10 00:15 00:30 01:00 01:30 02:00 02:30 03:00"))))
;; カラムビューで表示する項目
;; Column の書式は以下.
;; [http://orgmode.org/manual/Column-attributes.html#Column-attributes
(setq org-columns-default-format "%50ITEM(Task) %10Effort(Effort){:} %10CLOCKSUM_T(Clock)")

以下の設定を書くと、見積り時間を合計して表示してくれる.

(setq org-agenda-columns-add-appointments-to-effort-sum t)

見積りのタイミングは一週間に一度

週のはじめに、一週間分のタスクの洗い出しと見積りを実施する.

自分は、その時にタスクに next タグをつけることによって、 agenda view でフィルタリングできるようにした.

agenda-view の設定は以下.

(setq org-agenda-custom-commands 
      '(
       ("n" "Next Action List"
        tags-todo "next"
        ((org-agenda-prefix-format " %6e ")))))

その日のタスクがいつ終わるかをみつもる

agenda-view で、今日のタスクだけを絞り込み、 カラムビューをみることによって、あと何時間タスクの完了にかかるかを 調べることができる.

agenda-view の設定は以下.ここでは、アジェンダを開くと即座にカラム に移行させている.

(setq org-agenda-custom-commands 
      '(
       ("c" ""
        tags-todo "SCHEDULED=\"<+0d>\"" 
        ((org-agenda-overriding-header "TaskChute TODO")
         (org-agenda-overriding-columns-format "%50ITEM(Task) %10Effort(Effort){:}")
         (org-agenda-view-columns-initially t)))))

時間の余裕を把握する

もともとの課題の解決のために以下のような表を作成した.

Day Free Time Amount time Effort Comment


Sat 12
Sun 12
Mon 0 46 GW Tsu 12 34 GW Wed 12 22 GW Thu 5 17
Fri 5 12

  • どのくらい自由な時間があるのか
  • どのくらいのタスクをかかえているのか

ということをこの表で確認する. どのくらいのタスクというところを、 先ほどの effort の合計見積りの値からもとめる.

時間帯を決める

タスクシュートには、時間帯という考え方がある. その時間帯に実施するタスクを決めることによって、 タスク実施の強制力がかかるというもの.

org-mode では、priority の機能によって実現することにした.

  • A: 04:00 - 07:00
  • B: 07:00 - 10:00
  • C: 10:00 - 13:00
  • D: 13:00 - 16:00
  • E: 16:00 - 19:00
  • F: 19:00 - 22:00
  • G: 22:00 - 25:00
(setq org-highest-priority ?A)
(setq org-lowest-priority ?G)
(setq org-default-priority ?G)

時間を計測する

時間計測は、org-mode のデフォルト機能を利用.

計測結果もまた、agenda view でみることができる. 見積りと比較することで、見積りの甘さをチェック.

さらに、agenda view で v c をおすと、 見積りと実績の差分を強調して表示してくれたりする.

おわりに

歴史は繰り返す、ということを書く.

思い返せば、3 年前の GW に、Outlook でタスクシュートをしようとしていた. 3 年経った今、Emacs によるタスクシュートに挑戦している.

なんだか、同じところをグルグル回っている気がするよ.

02 May 2015, 10:29

Emacs org-mode でPowerPoint資料を作成してみる(beamer)(失敗)

前回の続きです.

前回は、ODT経由でPowerPoint資料をつくろうとして、失敗しました. 今回は、Beamer(Latex)経由で作成してみます.

結論から書くと、beamerの方法も挫折しましたが、 もう PowerPointに変換しなくてもbeamerでいいじゃん とおもってきました.

org-mode形式 -> beamer形式 -> PDF形式 -> ODP形式 -> PPT形式

ox-beamerパッケージを利用する. これは、org-modeにデフォルトで入っているので、 以下のようにrequireする.

(require 'ox-beamer)

実行のためには、 pdflatex コマンドが必要. Latex環境をまるまるインストールしてしましった.

M-x org-beamer-export-to-pdf を実行すると、 beamerをPDFに変換したものを出力できる.

文字化けについて

UTF-8でないと変換できなかった. また、 pdflatexコマンドだと失敗するので、 実行のためのコマンドをpdfplatexコマンドに変更した.

(setq org-latex-pdf-process
  '("pdfplatex %f"
    "pdfplatex %f"
    "pdfplatex %f"))

PPTへの変換

PDFから PPTへうまい方法が見つからない..

以下の方法がみつかったが、どうもうまくいかない.

Special Thanks

この動画に惹かれた.

02 May 2015, 08:15

Emacs org-mode でPowerPoint資料を作成してみる(ODT経由)(失敗)

職場で作成するドキュメントはWordかExcel, PowerPointが標準だ. 最近、Lyncが社内に導入された関係でやけにPowerPointで資料を作成する 風土が増えてきた.

チキンなボクは、そんな風土に歯向かうほどの勇気がないので、 長いものにまかれてMicrosoft製品を使わざるを得ない. そこで、Emacs org-modeで PowerPointの資料がつくれないものか調べてみた.

結果的に失敗したのだが、かわりに Word仕様書をorg-modeで書く技 をみつけた.

方針

大きく分けて、以下の2つの方法があるようだ.

環境

  • Windows 8.1
  • PowerPoint 2013

実は、PowerPointを自宅に持っていないので、評価版を利用.

org-mode形式 -> ODT形式 -> ODP形式 -> PPT形式

org-mode から ODT形式に変換

ox-odtパッケージを利用する.

これは、org-modeにデフォルトで入っているので、 以下のようにrequireする.

(require 'ox-odt)

実行のためには、

  • zip
  • unzip

コマンドに環境変数PATHが通っている必要があった. 自分の場合は、cygwinからダウンロードしたコマンドにパスを通した.

M-x org-odt-export-to-odt を実行すれば、odt形式のファイルが作成される.

ODT形式から PPT形式に変換

LibreOffice Writer からODTファイルを開く.

ファイル -> 送る -> プレゼンテーションに自動抽出

を選択.ODP形式でパワーポイントに出力される. それを PPTとして保存.

これでいけた!と思いきや… アウトラインしか出力されず、中身空っぽ.. これでは使えない(#゜Д゜)y-~~

しかし、このodtを Word形式やPDF形式に変換することで、 仕様書がorg-modeで作成できる!(\^_\^;)

おわりに

今回の記事では、PPTの作成ができなかった. 次回? beamerを試してみる.

怪我の香味で、ODTファイルをWord変換やPDF変換する方法が試せた. このことによって、

仕様書をorg-modeで執筆することができる

これは、とても嬉しいことだ.