読者です 読者をやめる 読者になる 読者になる

Just $ A sandbox

プログラミングと計算機科学とかわいさ

Ubuntu12.04で自己満足用LaTeX環境構築

LaTeX環境構築の話です。

Linuxだと最初から入ってるもの・入ってないからいれなきゃいけないもの(apt-getできるもの・install-elispできるもの・ソースから落としてビルドするもの)が混在しているためか環境構築はかなり面倒です(面倒でした)。

同じ思いを出来ればしたくはないのでメモとして残しておきます。

基本的には、 Emacsをバリバリ使ってLaTeXで文章をいっぱい書きたい人向けになると思います*1

動作環境

TeX Live,YaTeXの導入

私は長い間、ずっと最初から装備されてるplatex, dvipdfmxを使っていましたが、実はこれだと一旦EUCに変換しないと日本語が上手く表示されないんですよね。という訳で今まではずっと

#!/bin/sh

IFS=,
nkf -e "$1.tex" > "$1_euc.tex"
platex "$1_euc.tex"
dvipdfmx "$1_euc.dvi"
evince "$1_euc.pdf"

という内容のshファイルを作ってEmacs Commandlineから実行してました(前時代的ですが実際これで困ることはなかったんです!)。

基本的にはこれでもあまり困らなかったのですが、ファイル分割しようとしたらいちいち全部のファイルを一旦eucに変換しないといけないということに気がついて愕然とし、今まで面倒臭がって入れてこなかったtexliveを入れようと思い立ったわけです。

texlive 2012の導入

導入はTeX wiki Linux/Ubuntuにあるように以下のコマンドを叩くだけでOKみたいです。

$ sudo apt-get install texlive-lang-cjk
$ sudo apt-get install xdvik-ja

こちらは普通に入りました(但しめちゃくちゃ重かったですが)。

さて、とりあえずplatex, dvipdfmxでtexファイルをコンパイルしてみます…日本語がutf-8でも表示されたー!

YaTeXの導入

EmacsLaTeXを書くなら圧倒的にYaTeX(やてふ)が便利でしょう。
私は本家サイトから直接ソースをダウンロードしたんですが、普通に$ sudo apt-get install yatexで入るようです。まぁみなさんはそうしていただいたらと思います。

細かいことは大体TeX wiki YaTeXに書いてあります。

まずはpdfplatexを作っておく必要があります。

  1. 以下の内容を記述したpdfplatexファイルを作成します。
  2. 実行権限を与えます。
  3. /usr/local/binにコピーします。
# 1. 以下の内容を記述したpdfplatexファイルを作成します。
#!/bin/sh
platex -synctex=1 "$1" && \
dvipdfmx -f ptex-ipaex.map "`basename "$1" .tex`"

# 2. 実行権限を与えます。
$ chmod +x pdfplatex

# 3. /usr/local/binにコピーします。
$ sudo cp -p pdfplatex /usr/local/bin

上が出来たら以下のようにします。

  1. $ sudo apt-get install yatexするか、本家サイトからリリース版をDLし、フォルダ名をyatexで展開したものを.emacs.d/以下の適当なところに追加し、上のリンクにある通りinit.el(tex wikiのものは1行目のパス設定が(add-to-list 'load-path "~/.emacs.d/site-lisp/yatex")となっているので注意してください。)に設定を追加します。

  2. 上の設定が上手く行けば、texファイルを開いたら自動的にYaTeX-modeになると思います。上手く動かなければyatexのフォルダ名、ちゃんと展開されているかどうか、init.elに追加した設定に書かれているパスが正しいかどうかを確認してください。

ついでに導入したやつとか

以下に、ついでに導入したものの導入方法も紹介します。

install-elisp

install-elispEmacswikiで公開されているelispファイルなどをダウンロードするためのElispプログラムです。 インストール手順は参考文献[2]に従っています。

  1. http://www.emacswiki.org/cgi-bin/wiki/download/install-elisp.elinstall-elisp.elの名前でパスが通っているところに保存する(私は~/.emacs.d/elisp*3以下に色々突っ込むことにしています)。

  2. init.el*4(あるいは.emacs)に以下を記述してください*5

  3. 終わりです。これで、M-x install-elisp [url]とすることで適当なelファイルを取ってくることができるようになります。やったね!

(require 'install-elisp)
(setq install-elisp-repository-directory "[init.elのパス]")

one-key

(one-keyは今回ついでに導入したのでメモとして書いておきますがあまり関係無いので飛ばしても良いと思います)
onekey-originEmacsキーバインドを一覧表示・サジェストしてくれる便利ツールです。

  1. Emacsを開き、以下をタイプします。

  2. init.elを開き、以下を追加します。

  3. これでM-x one-key-mode-とかで登録されているmodeをチェックしたり、C-oキーバインドを一覧表示したりできます。ただ、紹介されているページではショートカットキーの補完まで出来るようなのですが…よく分からなかったです\(^o^)/(よって今回one-keyを導入した意味はあまりなかった…orz)

;; 1. Emacsを開き、以下をタイプします。
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/one-key.el
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/one-key-config.el

;; 2. init.elを開き、以下を追加します。
(require 'one-key-default) ;; one-key.elも一緒に読み込んでくれるらしい
(require 'one-key-config)
(one-key-default-setup-keys)
(global-set-key (kbd "\C-o") ;; C-oで現在のモードで登録されているキーバインドを一覧表示してくれます

latex-math-preview

latex-math-previewLaTeXを書いている途中に数式プレビューを式単位でできるという素晴らしいツールです。YaTeXと相性がよいのでついでに導入してしまいましょう。

  1. Emacsを開き、以下を実行します。

  2. init.elに以下を追加します。ただし、latex,dvipng,dvipsのパスを自分で調べて設定してください。

;; 1. Emacsを開き、以下を実行します。
M-x install-elisp http://www.emacswiki.org/emacs/download/latex-math-preview.el
M-x install-elisp http://www.emacswiki.org/emacs/download/latex-math-preview-extra-data.el

;; 2. init.elに以下を追加します。ただし、__latex,dvipng,dvipsのパスを自分で調べて設定してください__。

;;
;; LaTeX Math Preview
;;

;; YaTeX-modeの状態で M-x latex-math-preview-*** としてプレビューを実行します
(autoload 'latex-math-preview-expression "latex-math-preview" nil t) ;; 画面でpngのプレビューをします
(autoload 'latex-math-preview-insert-symbol "latex-math-preview" nil t) ;; 挿入したいシンボルを画像で選択できます
(autoload 'latex-math-preview-save-image-file "latex-math-preview" nil t) ;; 数式だけを画像ファイルでエクスポートします
(autoload 'latex-math-preview-beamer-frame "latex-math-preview" nil t) ;; 式単位でプレビューをします

;; YaTeXする人向けのキーバインド
;; (YaTeX-define-key *** 'hoge) となっているものは C-c *** を表すはず…(?)。
;; 私の環境だとエラーは出ませんがlatex-math-previewがちゃんと起動してくれません…!
(add-hook 'yatex-mode-hook
         '(lambda ()
         (YaTeX-define-key "p" 'latex-math-preview-expression)
         (YaTeX-define-key "\C-p" 'latex-math-preview-save-image-file)
         (YaTeX-define-key "j" 'latex-math-preview-insert-symbol)
         (YaTeX-define-key "\C-j" 'latex-math-preview-last-symbol-again)
         (YaTeX-define-key "\C-b" 'latex-math-preview-beamer-frame)))
(setq latex-math-preview-in-math-mode-p-func 'YaTeX-in-math-mode-p)

;; latex, dvipng, dvipsのパスを設定します(私の環境ではこうなっていました)
(setq latex-math-preview-command-path-alist
      '( (latex . "/usr/bin/latex") (dvipng . "/usr/bin/dvipng") (dvips . "/usr/bin/dvips")) )

;; 日本語使う人はこの設定にするとよいらしいです
(setq latex-math-preview-tex-to-png-for-preview '(platex dvipng))
(setq latex-math-preview-tex-to-png-for-save '(platex dvipng))
(setq latex-math-preview-tex-to-eps-for-save '(platex dvips-to-eps))
(setq latex-math-preview-beamer-to-png '(platex dvipdfmx gs-to-png))

;; extra-dataを使うための設定…のはずなんですが、私の環境ではコケるのでコメントアウトしてます><;
;(add-to-list 'latex-math-preview-text-symbol-datasets
;       latex-math-preview-textcomp-symbol-data)
;(add-to-list 'latex-math-preview-text-symbol-datasets
;       latex-math-preview-pifont-zapf-dingbats-symbol-data)
;(add-to-list 'latex-math-preview-text-symbol-datasets
;       latex-math-preview-pifont-symbol-fonts-symbol-data)

コメントにもありますが、何故かショートカットキーで起動できません。それらしいメッセージは出るんですがinsert-symbolの画面や数式プレビュー画面になりません。(本家サイトや他のサイトでも同じコードなので、コード自体に問題があるとは考えにくいですが…)

また、最後のextra-dataを扱うための設定を追加すると_

Warning (initialization): An error occurred while loading `/home/myon/.emacs.d/init.el':

Symbol's value as variable is void: latex-math-preview-textcomp-symbol-data

などというエラーが出ます>< 解決法をご存知の方は教えてください!

Xy-picが綺麗に出ない

Xy-picという綺麗な図(矢印、四角など)を書くためのパッケージがあります。とても簡単なので可換図式を書くのに使っていたのですが、斜めの線を引くと線がガタガタになるので悩んでいました。
解像度かそれに類するパラメータがおかしいのかな、と思ったのですがdvipdfmx -r 300をしても特に何も変わらず…。

しかし今回、platex, dvipdfmxでコンパイルするとこの現象は発生しますが、pdflatexでコンパイルすると線が綺麗に表示できる!ということを発見したので書いておきます。

ただ、pdflatexは日本語が使えない(windowなら出来るという情報もありました。私は試していません)ので、図式の綺麗さと、日本語のどちらかを犠牲にしなくてはいけないようで…>< こちらについてもどなたか知っていれば情報をください!><

mathscrを使えるようにする

最後です。LaTeX上で\mathscrをするとフォントが見つからないのでデフォルトのもので代用しますという警告を解決し、格好いい文字を使えるようにしました。

基本的には花文字を pLaTeX2e 上で利用すると同じです。

  1. ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/fonts/rsfs/から、 rsfs10.mf, rsfs7.mf, rsfs5.mf, script.mf, scriptu.mf(これは必要なのか不明) をダウンロードし同じフォルダに含めます。

  2. http://www.hpc.cs.ehime-u.ac.jp/~aman/TeX/rsfs/mathrsfs.sty, http://www.hpc.cs.ehime-u.ac.jp/~aman/TeX/rsfs/ursfs.fdをそれぞれダウンロードし上と同じフォルダに含めます。

  3. 以下のようにコマンドを叩きます。

  4. 作成されたrsfs5.tfm, rsfs7.tfm, rsfs10.tfmを該当の場所にコピーする(私の環境では/usr/local/texlive/texmf-local/fonts/tfm/にrsfsディレクトリを作成しその下にコピーしました)。

  5. *.mfファイルを該当の場所にコピーする(私の環境では/usr/local/texlive/texmf-local/fonts/source/にrsfsディレクトリを作成しその下にコピーしました)。

  6. 以下のようなtexファイルを作ってコンパイルし、正しく\mathscrが動いていることを確認します。

# 3. 以下のようにコマンドを叩く。
$ mf  # と入力する
This is METAFONT, Version 2.718 (Web2C 7.2)
# ** の状態になれば以下のようにタイプする
** &cm \mode=localfont; input rsfs10

# 上が上手く行ったら同じ事を繰り返す
** &cm \mode=localfont; input rsfs7
** &cm \mode=localfont; input rsfs5
% 6. 以下のようなtexファイルを作ってコンパイルし、正しく\mathscrが動いていることを確認します。
\documentclass[12pt,a4j]{jarticle}
\usepackage{mathrsfs}

\begin{document}

 花文字 : 

$\mathscr{ABCDEFGHI}$ \\
$\mathscr{JKLMNOPQR}$ \\
$\mathscr{STUVWXYZ}$

\end{document}

これから

今後環境を変えたり、何かわかったことがあったりすればまた追記しようと思います。
以下に結局未解決のままになってしまった問題点をあげておきます(情報を求めています)。

  • one-keyでショートカット補完できない(方法が不明)
  • latex-math-previewをショートカットで起動できない方法+extra-dataを扱う方法
  • Xy-picでpdflatexじゃないと斜めの線がガタガタになる

こうしてみるとまだまだ問題点があるのでこれではとても環境が整ったとは言えませんが、とりあえずLaTeXEmacsでガリガリ書くことはある程度は出来るようになったと思います。
今回痛感したのは、やはりElispが書けるかどうかというのは大きいですね…(Elisp書けないのでEmacs弱者です…)。

参考文献

*1:Vim派の人へ:私はVim使えないのでずっとEmacsです。ごめんなさい

*2:おそらくLaTeX周りではXfceとUnityで違いは現れないと思いますが念の為

*3:.emacs.d以下にはElispファイルを置くのが習慣です。なければ作ってください

*4:私の環境だと~/.emacs.d/init.elでした

*5:Markdownの仕様でこの直後にコードを挟むと数字が連番にならないので一番最後に書いています。ご了承ください。