2012年8月11日土曜日

2.LaTeXをスッキリ記述するために
$\label{i} \tag{i} 相互参照を使う$
$\label{ii} \tag{ii} 定理環境を使う$
$\label{iii} \tag{iii} 番号を整理する$
$\label{iv} \tag{iv} 外部ファイルを読み込む$
$\label{v} \tag{v} マクロを使う$

($\ref{i}$) 相互参照を使う
まず、相互参照を使う目的を少しまとめてみます。

それほどページ数が多くない、または式や図などがあまり含まれない場合は、そのまま付けられた番号などを入力すれば良いのですが、ページ数が多くなり、かつ式や節・章などを参照することが多くなれば、どの番号だったか、どのページにあったのかを一々調べるか、覚える必要が出てきます。
また、節・章や式を挿入、削除した場合、それらを全て修正する必要が出てきます。

この参照を手動ではなく、自動でやってくれるのが、\label と \ref (\pageref)です。
(また参考文献の場合は、\bibitem と \citeを用います。)

どのように使うのかは、こちらのページ(A),(B)を参考にしてみてください。

\labelに付ける名前は、番号を入れない方が良いでしょう。
何故なら、その番号も変更することになれば、意味が無いからです。
(参考にしている本などのページと式番号を\labelに使うのであれば大丈夫ですが…。)

また、上で参考に上げたページにもあるように、2回コンパイルをしないとちゃんと相互参照されません。

それでも、全部数字などを直すよりは、手間は無いので良いと思います。
後、余談ですが、式番号などを独自のものにしておきたい(このページの最初の部分がそうですが)場合は、\tag{X}などとすることで、式番号を変更できます。

($\ref{ii}$) 定理環境を使う
使う目的を少しまとめましょう。

これは、定理環境と言っていますが、定理以外の定義・補題・注意にも使えます。そのそれぞれを繋げた通し番号を作れたりできます。これは実際に使ってみる方が分かりやすいですね。
(さらに定義・定理などを一覧でまとめることが出来たりもするみたいです。こちらを参照してください。)


定理・補題・注意は通し番号にして、定義は別にしています。

ソースは、以下のようになります。これを参考に説明していきます。
---
\documentclass[12pt,a4j]{jarticle}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\theoremstyle{remark}
\newtheorem{remark}[theorem]{Remark}

