LaTeX メモ ― AUCTeX 入門(その2)

本エントリは、(その1)に続くエントリである。

大まかに言うと、(その1) は、AUCTeX 入門のいわば基礎編であったが、それに続く本エントリと次回エントリは、入門の応用編に位置づけられる。より具体的には、本エントリは、AUCTeX における platex や dvipdfmx などのコマンド実行の解説で、次回のエントリは、プレビュー機能の解説となる。

なお、(その1)と同様、本エントリの内容は GNU Emacs 26.1, AUCTeX 12.2.0, TeX Live 2019 で試した。他のいくつかのバージョンでも試したので、それについても簡単に述べる。

また、本エントリの実行環境は、(その1)と異なり、主に Windows を想定する。これは必然性はなく、単に私が今回の内容を Windows で試したから、くらいの理由しかない。他の環境でも、以下の内容をほとんど修正することなく適用できると思われる。

コマンド実行


LaTeXでは、ソースとなる tex ファイルに対し、latex, bibtex, dvipdfmx などのツールを用いて最終的な pdf が作成される。また、この pdf をさまざまな viewer を用いて閲覧できる。AUCTeX では、これらの複数のツールはすべて、マスターとなるコマンド C-c C-c によって実行できる (M-x TeX-command-master)。なお、言うまでもなく、これらのツールは端末から直接実行してもよい(その1参照)。

C-c C-c による実行の概要を、circ.tex (その1を参照)を例にして考えよう。Emacs で AUCTeX モード(その1で書いた内容のみ設定されているとする)で circ.tex を読み込み、C-c C-c とタイプする。このとき、dvi や pdf が作成されてない最初の段階では、「Command (default LaTeX): 」というプロンプトが出てくるので、RET を押す。今の状況では、LaTeX ファイルには pdflatex が実行されるはずである(なお、上記プロンプトに「latex」と入力するか、あるいは `C-c C-t C-p' (M-x TeX-PDF-mode) で pdf モードをトグルすることにより、latex を実行することもできる)。その後、この段階では相互参照が完成していないので、もう一度 C-c C-c とタイプして pdflatex を実行することにより、最終的な pdf を得る。

以上の知識で、英語の論文を書くときには十分である。しかしながら、現段階では(多くの場合) viewer が正しく設定されていないし、pdflatex や latex などのプログラムは日本語化されていないので、platex を使う等、日本語環境の設定が必要になる。

日本語環境については、japanese-latex-mode で変数 japanese-TeX-engine-default が ptex となるため、platex を想定するのが最も簡単だろう。さらに、platex で生成された dvi を、dvipdfmx で pdf にするという、オーソドックスなスタイルを考える。ただし、dvi を明示的に扱わず、また ptex2pdf も使わないと仮定する。bibtex プログラムは、pbibtex とする。最後に、latexmk や SyncTeX 等についてはここでは触れないとする。

以上の前提のもとに、AUCTeX の日本語環境の設定を、以下に示す:

(setq TeX-PDF-from-DVI "Dvipdfmx")
(add-hook 'LaTeX-mode-hook
   (lambda ()
    (add-to-list 'TeX-view-program-selection '(output-pdf "SumatraPDF"))
    (add-to-list 'TeX-command-list
      '("pLaTeX" "%`%(PDF)platex %(file-line-error) %(extraopts) %S%(PDFout)%(mode)%' %T" TeX-run-TeX nil
        (latex-mode doctex-mode)
        :help "Run pLaTeX"))
    (add-to-list 'TeX-command-list
      '("pBibTeX" "pbibtex %s" TeX-run-BibTeX nil
        (plain-tex-mode latex-mode doctex-mode ams-tex-mode texinfo-mode context-mode)
        :help "Run pBibTeX"))))

注意! 上のコードをそのままコピペして使わないでください!! ウェブリブログでは emacs lisp のコードをエントリに張り付けることができないので、上のコードでは、全角の空白でタブ位置を揃えています。そこで、そのままコピペして emacs で eval しようとすると、全角の空白のところでエラーになります。上のコードを使うときは、全角の空白を半角の空白(あるいはタブ)に変換してから使ってください

まず、上記コードにあるように、最初の行の
(setq TeX-PDF-from-DVI "Dvipdfmx")
から述べていく。これは、dvipdfmx によって dvi を pdf に変換するために、TeX-PDF-from-DVI を "Dvipdfmx" と設定するものである。ここでは、「D」は大文字であることに注意。

