2013年3月13日水曜日

使ってはいけない LaTeX のコマンド・パッケージ・作法

コメントで頂いた情報を「2. 数式関係」に,使ってはいけないパッケージの自動チェックについての項を末尾に追記しました.(2013/10/12)

制御関係の学会では LaTeX というソフトで論文を書きます.LaTeX の歴史は古く,現代の水準で考えると設計し直すべきと思う部分も多々ありますが,世間で広く使われている Word の生産性が論文を書くという作業において今ひとつという事情も手伝ってか,現在に至るまでデファクトスタンダードの座を維持しています.

Wikipedia の記事によると $\LaTeX2e$ がリリースされたのは1993年,つまり20年前で,これ以降様々なパッケージによる拡張が行われています.現在(2013/03/11) CTAN には 4451 個  のパッケージが登録されているそうです.また,Web上にも色々なテクニックが蓄積され,大抵のことを実現する方法は検索すれば出てくる状況になっています.

しかし,その中には互換性の問題やより優れた代替が存在するために現在では使うべきでないものも相当数あります.
にそれらに関する情報はあるものの(これらも既に5年以上前の情報ですが…)日本語の情報が少ないせいか使うべきでないパッケージやコマンドを使っている学生さんをよく見かけるので,重要そうなものを,研究室内あるある順でまとめておきます.以下の内容はほとんど上記の記事の翻訳+まとめ+αになっています.


1. フォントスタイルの変更

{\bf ほげほげ} みたいなパターンをたまに見ますがこれは古い形式です.下記の表を参考にしてください.

 
 
古いコマンド
適切なコマンド
一時的な変更
全体の変更/切り替え
ボールド
{\bf ...}
\textbf{...}
\bfseries
強調
(欧文はイタリック・和文はゴシック体になる場合が多い)
\emph{...}
\em
イタリック
{\it ...}
\textit{...}
\itshape
デフォルトの太さの書体

\textmd{...}
\mdseries
ローマン
{\rm ...}
\textrm{...}
\rmfamily
スモールキャピタル
{\sc ...}
\textsc{...}
\scshape
立体のサンセリフ体
{\sf ...}
\textsf{...}
\sffamily
スラント体(いわゆる斜体)
{\sl ...}
\textsl{...}
\slshape
タイプライタ体
{\tt ...}
\texttt{...}
\ttfamily
立体
\textup{...}
\upshape

2. 数式関係

数式を使う論文であれば99% amsmath.sty を使っているはず&使うべきなので,使っている前提で書きます.

使ってはいけないコマンド

  • \begin{eqnarray}, \begin{eqnarray*}, \begin{displaymath}
    amsmath.sty はこれらをサポートしていません.使用した場合スペースの入り方に一貫性がなくなります.なくなる可能性があります.

    ※ コメントで頂いた情報によると \begin{displaymath} は LaTeX で  \[\] と定義されているので  \[ … \] と同様の出力になるそうです.

    個人的には amsmath.sty を使う場合の番号無し別行立て数式は問答無用で 
    \begin{equation*} を使うべきな気がしますが, l2tabu で \[ … \] が許容されて \begin{displaymath} が禁止されているのは \[ … \] が amsmath.sty でわざわざ再定義されている(圧倒的にタイプが楽なので需要があるのだと思います.)のに対して \begin{displaymath} は特に対処されておらず(積極的に使う理由が無いと思います),amsmath.sty 以外の部分での再定義や LaTeX の実装の変更で同様の結果が得られなくなる可能性がわずかにあるからだと思います.(2013/10/12 追記)
  • \$\$ ... \$\$
    ドルマーク2個ずつ(計4個)で挟んで数式モードにする作法がありますが,これは Plain TeX (LaTeX のベースとなっているシステム)のコマンドで, LaTeX で使うべきものではありません.また,数式中の縦方向の余白を変更してしまう問題があります.

使うべきコマンド

  • \ [ … \ ]\begin{align} など
    詳しくは AMS-LaTeX のページにある amsmath user's guide を参照してください.

3. \begin{figure} \begin{center}

図を挿入する際の定型文として \begin{figure} \begin{center}... というのがよく使われていますが不適切です.
  • よく使われているが良くない
    \begin{figure}
      \begin{center}
        \includegraphics{hoge}
      \end{center}
    \end{figure}
  • こっちが正解
    \begin{figure}
      \centering
      \includegraphics{hoge}
    \end{figure}
