理系であれば, LaTeXを使って文書を作成する機会は多いでしょう.
最近はOverleafなどのオンラインLaTeXエディタが優秀なので共同編集することも多いと思います.
共同編集に際して他人が読めるLaTeXソースを書くことはとても重要になります!
自分1人だけで書いているときは,「とりあえずコンパイルが通っていて生成物が思った通りにできていればOK」なのですが, 他人と共同で作業するときはそうはいきません.
この記事では**「他人が読むことを前提としたLaTeXソース」**を書くときの注意点をまとめています.
1行には1文!
LaTeX初心者にありがちなのが, 1行にだらだらと長く書いてしまうことです(きっとWordなどに慣れているのでこういう書き方をしてしまうのでしょう).
ご存知の通りLaTeXは改行を無視するので, 1行に長くだらだら書こうが, 1行に1分ずつ書こうが結果は同じです.
1行にだらだらと長く書かれているものと, 1行に1文づつ書いているもののどちらが読みやすく編集しやすいかと問われれば, もちろん後者でしょう.
1行に1文であれば, その文章が不要になった際, その行を削除あるいは, コメントアウトするだけで済みます.
つまり, 文単位での推敲が容易になります.
1行に長々といくつも文が書かれているものを編集しようとした場合, わざわざその文にカーソルを合わせてデリートしなければならないので面倒です.
1文書くごとに改行するというのは慣れないかもしれませんが, 慣れると編集がとても楽になります.
これに関連して, 注意点をもう一つ...
たまに段落はじめのインデントのつもりで行頭に全角スペースが挿入されているものを見かけますが, やめてください.
LaTeXでは空行1つが改段落に相当し, 自動で行頭のインデントも挿入されるので行頭のインデントを自分で書く必要はありません.
段落はじめの文章の行頭に全角スペースを書くと結果的に2つ分字下げされてしまい, 悪影響しかありません.
1行に1文を意識しましょう.1行に1文だと読みやすく, 編集もしやすいです.例えば, 推敲の結果, この文が不要になった場合, この行を削除あるいはコメントアウトするだけで消すことができます.もし, 1行に複数の文があった場合, その文をカーソルで選択して削除する必要が生じます.LaTeXでは行単位でのコメントしかできないので, その部分だけをコメントアウトということもできません.
1行に1文を意識しましょう.
1行に1文だと読みやすく, 編集もしやすいです.
%例えば, 推敲の結果, この文が不要になった場合, この行を削除あるいはコメントアウトするだけで消すことができます.
もし, 1行に複数の文があった場合, その文をカーソルで選択して削除する必要が生じます.
LaTeXでは行単位でのコメントしかできないので, その部分だけをコメントアウトということもできません.
数式は基本的にalign
LaTeXの別行立数式環境はいくつか用意されていますが, こだわりがないうちは**「alignを使え!」**でOKです.
たくさんある別行立数式環境のうちよく使われるものは
\[ \]
$$ $$
- equation
- eqnarray
- align
でしょう.
このうち$$ $$
は非推奨, eqnarray
はAMSMathでは非推奨です.
$$ $$
(ドル2つで数式を囲む)はLaTeXではなくTeXのコマンドなので, LaTeXでは非推奨です.
使わないほうがいいでしょう.
eqnarray
はAMSMathではサポートされていないようです.
多くの人はAMSMathを利用しているでしょうから, eqnarray
も使わないほうがいいでしょう.
そしてeqnarray
でできることは大体align
でできるのでわざわざ使う必要もありません.
残りの\[ \]
, equation
, align
の違いを大雑把に説明すると次のようになります.
-
\[ \]
: 数式番号が付与されない. 1行のみ. -
equation
: 数式番号が付与される. 1行のみ. -
align
: 数式番号が付与される. 複数行可能.
「align
でよくね」と思った皆さん.
正解です.
大体, align
で事足ります.
厳密に言えばalign
が適切でない場合もあるのですが, そういう状況に出会すことはあまりないので, 「自分は初心者である」という自覚があるうちはalign
で問題ありません.
\begin{align}
\hat{\mathscr{N}} = \sum_{n=1}^{\infty} \hat{a}_n^{\dagger} \hat{a}_n
\label{eq:N_boson}
\end{align}
\begin{align}
\hat{\mathscr{N}} = \sum_{n=1}^{\infty} \hat{a}_n^{\dagger} \hat{a}_n
\end{align}
\begin{align}
[\hat{a}_m, \hat{a}_n^{\dagger}] &= \delta_{m,n} \\
[\hat{a}_m, \hat{a}_n] &= 0 \\
[\hat{a}_m^{\dagger}, \hat{a}_n^{\dagger}] &= 0
\end{align}
\begin{align}
[\hat{a}_m, \hat{a}_n^{\dagger}] &= \delta_{m,n} \\
[\hat{a}_m, \hat{a}_n] &= 0 \\
[\hat{a}_m^{\dagger}, \hat{a}_n^{\dagger}] &= 0
\end{align}
AMSMathの数式環境について詳しくはamsmathの数式環境まとめを見てください.
図表の位置指定は基本htbp
Wordでは, 図表はユーザーが好きな位置にマウスで動かして配置しますが, LaTeXでは図表の配置位置を考えるのは基本的にコンピュータの仕事であって, 人様が考えることではありません.
どうしてもここに配置したいという事情がない限り, オプションはhtbp
にしてコンピュータに任せましょう.
それがLaTeX流です.
htbp
で配置された結果が気に入らない場合は, 文章をすべて書き終えた後で位置指定を手動で調整することをおすすめします.
文章を書いている途中で図表の位置調整をすると, その時点では最適な位置であっても, 文章の変更に伴って図表の位置が変わってしまい, 最適だと思っていた位置からずれてしまいます.
こういうわけで, マニュアルでの図表の位置調整は文章を完成させた後に行うべきです.
\begin{figure}[htbp]
\begin{center}
\includegraphics[width=120mm]{img/hogehoge.png}
\caption{hogehoge}
\label{fig:hogehoge}
\end{center}
\end{figure}
適度にインデントを入れよう
ソースにインデントを入れることは読みやすくするために重要な技術です.
図表やリストで環境の内部をインデントしておくと, どこからどこまでがその環境なのか一目で分かります.
数式を書く際にも, カッコの中身でインデントするなどの工夫をすると読みやすくなります.
長い数式を書く際にとても有用です.
\begin{itemize}
\item hogehoge
\item foobar
\end{itemize}
\begin{align}
\frac{d \sigma}{d \Omega}
= \left( \frac{Z^2e^2}{4E} \right)^2
\left[
\sin^{-4}\frac{\theta}{2}
+ \cos^{-4}\frac{\theta}{2}
+ (-1)^{2s} \frac{2}{2s+1}
\sin^{-2}\frac{\theta}{2} \cos^{-2}\frac{\theta}{2}
\cos\left\{
\frac{Z^2e^2}{\hbar v} \ln\left(\tan^2 \frac{\theta}{2}\right)
\right\}
\right]
\end{align}
\begin{align}
\frac{d \sigma}{d \Omega}
= \left( \frac{Z^2e^2}{4E} \right)^2
\left[
\sin^{-4}\frac{\theta}{2}
+ \cos^{-4}\frac{\theta}{2}
+ (-1)^{2s} \frac{2}{2s+1}
\sin^{-2}\frac{\theta}{2} \cos^{-2}\frac{\theta}{2}
\cos\left\{
\frac{Z^2e^2}{\hbar v} \ln\left(\tan^2 \frac{\theta}{2}\right)
\right\}
\right]
\end{align}
全角スペースは殺せ!
書いてある通りです.
よほどの理由がない限り, 全角スペースは全て殺してください.
最後に
上の注意を踏まえればあなたのLaTeXソースは解読しやすくはなります.
しかし, あなたの書く文章そのものが変わるわけではありません.
論理的かつ簡潔に文章を書く技術は一朝一夕に身につくものではありません.
自分の論理を意図通りに簡潔に表現する努力を怠らないようにしたいものです.
(まぁ私も他人のこと言えないのですがね...)