文章書きのためのEmacs活用法
(2020年4月27日更新) キーが少しかぶってうまく動かないことがあるので、imenu-listとvisual-line-modeの起動キーを変えた。 ちょっと複雑になったけど、編集中に切りかえることはないので、とりあえず、満足している。
(2020年4月18日更新)
Emacsをアウトラインエディタ的に使う
長めの文章を書く方法として、最初にだいたいの構成を作成して、それを見ながら 具体的な文章を書きこんでいくものがある。この方法だと、今なにを書いてい るのかが分かりやすいし、同じようなことを重複して書くこともなくなる。 この書き方は、モーレツ! Org mode 教室 その2: まとまった文章を書くに詳しいので、ぜひ参考にされるとよい。
紙のばあいだと、書いたものを印刷して、それを見ながら執筆する。 コンピューターでも、大きなディスプレイを使えば構成を横目に見ながら執筆できる。 ただ、構成が長くなると、とたんに一覧しにくくなる。
どれだけ長い文章でも、目次を一覧して横目で見ながら執筆できるとしたらどうだろう。 「あれはどこかに書いたかな?どんな風に書いたっけ?」というばあいにもぱっと検索できるとしたら。
せっかくコンピュータを使って書いているのだから、そういう利点を積極的に生かしながら執筆したいものだ。
ところで、文章の構造を見ながら書くという方法にはもう一つやりかたがある。見出し一覧を表示して本文を折りたたんで表示する。そして、必要に応じて、該当項目を開いて編集するという方法だ。アウトラインプロセッサという機能を持つツールだとこれが可能だ。(Wordにも搭載されている。が、うまく使えたことがない。練習が足りないのだろうが、そこまで時間かける気にもなれない。emacsでは、org-modeの標準設定やoutline-minor-modeがこれを実現している。) アウトラインプレセッサにも難点がある。編集している本文の内容が多くなると、前後の見出しが見えなくなる。
そうなると、これはただのエディタだ。
アウトラインプロセッサ的な機能のメリットはツールが見出しのツリー構造を理解しているので、見出しを移動するのが簡単なことだ。もちろんその際には、見出しの下に書いた本文も移動する。 長めの文章を書くときには、見出しを足したり引いたり、移動したりの操作は多用するので、これはとても便利だ。
長くなった見出しリストを見ながら編集するときも、本文が長くなるときも、横に目次が表示されると助かる。 これを愛用のエディタのemacsで実現する方法が分からなかった。 文章書き用にemacsを使う活用方法自体がWeb上には少なくて、実現は難しいのかな?とあきらめていた。
でもふとしたことで存在を知ったe2wmというパッケージではそれを実現している。 Codeというパースペクティブがそれだ。 ただ、どうも挙動がよくわからなくて、僕には手に余ると感じたので、別のを探すことにした。
もう少し検索すると、このビデオも似たようなことを実現していた。
やっぱりできるんだ。。。
ちなみにこのビデオはviでも同じことを実現している。僕のviスキルははじめてUNIXを使ったときで止まっているので、こういうの見ると、すげー!って素直に思う。そして、ふらふらとviに手を出しそうになる。
さて、そんなわけで、どうも僕のやりたいことは自分で作らなくても、emacsで実現できそうだ。そこで、いろいろと検索してみると、imenu-listがその動作を実現してくれるもののようだ。
早速、ざっと使ってみたところ、なかなかよい使い勝手なので、ここで紹介しておく。
成果物
ここで作ったものは、次の事項を実現している。
- 左側に文章のアウトラインを表示
- markdownまたはorg-modeで書く
- アウトラインは自動的に更新される
- orgファイルを開くと自動的にこのモードになる
- 画面の端まで文章を書いたら、折り返して表示する。
最低限の作りかた(設定方法)
Emacs
まずはEmacsがないと、はじまらない。
Windowsだと、2020年3月時点では、公式サイトからダウンロードしてインストールすれば使える。いろいろな記事が書かれているが、基本的には標準のままでよい。
Emacsは最低限、ファイルの作成方法と開きかた、保存方法を知っていればなんとかなる。 初期設定は、init.elを作成するだけだけど、なければたぶん自動で作成される。
必要になったら、やりたいことを検索して追加していけばいい。
PDFへの出力まで視野にいれているなら、最初からMSYS2を入れた方がよい。そのばあい、Emacsはpacman emacsとするだけでインストールできる。 PDFに出力するばあいには、TexLiveも必要になるので、インストールする。インストール方法はネットに親切な解説があるのでそちらを参照されたい。
imenu-list
melpaでインストールする。
起動設定
text, org-mode, markdownを使うときに、自動的にimenu-list-minor-modeをオンにすることも可能だけれど、実際には必要ないことも多い。 なので、なにかのキーに起動キーを設定しておいて、使うと便利。
僕はC-c oに設定している。これで、imenu-list-minor-modeをオンオフできる。
(global-set-key (kbd "C-c C-@ o") 'imenu-list-smart-toggle)
左に表示された見出しリストは、ファイルを書き変えるのに合わせて、自動的に更新されていく。もし、自動更新されないなあと思ったら、使っているimenu-listのコマンドを確認する。imenu-listで表示させているなら、オートリフレッシュしない。 アウトラインを出すだけなら、imenu-listでじゅうぶんなので、ついこちらを使って満足してしまうが、こちらではない。
正しくは、imenu-list-minor-modeを使う。特に企画段階の見出しをどんどん作成するばあいには、こちらが便利。
ファイル形式
コンピュータに詳しくない人にとっては、テキストファイルとは、.txtが後ろについているファイルだ。 txt形式は、文書をとにかく簡単に書くことができる。太字にしたり文字の大きさを変えたりはできないが、手動なら、見出しもつくれる。 が、見出しも本文も単に文字が書かれているだけなので、コンピュータ的にはどこが見出しかは簡単には分からない。目次を作るのも一苦労だ。
少し長文を書くなら、文章の構造を明示的に指定できた方がいい。 ここが大見出しで、ここがその下のレベルの見出しだ、そしてこれが箇条書きだ、という感じだ。 見出し番号も手ではつけない。自動でやる。 コンピュータを使っているのだから、単純作業は極力やらないようにする。 手作業で見出し番号をつけると、必ずミスが発生する。それも、大切な仕事のときに。
そういう構造を指定できるフォーマットでおすすめするのは二つ。org-modeとmarkdownだ。markdownの方がメジャーだが、パワフルなのはorg-modeだ。覚える手間はかかるが、応用範囲はおどろくほど広い。こういうサイトを見ると、org-modeの深さがよくわかる。
というわけで、org-modeをおすすめする。 markdownもよく使うけれど、org-modeを覚えれば、ある程度はすぐに使える。markdownへの本格移行は、org-modeが死んでから、考えてもよいと思う。 どっちにしても、一度構造化されたテキスト形式で作成しておけば、変換は簡単だ。
org-modeは、見出しを*記号で表す。一番上位の見出しが*で二番目が**。それ以降は*を増やせばいい。 今のところはそれだけ覚えておけば、使える。 (ちなみに、markdownの見出し記号は#)
使いやすくカスタマイズ
表示されるレベルを変える
(setq org-imenu-depth 4)
アウトラインを左側に
(setq imenu-list-position 'left)
画面の右端で折り返す
emacsは特に設定をしなければ、長い行はそのまま右にスクロールして表示させる。なので、長い行を書くととたんに一覧性が悪くなる。
テキストファイルでは、画面上の改行と実際の改行が同じだ。改行によって段落を表わすことができる。それに対して、他の構造化できるファイル(org-mode, markdown,html)は、改行は無視され、段落区切りを明示的に指定しなければならない。 org-modeとmarkdownでは、改行を二つ、つまり空行を入れると段落区切りになる。
ということは、一行を短かくして、画面の端までいかないように工夫して文章を書くということもできる。手作業で改行していってもいい。
でも、めんどうだ。 そういう単純作業は人間がやるべきではない。 コンピュータにやらせよう。
文章が長くなって、折り返す必要がでてきたなら、自動で折り返すよう、emacsに指示する。 wordなどでは普通にやっていることなので、処理自体も難しくない。 ただ、プログラムを書いたりするときにこれをやられるととても困るので、なにも設定しない状態では、折り返さないようになっている。
画面の右端で折り返す設定にはtruncate-linesとvisual-line-modelの二種類がある。 前者は、単語の途中でも行を区切ってしまうのにたいして、後者は単語を考慮して区切ってくれる。 日本語のばあいには、単語の区切りというのはないので、どちらでもよい。
英語のばあいには、単語で切られるのは気持ちが悪いので、visual-line-modeがよいと思う。
というわけで、これを設定しておいて、必要に応じてC-c tを打つことにする。
(global-set-key (kbd "C-c C-@ t") 'visual-line-mode)
より便利に使う設定で、この辺はorg-mode、markdown、txtを開いたら自動的にオンになるようにする予定だ。
より便利に使う
PDFやHTMLで出力する
latexというツールを使うときれいな出力が得られる。 インストールと設定にやや時間がかかるかもしれない。
ちゃんと設定していれば、C-c C-e l oとすれば、pdfを出力できる。 とても簡単だ。
こういう使いかたをしたければ、最初からmsys2を入れて設定すると結局楽かもしれない。
HTMLへの変換はorg-modeからエクスポートすることができる。markdownからでも他のツールを使えば可能だ。ここでは解説しないので、自分で検索されたい。
(ヒントpandocを使う)
画像を挿入する
画像を挿入するのは、以下のようにすればOKだ。
[[画像ファイル名]]
org-mode、markdown、txtで自動設定
org-mode、markdown、txtで書かれたファイルを編集するばあいに、自動的にvisual-line-modeが設定されるようにするには、以下の設定を行なう。
(add-hook 'text-mode-hook #'visual-line-mode)
これはなぜかうまくいっていない。