Emacsで論文執筆
タイトルの通り、emacsで論文執筆したいよねーっていうお話です。
環境
- TeXLive
- AUCTeX
- Digestif
- Aspell
以下それぞれ説明していきます。
elisp のコードなどが出てきますが、雰囲気で書いている(問題なく動いているのは実証済)のでこうしたらもっと簡潔に書けるよーなどあれば心優しく指摘してください。
TeXLive
これは TeX 環境をインストールするために使用しています。
自分は Mac ユーザなのですが、MacTeX は 完全なアンインストールが困難というのをどこかで見たので こちらを参考に TeXLive をインストールして TeX 環境を構築しています。
AUCTeX
これは emacs のメジャーモードで、LaTeX-mode (LaTeX-mode と latex-mode は違うので注意) にフックして使用しています。
コンパイルや pdf への変換、表示など C-c C-c を押下して選択していくだけで行うことができます(便利)。
AUCTeX の設定等はこちらの記事で詳しく説明されていて参考になります。
Digestif
「Digestif とはなんぞや?」みなさん思ったことでしょう。
以前の記事でも述べている通り、自分は Emacs + eglot で基本的な環境を構築しています。
Digestif は TeX の Language Server で、補完やドキュメントの表示などを色々便利に行ってくれます。
詳しくは本家の githubを見てください。
前述の AUCTeX でも予めキーバインドがなされているため補完を行ったりできるのですが、Language Server を使うとキーを押さずに補完されて便利だなぁと個人的に感じています。
eglot は次のように設定しています。
(use-package eglot
:ensure t
:config
(add-to-list 'eglot-server-programs '(c++-mode . ("clangd")))
(add-to-list 'eglot-server-programs '(rustic-mode . ("rust-analyzer")))
(add-to-list 'eglot-server-programs '(python-mode . ("pyls")))
(add-to-list 'eglot-server-programs '(LaTeX-mode . ("digestif")))
(add-hook 'c++-mode-hook 'eglot-ensure)
(add-hook 'rustic-mode-hook 'eglot-ensure)
(add-hook 'python-mode-hook 'eglot-ensure)
(add-hook 'LaTeX-mode-hook 'eglot-ensure)
(define-key eglot-mode-map (kbd "C-c e f") 'eglot-format)
(define-key eglot-mode-map (kbd "C-c e n") 'eglot-rename)
)
少しだけ説明すると、LaTeX-mode にフックして eglot を呼び出していて、eglot の内部で digestif を使用しています。
Aspell
これは gnu から提供されているスペルチェッカです。
自分は英語での文章を書く機会が多いので、英語辞書をインストールして使用しています。
設定方法は TeX Wiki に詳しく載っています。
また、文章やプログラムを書いている際にチェックするために flyspell という emacs 内蔵のパッケージとともに使用しています。
;; Spell checking
(setq-default ispell-program-name "aspell")
(with-eval-after-load "ispell"
(add-to-list 'ispell-skip-region-alist '("[^\000-\377]+")))
(use-package flyspell
:config
(add-hook 'c++-mode-hook
'(lambda ()
(flyspell-prog-mode)))
(add-hook 'rustic-mode-hook
'(lambda ()
(flyspell-prog-mode)))
(add-hook 'python-mode-hook
'(lambda ()
(flyspell-prog-mode)))
(add-hook 'LaTeX-mode-hook
'(lambda ()
(flyspell-mode))))
終わり
何か間違っているところなどあればご指摘いただけると幸いです。