よく使われている方では center 環境に起因する余分な余白が入ります.
学会提供のスタイルファイルとかだと,この余白を勘定に入れてデザインされているとしか思えないものもあるので悩ましいですが…(2013/10/1 追記)

4. \usepackage{graphics} vs. \usepackage{graphicx}

これらは画像ファイルを扱うためのパッケージです.僕の観測範囲では使われてる割合が同じくらいで,どちらがスタンダードか気になりつつも慣れている方を使っている人が多いんじゃないかと思います.実はこれらの違いはコマンドが受け取るオプションの指定の仕方だけらしいので好きな方を使えばOKです.
詳しくは grfguide を参照してください.

5. EPS 形式の図

LaTeX の画像と言えば EPS 形式! という向きもありましたが,dvips を使っていたころの名残なので,そろそろ認識を改める必要があります.

ベクター画像

長らく EPS 形式が推奨されていて,そういう情報があふれていますが,現在は PDF がベストです.
最近は dvipdfmx で最終出力が PDF になっているか pdflatex で PDF を直接出力していると思うので,図を PDF で用意しておくことによって変換作業を経ずに直接最終出力に埋め込むことができます.図がPDFで用意されていればプレビューをPDFで行っても十分な速度で動作します.自動的な boundingbox ファイルの作成は最近の TeX ディストリビューションなら可能ですし,Windows でも SumatraPDF を使えば PDF ファイルをロックせずにプレビューが可能なので,そろそろ dvi 形式とおさらばしても良いかと思います.

ラスター画像(写真など)

JPEG がベストです.PDFに直接埋め込まれるので高速かつ画質をコントロールしやすいです.

ラスター画像(スクリーンショットなど)

PNG がベストです.これも直接PDFに埋め込まれるので無駄がありません.

6. subfigure → subfig → subcaption

複数の図を一つの図環境の中にいれて Fig. 1a Fig. 1b のようにラベルを振りたいことは結構あります.そのようなときに頻繁にでてくる subfigure 環境ですが,現在では非推奨です. 
  • すごく古いパッケージ: subfigure
  • 古いパッケージ: subfig
  • お勧めのパッケージ: subcaption
subfigure.sty および subfig.sty はアップデートが行われておらず, hyperref.sty や caption.sty のような最近のパッケージと互換性がないので使わない方が良いです.

7. 付録の作り方

  • 古いスタイル
    \begin{appendix}
      \section{huga}
    \end{appendix}
  • お勧めのスタイル
    \appendix
    \section{huga}

8. ページレイアウトの変更

卒論や修論・内部資料などでスタイルファイルが指定されていない場合,レイアウトを自分でいじることもあるかと思います.この場合にも推奨される方法となるべく避けるべき方法があります.

やってはいけないこと

  • \oddsidemargin などの調整によるレイアウト変更

絶対にやってはいけないこと

  • \hoffset, \voffset をいじること
    l2tabu によると自分が何をやっているか完全に理解している人しか触ってはいけないパラメータだそうです.

ベストプラクティス?

その1 article.cls, report.cls, book.cls (jarticle, jreport, jbook も)を使わない

そもそもスタイルを変えたい理由の90%以上は「余白が広すぎるように感じる」事だったりします.ネット上の例では定型文のように \documentclass{article} が使われていますが,これらのクラスファイルはアメリカ的なレターサイズ文書を前提に作られており,余白がそのままだと A4 では広めに感じることが多いようです.
 余白を狭くしたい場合,とりあえず A4 前提の欧州文化に則して作られた KOMA-Script 由来の
  • scrartcl.cls
  • scrreprt.cls
  • scrbook.cls
  • scrlttr2.cls
の利用を検討してください.
日本語の場合は jsarticle.cls でオプションに a4j を指定してみてください.

その2 typearea.sty を使う

同じく KOMA-Script 由来の typearea.sty を使うと,本文の幅を安全・簡単に調整できます.
\usepackage{typearea}
\typearea{12}
のように使用し,12のところを変えて本文の幅を調整することができます.
このパッケージや上記のクラスファイルに関する詳細は KOMA-Script のドキュメントを参照してください.

その3 geometry.sty を使う

typearea.sty に用意されている選択肢では自由度が足りない場合,geometry.sty を使ってより自由度が高い調整を楽に行うことができます.詳しくは CTAN のページにあるドキュメントを参照してください.

9. リストのカスタマイズ

箇条書きを実現する環境 itemize, enumerate, description をカスタマイズしたいことは多々あると思います.したがってカスタマイズのためのパッケージも色々存在するのですが,なかには時代遅れになっているものがあります.

  • 古いパッケージ: enumerate, mdwlist
  • おすすめのパッケージ: enumitem
    リスト番号の書式を変えたり横に並べたり description 環境の整列方法を変えたりできます.

