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))))
終わり
何か間違っているところなどあればご指摘いただけると幸いです。