次は、LaTeX-mode-hook に add-hook する部分である。ここでは、まず、Windows での pdf viewer として、Sumatra PDFを設定している。そのプログラム名は、「SumatraPDF」である(「Sumatra」と「PDF」の間に空白はない)。この設定の前に、SumatraPDF のフォルダのパス(通常 C:\Program Files\SumatraPDF)を、Windows の環境変数 PATH に追加しておく。その後、
(add-to-list 'TeX-view-program-selection '(output-pdf "SumatraPDF"))
を、LaTeX-mode-hook に add-hook する。SumatraPDF は、TeX-view-program-list-builtin に既に設定されている。

さらに続く部分では、platex と pbibtex を TeX-command-list に追加する。ここでのオプション(たとえば「%(PDF)」等)の意味については、詳しくは変数 TeX-expand-list-builtin を参照されたい。また、以上の設定の注意点については、次の節でまとめる。

既に LaTeX システム一式がインストールされていれば、上記の設定で、AUCTeX で C-c C-c によって適切なツールが実行されるようになるはずである。たとえば、最初の C-c C-c によって、emacs のミニバッファで「Command (default LaTeX): 」というプロンプトが出てくると、completion しながら「pLaTeX」と入力することにより、platex が実行される。その後同様に C-c C-c とタイプすることにより、pbibtex, dvipdfmx などが適切に選択・実行され、最終的に pdf ファイルが作成される。その pdf に対しては、C-c C-c により View が実行され(C-c C-v によっても実行できる (M-x TeX-view) )、上記の設定では、Sumatra PDF が viewer として起動する。

また、C-c C-c と何度もタイプしなくても、C-c C-a と一回入力すれば、上記の一連のツール実行を一度に行うことができる (M-x TeX-command-run-all)。

さらに、LaTeX ソースに誤りがありコンパイルに失敗したとき、C-c ` によって、アウトプットバッファの次のエラーの位置を見つけることができる (M-x TeX-next-error)。これは、CC mode での開発経験があれば想像しやすい。

設定上の注意


以下では、設定上の注意点(設定でよく失敗するところ)を書いてみたい。

まず、LaTeX (platex と仮定)がインストールされ、設定されていることを前提とする。そのとき、AUCTeX のコマンド実行で最初にはまる可能性があるのは、環境変数であろう。

たとえば、window manager から直接 emacs を起動する場合、環境変数が思ったように引き継がれない状況がありうる。その例としては、Windows で、Emacs を独立したアプリとして tex ファイルを編集し、それを cygwin のシェル端末などから platex を実行してコンパイルするような状況が考えられる。そのようなとき、AUCTeX から platex を上記のようにコマンド実行しても、環境変数が設定されていないため、失敗することがある。「cygwin のシェルの初期設定ファイル(いわゆる rc ファイル)に環境変数 TEXINPUTS, BIBINPUTS, BSTINPUTS などを設定しているのに何故?端末からならコンパイルできるのに??」と混乱するのである。

これは当然で、このように emacs を独立したアプリのように使っているのであれば、TEXINPUTS などの環境変数は、システム全体で設定しなければならない(つまり、Windows であれば、「システムの詳細」から設定する。具体的な方法は略)。シェル端末の rc ファイルで TEXINPUTS などを設定しても、AUCTeX のコマンド実行の際には意味がない(もちろん、シェル端末内のプロンプトから emacs を起動した場合は別)。なお、cygwin においては、Windows の環境変数は、シェルにインポートされれる(参照: The CYGWIN environment variable)。

また環境変数に関連しては、window manager から emacs を起動するとき、PATH がうまく設定されない状況がありうる。たとえば、C-c C-c で latex を実行しても

Running `LaTeX' on `circ' with ``latex -interaction=nonstopmode "\input" circ.tex''
/bin/sh: 1: latex: not found

というようなエラーが出るような状況である。これは、emacs における PATH が設定されておらず、また変数 exec-path が設定されていないことを意味する。

このような問題を解決するには、Emacs Wiki のページ:

https://www.emacswiki.org/emacs/ExecPath

を参考にされたい。また、パッケージ exec-path-from-shell をインストールするという解決策もある(詳細は省略)。


最後に、emacs あるいは AUCTeX が古い場合の注意点を書いておきたい。たとえば、AUCTeX が古い場合、ここで書いたような設定がそのまま使えないケースも考えられる。たとえば AUCTeX 11.87 の場合、platex を TeX-command-list に add-to-list するようなコードは、以下のようになっていた:

' ("pLaTeX" "%`%(PDF)platex %S%(PDFout)%(mode)%' %t" TeX-run-TeX nil
(latex-mode doctex-mode)
:help "Run pLaTeX")

さらに古い環境では、最小限以下のような設定をしておけばいいだろう:

'("pLaTeX" "platex %t" TeX-run-TeX nil
(latex-mode)
:help "Run pLaTeX")

いずれにせよ、ユーザの環境に合わせて、私が書いた内容は適宜修正しながら使っていただきたい。


関連エントリ






ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント