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

LaTeXのこととかまとめておく

LaTeX 卒研

書いてたらLaTeX以外のことも入ってきたけど、気にしない。

数式だけで20枚を越えてきたので、そろそろ整理の方法を考えておかないと崩壊しだす時期です。ということでなんかまとめておく。ながーい文章をLaTeXで書くのは初めてなので、間違っているところとかあるかもですが、ご愛嬌。。。

YaTeX&RefTexを使う

書かないといけない量が膨大になってくるので、書くためのツールを洗練させる必要があります。まあ、自分の好きなエディタを磨げばいいと思うんですが、僕はEmacs使いなのでYaTeXを使います。もうとにかくYaTeXの補完なしでは数式が入った文章は書けなくなりました。

10枚程度ならYaTeXだけでもいいのですが、長くなってくるとRefTexの力が必要になってきます。RefTefについては、tokyo-emacsでのmishoの発表がとても参考になります。目次みたいなのを下のように表示できたりとか

数式などの番号の参照を下のように選択することができます。

エディタはなんでもいいと言ったものの、YaTeXとRefTefのコンビは相当使い易い部類に入ると思います。EmacsかわいいよEmacs。

ファイルを適切に分割する

LaTeXのファイルが長くなってくると、編集に大変苦労します。なので、適切なサイズで分割するようにしましょう。例えば以下のようにinputコマンド(?)を使えば.texファイルを挿入することができます*1

\begin{document}
\tableofcontents
\input{graduation_thesis}
\input{graduation_thesis_1}
\end{document}

.texファイルは以上のように挿入することができて、ファイルを分割できるのですが、texファイルだけでなく「プログラムのソースコードを挿入したい」ということがあるかもしれません。というか僕がLaTeXのファイル内にRのプログラムを挿入したくなったんです*2。そういう時は

\usepackage{moreverb}

してから

\verbatimtabinput{multi_nadaraya.R}

とすればよいようです。

newcommandなどを適切に使う

「適切に使う」とか書いたものの3日目くらいなので適切か知らないですが。先生とかのゼミで「あ、ここの式書式がまずいから訂正しておいてね!!」とか言われて、連鎖的に訂正しないといけないところが出てきたとかいうシチュエーションは結構あるかもしれません。そういうわけで、ある程度複雑なものはテンプレみたいな形にしておいたほうがよいですね。そういう時にnewcommandとかを使えばよいようです。

例えば

\newcommand{\E}[2]{{\mathrm E}_{#1}\left[#2\right]}
\newcommand{\V}[2]{{\mathrm V}_{#1}\left[#2\right]}
\newcommand{\fxhat}[0]{\widehat{f_{h_x}}(x)}
\newcommand{\gxhat}[0]{\widehat{g_{h_x}}(x)}
\newcommand{\ygivenx}[0]{\mathbf{Y}|\mathbf{X}}

とかやっておいて

\V{\ygivenx}{\gxhat}

のように使えばよいようです。引数取ってそこに挿入みたいなこともできるので便利(#1とかの付近)。こういう風にやっておけば、まとめて訂正するにしても労力かけなくて済みそうですね。

数式番号の表示について

数式を書いていると、下のように最後の行だけに番号を振りたいということがよくあります。

僕はeqnarray環境とnotagを使ってやっていたのですがTwitterとかで聞いてるとどうやら効率の悪いやりかたのようです。align環境とsplit環境を使うと幾分ましな感じにできました。

\begin{align}
 \begin{split}
  & m({\mathbf x}) \\
  &= E_{Y|{\mathbf X}}[Y|{\mathbf X}={\mathbf x}] \\
  &= \int y f_{Y|{\mathbf X}}(y|{\mathbf x}) dy \\
  &= \int y \frac{f_{{\mathbf X},Y}({\mathbf x},y)}{f_{\mathbf X}({\mathbf x})} dy \\
 \end{split} \notag \\
 &= \frac{\int y f_{{\mathbf X},Y}({\mathbf x},y) dy}{f_{\mathbf X}({\mathbf x})} \label{eq:28.58_multi_m_with_conditional}
\end{align}

もっといい方法があったら教えてください。ちなみに上の(2.8)とかいうのはディフォルトではできないので、プリアンブリのところに

\makeatletter
\renewcommand{\theequation}{\thesection.\arabic{equation}}
\@addtoreset{equation}{section}
\makeatother

などと書いておくとできるようです。こういうのやっておかないと式番号が100とか楽に越えてしまいますからね。。。

繰り返しやる処理は楽にできるようにする

LL使ってもワンライナーで片づけてもいいですが、単純作業を焦っている時にやるとミスのもとです。ということでいつもやりそうな作業にテンプレっぽいのがあるといいですね。僕の場合、Rでpngファイルを吐いて、convertコマンドでepsに変換とかをやるんですが*3、ファイルが大量にあって、サブディレクトリにもたくさんあるので、pngファイルを見つけるたびにconvertの処理をする、という定型作業があります。ディレクトリがあったら再帰的にやらないといけないので、まあ結構面倒です。が、

  • find
  • perl
  • xargs

の3つを組合せることで一行で済んでしまいます。

find ./ -type f -name '*.png' | perl -pe 's/\.png$//' | xargs -I% -n1 convert %.png %.eps

perlはこういう作業が超得意なので、覚えてみるといいかと思います。僕も普段はRubyのほうが多いけど、ワンライナーに限ってはperl使うし。

こういうのをやるのに、perlの全部を覚える必要はないです。下の本とかがこういう用途関連の情報がまとまっていていいんじゃないかなと思います。

ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法

ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法

バックアップは定期的に取る

提出日間近になってファイルが全部飛ぶとか考えたくもないですが、ないとも言えないので対策をしておくにこしたことはありません。というわけで手段はなんでもいいのでバックアップは取っておくようにしましょう。

といっても面倒だとつい怠ってしまうので、面倒じゃない方法でバックアップする方法のほうがいいかと思います。gitなりsvn使える人は使えばいいし、Macの人はTime Machineでもいいし。最近はDropBoxが登場したので、(svnとかgitに関して)あまり知識がない人でも簡単にできるようになっています。

USBとかに保存しておくとかでもいいけど、色んなバージョンができてしまって分けが分からない、という状況は避けたいですね。どんどん書いていってrevertとかdiffで見る、というのがいい方法なのかな?

そういうわけで

他のもこういうのがあるよ!!っていう人はトラバでも飛ばして教えてもらえるとうれしいです!!!

[改訂第6版] LaTeX2ε美文書作成入門

[改訂第6版] LaTeX2ε美文書作成入門

*1:.texは書かない

*2:プログラムは動く形で保持しておきたい

*3:eps直接になんか失敗した。エラーが出たよ^^