Diary over Finite Fields

515ひかるの日記と雑文

Spacemacsでlatexmkを使う

はい、いつもの自分用メモです。結構自分用メモは使わなくなった環境についての記事がアクセス数上位を獲得していたりして、最近あまり書きたくないなと思っていたりもするのですが。

それでも忘れるたびに同じサイトを参照するのは嫌なので書きます。

前提

ここでは TeXLive をインストールするとかいう話はしません。例のごとく、最新の TeXLive を手に入れたければこことかを参考に。もちろんTeXWikiも見ましょう。

あと Spacemacs をインストールするという話もしません。まぁ Spacemacs を使っている人しかこんな記事読まないでしょうから。

あと latexmk コマンドを使う設定をしますが、latexmkの設定についてはやっぱり書きません。 ~/.latexmkrc に書く内容などはたとえば ここ とかを参照してください。

想定している設定

  • Spacemacs の LaTeX Layer をそのまま利用する。
  • コンパイルには latexmk コマンドを使う。
  • C-c C-clatexmk -pvc を動かす。

Layer の設定

Spacemacs では Layer 機能を使ってその言語を使う際に有益なパッケージなどをあらかじめまとめてインストールしてくれます。LaTeX でも Layer があって、 LaTeX Layer を使用する設定を書くのがまず最初にやることです。

~/.spacemacs を編集しますが、Vim keybind で設定している場合は SPC f e d と入力すると目的のファイルを開くことができます。

そのファイルの中に、次のようにいろいろと書かれている場所があるかと思います。

dotspacemacs-configuration-layers
'(
  ;; auto-completion
  ...
  )

この () 内に次のように追記します。

(latex :variables latex-build-command "LatexMk")

ここで、 latexmk でも LaTeXmk でも LaTeXMk でもないことに注意。 LatexMk が正しいです1

そして .spacemacs を再評価する。 再起動でもいいですが、 SPC f e R で設定ファイルを同期できるので、せっかくなので使いましょう。

これで例えば AUC-TeX などの LaTeX 環境パッケージがインストールされるはずです。

コンパイルの方法

LaTeX ファイルを開いた状態で、 SPC m b あるいは SPC m a とうつと latexmk コマンドが起動し、有効な .latexmkrc に書かれている内容のコンパイルを実行するはずです。

一方で、筆者のように latexmk -pvc を実施したいという人もいるでしょう。正直うまい方法はまだ発見していないのですが、一応行う方法は発見したので書いておくことにします2

ここのコードは、 TeXWiki の AUC-TeX の設定 のコードを参考にして書きました。 ~/.spacemacs の下の方に、

(defun dotspacemacs/user-config ()
  "Configuration function for user code.
This function is called at the very end of Spacemacs initialization after
layers configuration.
This is the place where most of your configurations should be done. Unless it is
explicitly specified that a variable should be set before a package is loaded,
you should place your code here."
)

となっている箇所があると思う。これを次のように編集します。

(defun dotspacemacs/user-config ()
  "Configuration function for user code.
This function is called at the very end of Spacemacs initialization after
layers configuration.
This is the place where most of your configurations should be done. Unless it is
explicitly specified that a variable should be set before a package is loaded,
you should place your code here."
  (add-hook 'LaTeX-mode-hook
    (function (lambda ()
      (add-to-list 'TeX-command-list
        '("Latexmk"
          "latexmk -pvc %t"
            TeX-run-TeX nil (latex-mode) :help "Run Latexmk"))))))

これで、LaTeX のソースファイルを開いたときに、 C-c C-c というコマンドを実行し、メニューから Latexmk を実行すればコンパイルされ、プレビューの起動とファイル変更の監視、自動コンパイルモードになります。

現状、 SPC m a では上の設定をしても監視モードにはならないです。理由はわからないのでわかる人は教えて欲しかったりします。

追記

現状、 SPC m a では上の設定をしても監視モードにはならないです。理由はわからないのでわかる人は教えて欲しかったりします。

と書いてますが、コマンド名が間違っていただけでした。上で散々 LatexMk であると強調しているのに、TeXWiki からうつしてきたコードが Latexmk になっています。間違いです。

<feff>(defun dotspacemacs/user-config ()
  "Configuration function for user code.
   This function is called at the very end of Spacemacs initialization after
   layers configuration.
   This is the place where most of your configurations should be done. Unless it is
   explicitly specified that a variable should be set before a package is loaded,
   you should place your code here."
   (add-hook 'LaTeX-mode-hook
     (function (lambda ()
       (add-to-list 'TeX-command-list
         '("LatexMk" ; ここの名前を変更
           "latexmk -pvc %t"
            TeX-run-TeX nil (latex-mode) :help "Run Latexmk"))))))

これで SPC m blatexmk -pvc ができるようになります。しかしなぜ気づけなかったんだ。。。

Footnotes

1 筆者はここで時間を30分ほど無駄にしました。

2 Spacemacs の設定で行う方法や、 SPC m a などのコマンドを latexmk -pvc に置き換えられる方法をご存知の方は教えて欲しい。。。切実に。 追記しました。