\begin{document}
\section{最初の章}
\subsection{最初の節}
\begin{theorem}[XXX's Theorem]
定理
\begin{equation}
a+b=c
\end{equation}
\end{theorem}

\begin{lemma}[XXX's Lemma]
補題
\begin{equation}
A+B=C
\end{equation}
\end{lemma}

\begin{definition}[XXX's Definition]
定義

\begin{equation}
1+1=2
\end{equation}
\end{definition}

\begin{remark}[XXX's Remark]
注意
\end{remark}

\begin{proof}[Proof of XXX's Theorem]
証明
\begin{equation}
a+b=c
\end{equation}
\end{proof}

\subsection{2つ目の節}

\begin{theorem}[YYY's Theorem]
定理
\begin{equation}
a+b=c
\end{equation}
\end{theorem}

\begin{lemma}[YYY's Lemma]
補題
\begin{equation}
A+B=C
\end{equation}
\end{lemma}

\begin{proof}[Proof of YYY's Theorem]
証明は省略
\end{proof}

\section{2章}

\begin{theorem}[ZZZ's Theorem]
定理
\begin{equation}
a+b=c
\end{equation}
\end{theorem}

\begin{definition}[ZZZ's Definition]
定義

\begin{equation}
1+1=2
\end{equation}
\end{definition}

\begin{remark}[ZZZ's Remark]
注意
\end{remark}

\begin{proof}[Proof of XXX's Theorem]
証明
\begin{equation}
a+b=c
\end{equation}
\end{proof}

\end{document}
---
赤文字の部分が定理環境を整えています。
1行目:\newtheorem{theorem}{Theorem}
これによって、\begin{theorem}が使えるようになります。もちろん、theoremを他に置き換えても良く、theoteiriにすることでもっと簡易にできます。
Thoremは、数字の前・先頭に表示させる部分です。

試しに、thoremteiriに、Theorem定義にしてみると...(最後にまとめます

2行目:\newtheorem{lemma}[theorem]{Lemma}
[theorem]の部分以外は、1行目と同じです。この[theorem]の部分が、theoremと通し番号を付ける意味になっています。

試しに、この[theorem]の部分を削除してみると...(最後にまとめます

3行目:\theoremstyle{definition}
\theoremstyle は、3つの形式、plain,definition,remarkを指定できます。
plain:見出し太字本文斜体
definition:見出し太字、本文斜体ではない
remark:見出し斜体、本文斜体ではない
となります。これを3行目で宣言することによって

4行目:\newtheorem{definition}{Definition}
definitionは、見出しが太字になり、本文は斜体ではなくなっています。

5行目、6行目は、今までのことから
remarkは、theoremと通し番号を付けて、見出しは斜体で、本文は斜体ではなくなっています。

また、使用するときは


\begin{theorem}[見出し]
本文
\end{theorem}

とするだけです。もちろん、他にも『系』や『例』も定理環境で整えて使うことが可能です。
捕捉として、proof環境があり、よく使う、白抜き四角を最後に付け加えてくれるものがあります。
(Q.E.Dにしたり、黒四角にしたりと、色々変更も可能みたいです。各自の好みで)

最後にまとめて赤文字の部分を以下のように変更した場合

\newtheorem{teiri}{定理}
\newtheorem{hodai}{補題}
\theoremstyle{definition}
\newtheorem{definition}{定義}
\theoremstyle{remark}
\newtheorem{tyuui}[teiri]{注意}


このようになります。さらに加えて、この通し番号などをもっと整理してみましょう。

($\ref{iii}$) 番号を整理する
何のためにこれをするのかと言うと、見栄えを良くするためです。
章や節毎に、番号が整理されている方が見やすいですし、そのような本・論文が多いように思います。
例えば、2章の3番目の定理(最初から5番目)は、『定理 2.3』 と言った表示をすることで、普通に書いた場合の『定理 5』よりも見栄えがよく感じます。同じく、式番号にも。

まず最初に、定理環境を使って、定義・定理などの見出し番号を整理してみましょう。

先ほどの赤文字の部分を、以下の様に書き換えます。
---

\newtheorem{theorem}{Theorem}[subsection]
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}{Definition}[section]
\theoremstyle{remark}
\newtheorem{remark}[theorem]{remark}
---
すると、以下のように出力されます。


おかしな部分がありますが、その前に書き換えた部分の説明をしましょう。

1行目:\newtheorem{theorem}{Theorem}[subsection]
4行目:\newtheorem{definition}{Definition}[section]

それぞれ加えられた部分が見出し番号に関係しています。
[subsection]とすると、subsection毎に、番号が振り分けられます。(2.3.1 のように...)
同様に、[section]とすると、section毎に、番号が振り分けられます。(2.3 のように...)

(正直、subsection毎にするほど細かくすることは、あまり無い(例・演習問題とかを別にするならありかも…?)ので、ほとんど[section]で問題ないと思います。)

さて、ここで出力されたものを見直すと、2章の最初の定理が2.0.3になってしまっています。
(それにしたがって、その後ろの注意も2.0.4になってしまっています...)

本来なら2.0.1になって欲しいのです。(2章0節の最初の定理だから)

こういう、番号が思ってたものとズレることは多々あります。\setcounterを使います。
---
\setcounter{theorem}{0}
---

\section{2章}から\begin{theorem}の間に挿入すればこの場合は大丈夫です。
(theoremのカウンターを0にすることで、次が1になることで回避できます。)

またこのとき、定理環境で定義したものが多い場合。どれに何を割り振ったのか分からなくなることを防ぐために、他の行で割り振ることも可能です。(\numberwithin)
つまり、赤文字の部分に加えて、以下の2行を追加することは同じになります。
---
\numberwithin{theorem}{subsection}
\numberwithin{definition}{section}
---
そして、これを使って、式番号にもsection毎に番号を振り分けることもできます。
---
\numberwithin{equation}{section}
---
を追加した場合、以下が出力されます。

これでかなり番号も整理されますね。
ちなみに、定理環境のものなどに番号をつけたくない場合は、\renewcommandを使います。
これについては、こちらを参照してください。

($\ref{iv}$) 外部ファイルを読み込む
これは、長くなるorよく使うものをまとめて、どこかに保存・共有し、メインのファイルをスッキリ見やすくすることが出来ます。
例えば、マクロや、定理環境など、書く人の気分が変わらない限り、ほぼ変わることがないものは、まとめて置いたりできます。
また、章や節毎に保存して置くことで毎年の教科書(レジュメ)内容を簡単に変更できたりします。

学校の先生や塾講師の方に取って良い使い方は、例えば演習問題の出題順序を変えたりするのに毎回コピペすることが無いように、問題ファイルを作り、そのファイルを読み込むことで、演習問題を作成することができます。

実際にやってみましょう。

(今まで使った)定理環境の定義など
---
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\theoremstyle{remark}
\newtheorem{remark}[theorem]{remark}
\numberwithin{theorem}{subsection}
\numberwithin{definition}{section}
\numberwithin{equation}{section}
---
これだけを書いた内容を、(例えば)def-thn.texとして保存します。
そして、今まで上の内容を書いていた部分に
---
\input{def-thn.tex}
---
と、これだけ書けばよくなります。

使う部分は、あまりないかも知れませんが、最初に書いたことをスムーズ・スマートに行う場合には最適だと思うので、工夫して使うことをオススメします。
(しかし全部の章・節を別々のtexで保存するのは、逆に面倒です…コンパイルをそれぞれする必要が出てくるので…)

($\ref{v}$) マクロを使う
これは、知っておかないとめちゃくちゃ大変です。
例えば、ベクトルや、内積などを何度も・多く記述する際に役に立ちます。

簡単なものだけですが、紹介していきます。

\newcommand{\R}{{\mathbb{R}}}
\newcommand{\vec}[1]{{\overrightarrow{#1}}}
\newcommand{\norm}[1]{{\|{#1}\|}}
\newcommand{\inn}[2]{{\langle{#1},{#2}\rangle}}
\newcommand{\integ}[4]{{\int_{#1}^{#2} {#3} {#4}}}

これで、マクロが定義されます。何をしてるか簡単に言うと、『青字部分の代わりにオレンジ部分を使うことが出来るよ!』と言っています。

1行目が簡単なので、それを説明しましょう。Rは、普通に打つと$R$となります。
実数の集合を表す時に、良く白抜き文字にしますが、それは$\mathbb{R}$(\mathbb{R})を使います。

しかし、毎回\mathbb{R}と打つのは面倒臭い…。そんな時に、マクロで定義することで、単に\Rと打つだけで、白抜き文字が表示されるようになります。

まだ有難味が余りありませんね…。
次に2行目を見てください。
今度は、[1]と言うものがあります。これは、引数が1つあることを指します。

具体的に見ると、ベクトル$\overrightarrow{AB}$(\overrightarrow{AB})。
この{AB}の部分、『{}』が1つあることがここの[1]と関係していると思っておけば大丈夫です。

つまり今まで、\overrightarrow{AB}と書いていた部分を\vec{AB}と書くだけで良くなります。
これは、打ち間違えも減らせますし、ファイルも無駄に大きくなりません。

3行目も引数1つで、これはノルムを表せますね。では、引数を2つにしてみましょう。

4行目は、[2]となっていますから、引数が増えました。
内積$\langle{a},{b}\rangle$(\langle{a},{b}\rangle)は、\inn{a}{b}で表すことが出来るようになります。

5行目は、[4]となって、さらに引数が増えています。
積分$\int_1^{\infty} \frac{1}{x} dx$(\int_1^{\infty} \frac{1}{x} dx)は、\inte{1}{\infty}{\frac{1}{x}} dxとかけます。
(ただの積分だと有難味がないので…同じ積分範囲の物が多数などの場合は使えそうですね。)
(他にいい例が思い浮かばなかったのでこれぐらいにしておきます…。)

さて、この時青の部分に1つ余分に『{}』があるように思いますが、確かにそうです。
しかし、これは色々エラーが起こることを防いでいるので、つけておいて損はありません。

今回は、これで以上になります。





0 件のコメント:

コメントを投稿