10. 単位と数値の整形

12345e-67 みたいなのを自動で \(12\,345\times10^{-67}\) のように整形してくれたり,組み合わせ単位(\(\mathrm{kg\,m/s^2}\)のような単位)を適切なスペーシングで組んでくれたり,角度(\(10^\circ\)のような表記)を整形してくれたり数表で小数点の位置をそろえたりしてくれるパッケージです.

単位がイタリック体で書かれていたり読みにくいスペーシングだったりすると論文が雑に見えるので,このあたりのパッケージを活用して楽に見栄えが良い論文を書きたいものです.

11. Times 系フォントへの切り替え

TeX での既定のフォントは Computer Modern という TeX の作者でもある Knuth 大先生が製作されたフォントです.しかし TeX での投稿がメインの論文誌でも Computer Modern が使われていることはあまりなく,Times 系のフォントが多数派です.LaTeX で本文と数式を Times 系フォントにするパッケージはいくつかありますが,古くなっているものも多いです.
長らく txfonts.sty を使ってましたが,さらに新しい newtx.sty というのも出ていたのですね.こちらは数式部分と本文で別のスタイルファイルになっており
\usepackage{newtxtext,newtxmath}
という感じで使います.文字の配置が改善されているらしいです.たしかに数式でちょっと字が詰まり気味になっているところが修正されていて見やすい結果が得られます.ただ,txfonts.sty の詰まり気味な数式に救われていたところもあるので(行の長さが制約されているときに数式をきれいにまとめるのはそれなりに難しい作業なので)痛し痒しという面もあるかもしれません.

12. 古いパッケージの自動チェック(2013/10/12 追記)

上に挙げたような使うべきでないパッケージ・コマンドが含まれていないかチェックするパッケージがいくつか存在します.

まとめ

他にも色々あるような気がしますが,情報が増えたら書き足します.


10 件のコメント:

匿名 さんのコメント...

amsmath パッケージは \[ ... \] を equation* 環境に再定義しますが,displaymath 環境は単なる \[ ... \] の別名なので \[ ... \] と同様に用いても問題ないはずです.
参考: http://tex.stackexchange.com/questions/5788/is-there-a-difference-between-the-displaymath-and-equation-environments

匿名 さんのコメント...

\[ ... \] がうまく表示されてないですね.すみません.

丸田 一郎 (Ichiro Maruta) さんのコメント...

匿名 さんは書きました...
> amsmath パッケージは \\[ ... \\] を equation* 環境に再定義しますが,displaymath 環境は単なる \\[ ... \\] の別名なので \\[ ... \\] と同様に用いても問題ないはずです.

ブログに組み込んであるLaTeXコマンドを整形するスクリプトがコメントの部分にも機能しているようで,コメントが正しく表示されておらず,すみません.

コメントありがとうございます.当該部分は l2tabu の翻訳だったのですが,訳が雑だったのでコメントの情報を踏まえて修正・加筆いたしました.

匿名 さんのコメント...

platexを使用しているんですが、ebbを作らずにjpgやpngが埋め込めないようなのでやっぱりconvert epsしてしまいます。。。

匿名 さんのコメント...

丸田様,
役立つ情報どうもありがとうございます.図は eps より pdf の方が推奨ということですが,現在は論文投稿での図の処理は(もう記事から2年もたってしまっていました)基本的にどの雑誌も pdf 投稿推奨という理解で良いでしょうか?時代遅れなのかも知れませんが,LaTeX投稿推奨の雑誌は eps 推奨という印象がありました…学生さんへのメッセージがあるページだと思うので気になりました.

匿名 さんのコメント...

\rmを使ってはいけないというのは聞いたことがありましたが、
\rmfamilyを使うとCommand \rmfamily invalid in math mode.というエラーがでる場合があるので、エラーが出た場合仕方なく\rmを用いています。

Canonドライバ さんのコメント...

非常に役立つ情報maruta、ありがとう、私はこれは初めてですが、本当に素晴らしい助けです

alba さんのコメント...

Thank you very much for seeing good information.
Thank you very much for seeing good information.
Thank you very much for seeing good information.
Thank you very much for seeing good information.
Thank you very much for seeing good information.

midou midou さんのコメント...

i am browsing this website dailly and get nice facts from here all the time.

Nino Nurmadi , S.Kom さんのコメント...

Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom