%%
%%	sample-20111213.tex
%%
%%	このファイルは、sample-20110614.tex をコピーして作る
%%

\documentclass[a4j,titlepage]{jarticle}	% レポートの場合は、表紙を独立させる

%%
%%	追加機能の宣言
%%
%%	ここでは、
%%		「図データの取込」のために graphicx
%%		「枠囲み」のために ascmac
%%	を、それぞれ利用しています。
%%

\usepackage[dvipdfm]{graphicx}
\usepackage{ascmac}

%%
%% マクロ定義
%%

\newcommand{\BS}{$\backslash$}
\newcommand{\MyMacro}{マクロ定義の例}

\newcommand{\MyName}{%
K%
\kern -.1em\lower .2ex\hbox{u}%
\kern -.1em\lower -.2ex\hbox{r}%
\lower -.4ex\hbox{i}%
\lower -.2ex\hbox{n}%
o}

\newcommand{\Atenten}[1]{a_1, a_2, .., a_{#1}}
\newcommand{\Tenten}[2]{#1_1, #1_2, \cdots, #1_{#2}}
\newcommand{\Btenten}[1]{\Tenten{b}{#1}}

%%
%%	個人固有の情報
%%
%%	自分の名前、所属、連絡先を記述しておく
%%		連絡先のメールアドレスは、プライバシーの観点から削除してもよい
%%

\author{}

%%
%%	文章の公開日時
%%
%%		レポートの場合は、「出題日」にすること
%%

\date{
{\Large
\vspace*{50mm}
\begin{tabular}{ll}
出題 & 2011/12/13\\
学科 & 数学科\\
学年 & 1 年 \\
番号 & 9999 \\
氏名 & 栗野俊一
\end{tabular}
}}	% 日時は課題の出た日にする

%%
%%	文章のタイトル
%%

\title{コンピュータ概論のレポート\\
{\large --- \TeX マクロ ---} 
}

%%
%%	文章の開始
%%

\begin{document}
\maketitle		% 表題を表示させる
	
%%
%%	本文開始
%%

%%% ここに「本文」を入れる。

\section{マクロの利用例}

色々な人が色々なマクロを定義して公開しているので、それを利用するには、
そのマクロが定義されているファイルを取り込めばよい。

\begin{itemize}
\item \verb|\input| で取り込む。

次の例は、macro.tex の中に定義されているマクロを利用する場合に使う。
macro.tex はタイプセットしたい \TeX ファイルと同じフォルダにおいておく。

\begin{itembox}[l]{\BS input マクロを利用 ``macro.tex'' を利用する}
\begin{verbatim}
\input{macro.tex}
\end{verbatim}
\end{itembox}

\item \verb|\usepackage| で取り込む。

次の例は、``ascmac.sty'' の中に定義されているマクロを利用する場合に使う。
``ascmac.sty'' は、予めインストール済 ( 特定なフォルダ
\footnote{{\tt C:\yen{}w32tex\yen{}share\yen{}texmf\yen{}platex\yen{}base} にある。}
においてある.. )とする。

タイプセットしたい \TeX ファイルと同じフォルダにおいてもよい。

\begin{itembox}[l]{\BS usepackage マクロを利用して ``ascmac.sty'' を取り込む}
\begin{verbatim}
\usepackage{ascmac}
\end{verbatim}
\end{itembox}

\end{itemize}

\section{マクロの定義}

\subsection{マクロの定義の位置}

マクロの定義は、{\gt どこでも} できるが、
{\gt 定義された行から後ろで有効になる} ので、
できるだけ、先頭で行う事が望ましい。

その一方、{\gt マクロの定義の中で他のマクロを利用する事} が多いので
その定義の後に後になる。

したがって、通常自分が定義するマクロは、\verb|\usepackage| の後、
\verb|\begin{document}| の前におくことが基本となる。

\verb|\input| などは、\verb|\usepackage| の直後にすると良いかもしれない。

\subsection{単純マクロの定義}

マクロを定義する場合は、
「マクロを定義するマクロ(\verb|\newcommand|,\verb|\renewcommand| など..)」を利用するとよい。

マクロ名はなんでもよいが、既存のマクロと名前が被るといけないので、自分が
作るマクロ名は、大文字で始めるとか、My や Kurino などの、専用のキーワード
を先行させるなどの工夫
\footnote{
style ファイル内では実は、
特別な工夫(\BS makeatletter, \BS makeatother)をする事によって、
名前の中に特別な文字(@)を含め、
重複をさけるようになっている。
}
をするとよい。

\begin{itemize}
\item \verb|\newcommand| で定義する。
\begin{description}
\item[定義] 単純なマクロ(\verb|\MyMacro|)の定義
\begin{itembox}[l]{\BS newcommand による単純なマクロ定義}
\begin{verbatim}
\newcommand{\MyMacro}{マクロ定義の例}
\end{verbatim}
\end{itembox}
\item[参照] マクロの利用例
\begin{itembox}[l]{マクロの利用例}
\begin{verbatim}
文中に 「\MyMacro 」とマクロ名を記述するだけ。
マクロ名の後ろには空白をいれよう。
\end{verbatim}
\end{itembox}
\item[結果] マクロの利用結果
\begin{itembox}[l]{マクロの利用結果}
文中に 「\MyMacro 」とマクロ名を記述するだけ。
マクロ名の後ろには空白をいれよう。
\end{itembox}
\end{description}

\item \verb|\def| 
\footnote{
\LaTeX の多くの命令は、\TeX のマクロで実現されている。
\TeX には、基本命令があり、\LaTeX の命令(マクロの形で定義されている..)も
最終的には、それで実現されている。
\BS def は \TeX の基本命令の一つであり、これがマクロ定義機能の基本となるし、
また、\LaTeX でも、それが利用できる。
しかし、\LaTeX では、表現の統一や、他の命令との兼ね合いから、\BS newcommand と
という新しい定義マクロが用意されており、以下では、そちらだけを説明する。
}
で定義する。
\begin{description}
\item[定義] 単純なマクロ(\verb|\MyMaclo|)の定義
\begin{itembox}[l]{\yen def による単純なマクロ定義}
\begin{verbatim}
\def\MyMaclo{マクロ定義の別の例}
\end{verbatim}
\end{itembox}
\def\MyMaclo{マクロ定義の別の例}
\item[参照] マクロの利用例
\begin{itembox}[l]{マクロの利用例}
\begin{verbatim}
どちらで定義されていても、
文中に 「\MyMaclo 」とマクロ名を記述する事は同じ。
\end{verbatim}
\end{itembox}
\item[結果] マクロの利用結果
\begin{itembox}[l]{マクロの利用結果}
どちらで定義されていても、
文中に 「\MyMaclo 」とマクロ名を記述する事は同じ。
\end{itembox}
\end{description}

\end{itemize}

\subsection{自分の名前のロゴを作ってみる}

TeX の特徴的なロゴ ( \TeX ) も、マクロの例になっており、
文中で \verb|\TeX| と書く事によって利用できる
\cite{yatimata2}
。

このマクロは文字の表示位置を変更するだけで実現されている。

\begin{description}
\item[定義] 単純マクロ \verb|\MyName| を定義

\begin{itemize}
\item マクロ定義が、みやすいように、適度に改行をいれている。
\item ただ、マクロの定義内容の中に、無駄な改行の挿入をさけるために、文字の直後に\% を入れて改行している。
\item \BS lower で少し下げる。 ex は文字の高さを表わし、係数の 0.2 は、そのサイズの 0.2 倍の意味となる。
\item 係数に - をつければ逆方向の意味となる
\end{itemize}

\begin{itembox}[l]{自分の名前のロゴの定義}
\begin{verbatim}
\newcommand{\MyName}{%
K%
\kern -.1em\lower .2ex\hbox{u}%
\kern -.1em\lower -.2ex\hbox{r}%
\lower -.4ex\hbox{i}%
\lower -.2ex\hbox{n}%
o}
\end{verbatim}
\end{itembox}

\item[参照] \verb|\MyName| の参照

\begin{itembox}[l]{ロゴの利用例}
\begin{verbatim}
私の名前は \MyName です。
\end{verbatim}
\end{itembox}

\item[結果] \verb|\MyName| の表示結果

\begin{itembox}[l]{ロゴの表示}
私の名前は \MyName です。
\end{itembox}

\end{description}

\subsection{引数付きマクロの定義}

マクロ名の後ろに引数を付加する事により、より柔軟なマクロを作成する事ができる。

\begin{itemize}
\item \BS newcommand でマクロを定義する場合に、引数の個数を指定できる。
\item マクロ定義の本体の中で \# + 数値(n)で、n 番目の引数を参照できる。
\item 引数付きマクロを利用する場合は、マクロ名の後ろに引数を並べるが、その場合には、カーリーブラケット(「\{」 と 「\}」) で囲むのが望ましい。
\end{itemize}

\begin{description}
\item[定義] 一つの引数付きマクロ\verb|\Atenten| を定義する。

  \begin{itemize}
  \item 引数の個数が \verb|[1]| という形で、一個ある事が示される。
  \item 引数の参照には \# を使う。
  \end{itemize}

\begin{itembox}[l]{引数付きマクロ \BS Atenten の定義}
\begin{verbatim}
\newcommand{\Atenten}[1]{a_1, a_2, .., a_{#1}}
\end{verbatim}
\end{itembox}


\item[参照] マクロ\verb|\Atenten| の参照

  \begin{itemize}
  \item マクロの引数は、マクロ名の後に 「\{」と「\}」で囲んで指定する。
  \end{itemize}

\begin{itembox}[l]{\BS Atenten の利用方法}
\begin{verbatim}
二つの数列 $\Atenten{n}$ と $\Atenten{m}$ を比較する事を考える。
\end{verbatim}
\end{itembox}

\item[結果] マクロ\verb|\Atenten| の表示結果

\begin{itembox}[l]{\BS Atenten の表示結果}
二つの数列 $\Atenten{n}$ と $\Atenten{m}$ を比較する事を考える。
\end{itembox}

\end{description}

マクロ \verb|\Atenten| は、$a$ 数列だけなので、より汎用な \verb|\Tenten| を
定義する。

\begin{description}
\item[定義] 二つの引数をもつマクロ\verb|\Tenten| を定義する。

  \begin{itemize}
  \item 引数の個数が \verb|[2]| という形で、ニ個ある事が示される。
  \end{itemize}

\begin{itembox}[l]{引数付きマクロ \BS Tenten の定義}
\begin{verbatim}
\newcommand{\Tenten}[2]{#1_1, #1_2, \cdots, #1_{#2}}
\end{verbatim}
\end{itembox}


\item[参照] マクロ\verb|\Tenten| の参照

\begin{itembox}[l]{\BS Tenten の利用方法 1}
\begin{verbatim}
二つの数列 $\Tenten{b}{n}$ と $\Tenten{b}{m}$ を比較する事を考える。
\end{verbatim}
\end{itembox}

\item[結果] マクロ\verb|\Tenten| の表示結果

\begin{itembox}[l]{\BS Tenten の表示結果}
二つの数列 $\Tenten{b}{n}$ と $\Tenten{b}{m}$ を比較する事を考える。
\end{itembox}

\end{description}

さらに、これを利用して、\verb|\Btenten| を定義すると便利。

\begin{description}
\item[定義] マクロ\verb|\Btenten| を定義する。

  \begin{itemize}
  \item \verb|\Btenten| の定義の中で\verb|\Tenten| を利用する。
  \end{itemize}

\begin{itembox}[l]{引数付きマクロ \BS Btenten の定義}
\begin{verbatim}
\newcommand{\Btenten}[1]{\Tenten{b}{#1}}
\end{verbatim}
\end{itembox}

\item[参照] マクロ\verb|\Btenten| の参照

\begin{itembox}[l]{\BS Tenten の利用方法 2 ( \BS Btenten ) }
\begin{verbatim}
二つの数列 $\Btenten{n}$ と $\Btenten{m}$ を比較する事を考える。
\end{verbatim}
\end{itembox}

\item[結果] マクロ\verb|\Btenten| の表示結果

\begin{itembox}[l]{\BS Btenten の表示結果}
二つの数列 $\Btenten{n}$ と $\Btenten{m}$ を比較する事を考える。
\end{itembox}

\end{description}

\verb|\Atenten| も、\verb|\Tenten| を利用するようにしてみる。

\begin{description}
\item[定義] マクロ\verb|\Atenten| を「再」定義する。

  \begin{itemize}
  \item 再定義する場合は、\verb|\renewcommand| を使う。
  \end{itemize}

\begin{itembox}[l]{引数付きマクロ \BS Atenten の再定義}
\begin{verbatim}
\renewcommand{\Atenten}[1]{\Tenten{A}{#1}}
\end{verbatim}
\end{itembox}

\renewcommand{\Atenten}[1]{\Tenten{A}{#1}}

\item[参照] マクロ\verb|\Atenten| の参照 (再定義された後に影響される)

\begin{itembox}[l]{\BS Tenten の利用方法 3 ( \BS Atenten ) }
\begin{verbatim}
二つの数列 $\Atenten{n}$ と $\Atenten{m}$ を比較する事を考える。
\end{verbatim}
\end{itembox}

\item[結果] マクロ\verb|\Atenten| の表示結果(再定義された後から表示が変化する)

\begin{itembox}[l]{\BS Atenten の表示結果}
二つの数列 $\Atenten{n}$ と $\Atenten{m}$ を比較する事を考える。
\end{itembox}

\end{description}

\section{\BS makeatletter と \BS makeatother }

通常、\TeX では、「@(アットマーク)」 は、
英字とは認識されない。
したがって、マクロ名の中でも利用できない。

ところが、\verb|\makeatletter| 命令により、
次に、\verb|\makeatother| 命令がくるまでの間、
@ も英字とみなすように \TeX に指示を与える事ができる。

したがって、@ をマクロ名として含むようなマクロは、
通常の利用者では定義も利用もできないため、マクロ名の
重複という問題点を回避できる。

しかし、以下の議論では、参考文献 (「LaTeX2eまくろの八衢」\cite{yatimata2})
にしたがって、@ を含むマクロを利用する事にする。

\section{繰り返し}

\verb|\@for| を利用する事によって、「,(カンマ)」で区切られた文字列の
リストを順に処理できる。

\begin{description}
\item[定義] マクロ\verb|\@for| を利用した繰返し

  \begin{itemize}
  \item \verb|\@for| には「@」が含まれているので、これを利用するには、
\verb|\makeatletter|、\verb|\makeatother| が必要になる事に注意。
  \end{itemize}

\begin{itembox}[l]{引数付きマクロ \BS DoFruit の定義}
\begin{verbatim}
\makeatletter
\newcommand{\DoFruit}[1]{%
\@for\member:=#1\do{(\member)}%
}
\makeatother
\end{verbatim}
\end{itembox}

\makeatletter
\newcommand{\DoFruit}[1]{%
\@for\member:=#1\do{(\member)}%
}
\makeatother

\item[参照] マクロ\verb|\DoFruit| の参照

\begin{itembox}[l]{\BS @for の利用方法 ( \BS DoFruit ) }
\begin{verbatim}
\DoFruit{orange,apple,banana}
\end{verbatim}
\end{itembox}

\item[結果] マクロ\verb|\DoFruit| の表示結果

\begin{itembox}[l]{\BS DoFruit の表示結果}
\DoFruit{orange,apple,banana}
\end{itembox}

\end{description}

%\input{counter.tex}

%%
%%	参考文献
%%

\begin{thebibliography}{n}
\bibitem{yatimata2}藤田眞作,''「LaTeX2eまくろの八衢」オンライン版'',
\verb|http://xymtex.com/fujitas/fujita.html|,2004
\end{thebibliography}

%%
%%	本文終了
%%

\end{document}

%%
%%	ファイルの終了
%%
