情報処理概論目次

スタイルファイルでLaTeXの表現力を高める

LaTeXの達人たちは,さまざまな用途のために利用できるマクロパッケージを(自分のために書き,それを)公開している.

これをスタイルファイル(style file)という. 自分でスタイルファイルを書くにはTeXおよびLaTeXに関する高度な知識を要求するが, 公開されているスタイルファイルを活用すれば,誰でも簡単にLaTeXの表現力を飛躍的に向上させることができる.


LaTeX文書を使っていて表現力に不満を感じたときには,スタイルファイルの利用を考えるとよい. LaTeXのスタイルファイルに関する紹介とその利用法については, の連載記事が非常に役に立つ. LaTeXを使って文書を書くときには必携の資料である.

スタイルファイルの利用例1:木構造

コンピュータファイルについての文書を書く際,左の図のような図が必要になることが少なくない. このような階層構造を表す関係を木構造(tree structure)という. 木構造はコンピュータ科学における最も基本的な概念の1つである.

LaTeX文書にこのような木を描くためのスタイルファイルとしてeclclass.styが公開されている.

以降,このeclclass.styを使って木構造を描く方法を紹介する.

スタイルファイルを指定する

スタイルファイルは,ここで説明するeclclass.styのように,拡張子『.sty』の付いたテキストファイルとして提供されている. 実際,LaTeX文書の先頭でいつも書いている
\documentstyle{jarticle}
においては,実はjarticle.styという文書体裁を定めるスタイルファイルを指定している(これを文書スタイルという).

ここで言うスタイルファイルとは,文書の体裁を定めるjarticle.styやjbook.styなどの文書スタイルとは別の,オプションスタイルと呼ぶものである.

オプションスタイルファイルoption.styを文書スタイルmain.styのLaTeX文書で利用するには,次のように書き始めねばならない.

\documentstyle[option]{main}
オプションスタイルの具体的使用例を以下に述べる.

eclclass.styを使った木構造の描画

スタイルファイルeclclass.styを使って上の図のような木構造を描くには,文書スタイルがjarticleであるLaTeX文書には,次のように指定する.
\documentstyle[eclclass]{jarticle}
たとえば,次のLaTeX文書をコンパイル・表示してみよう. このとき得られる木構造は右図のようである.
\documentstyle[eclclass]{jarticle}
\begin{document}

\begin{classify}{親}
\class{子どもa}
\class{子どもb}
\class{子どもc}
\end{classify}

\end{document}

演習1: 実際にコンパイル・プレビューしてみよ.

ここにある"\class{...}"の中に,下のように"\begin{classify}....\end{classify}"を書いてみる(つまり入れ子にする). このときの木構造が左図である.

\documentstyle[eclclass]{jarticle}
\begin{document}

\begin{classify}{親}
\class{\begin{classify}{子どもa}
       \class{孫a1}
       \class{孫a2}
       \end{classify}}
\class{子どもb}
\class{\begin{classify}{子どもc}
       \class{孫c1}
       \class{孫c2}
       \class{孫c3}
       \end{classify}}
\end{classify}

\end{document}
中カッコ『{』と『}』の対応関係に十分注意する.

演習2: 実際にコンパイル・プレビューしてみよ.

このように,入れ子にしながら木構造を書くことができる. ただし,入れ子レベルの深さには制限がある. このようにして,先頭の図を得るには次のように書けばよいことを理解してほしい.

\documentstyle[eclclass]{jarticle}
\begin{document}
\begin{classify}{言語}
\class{\begin{classify}{自然言語}
       \class{英語}
       \class{\begin{classify}{日本語}
              \class{ですます言葉}
              \class{べらんめい言葉}
              \class{チョベリバ言葉}
              \end{classify}}
       \end{classify}}
\class{\begin{classify}{コンピュータ言語}
       \class{C++}
       \class{JAVA}
       \class{LISP}
       \end{classify}}
\class{\begin{classify}{音楽}
       \class{古典音楽}
       \class{現代音楽}
       \class{Jazz}
       \class{Rock}
       \end{classify}}
\end{classify}
\end{document}

演習3: 実際にコンパイル・プレビューしてみよ.

スタイルファイルの利用例2:文を囲む

次のように,文章を囲みたくなるときがあります.

上の文書は,HTML文書において,改段落タグ<P>の使った実例を説明したものです. LaTeX文書では次のように,オプションスタイルファイルeclbkbox.styを指定して,囲みたい文書の前後を

\begin{breakbox}

\end{breakbox}

で挟むことによって文章を囲むことができます.

\documentstyle[eclbkbox]{jarticle}
\begin{document}
....
HTML2.0以降では段落の指定方法が変わり,タグの組{\tt <P>}と{\tt </P>}で文を挟んで,次のように段落を指定するのです.
\bigskip
\begin{breakbox}
\begin{quote}
\begin{verbatim}
.....
<P>
Webブラウザはワードラップ機能を持っており,Webブラウザのウィンドウサイズを調節したとき,自動的に行を折り返してくれる機能です.
</P> 
<P>
HTMLでは,わざわざ特別なタグで指定しない限り改行は行われませんから,こうした機能は欠かせないのです.
</P>
......
\end{verbatim}
\end{quote}
\end{breakbox}
\bigskip
ただしHTML 1.0との整合性のために,終了タグ{\tt </P>}は省略可能になっています.
....
\end{document}

このスタイルファイルeclbkbox.styの優れている点は,囲んだ文書がページをまたぐ場合にも,ちゃんと囲みがはいります. たとえば,次のようになるのです.

ここでページが変わります.

というように,囲みがページの切れ目でブレークして表されるのです.

複数のスタイルファイルを使う

スタイルファイルを複数使うときには,次のようにカンマで区切って(必要な数の)スタイルファイル名を並べます.

\documentstyle[eclclass,eclbkbox]{jarticle}

\begin{document}
\begin{breakbox}
\begin{classify}{親}
\class{\begin{classify}{子どもa}
       \class{孫a1}
       \class{孫a2}
       \end{classify}}
\class{子どもb}
\class{\begin{classify}{子どもc}
       \class{孫c1}
       \class{孫c2}
       \class{孫c3}
       \end{classify}}
\end{classify}
\end{breakbox}
\end{document}
このときには,次のように木構造をeclclass.styによって,囲みをeclbreakbox.styによって書いたことになります.

スタイルファイルに『ecl...sty』という名前が付いているのは,NTT電気通信研究所(NTT Electric Communication Laboratory)から来ています.

提出課題

  1. ホームディレクトリを{\tt home/}と,コンピュータにおけるディレクトリ名およびファイル名をタイプライタ体で表し,ディレクトリであることを明示するために『/』を名前の後に付けるとする.
    ホームディレクトリ以下のディレクトリ構造(たくさんあるときは,その一部でもよい)をスタイルファイルeclclass.styを使って報告せよ.

    ただし,

    \begin{figure}[htbp]
    \begin{center}
    \begin{classify}{\tt home/}
    \class{\tt Mail/}
    ....
    ....
    \class{\tt tmp/}
    \end{classify}
    \end{center}
    \caption{ホームディレクトリ以下ににあるディレクトリ構造}
    \end{figure}
    
    のように,figure環境を使え.

  2. 引用文書を明確にするために,次のように引用文書(quote環境を使う)をeclbkbox.styのbreakbox環境を使って囲むことがある.
    \begin{breakbox}
    \begin{quote}
    ....
    引用文書
    ....
    \end{quote}
    \end{breakbox}
    
    とくに,プログラムのソースコードやLaTeX文書の生原稿などを文中に引用する時には,次のように,さらにverbatim環境を使う(従って,英数字記号がタイプライタ体で表される).
    \begin{breakbox}
    \begin{quote}
    \begin{verbatim}
    ....
    プログラムソースコードなど
    ....
    \end{verbatim}
    \end{quote}
    \end{breakbox}
    
    簡単なJAVAプログラムをbreakbox環境を使って囲み,そのプログラムの働きを解説せよ.

スタイルファイルのための環境設定

多くの人がスタイルファイルを作成し,それをネットワーク上で公開しています. 基本的なスタイルファイルは
/usr/local/lib/TeX/macros
と
/usr/local/lib/TeX/inputs
に格納されている(さらに,いくつかのファイルを付け加えている). (lsで確認してみよ!)

ここにないスタイルファイルを使うためには,自分で入手する必要がある. 自分のホームディレクトリに,たとえばディレクトリmyinputs/を作成して,それらのスタイルファイルを格納しておき,LaTeX文書でスタイルファイルを指定し,コンパイル時に自動的に読み込んでくれるためには,環境設定ファイル.cshrc(先頭にピリオドが付いている!)に,次のようにLaTeXの環境変数TEXINPUTSを指定しておく.

setenv TEXINPUTS ".:$HOME/myinputs:/usr/local/TeX/inputs:/usr/local/TeX/jmacros:/usr/local/TeX/macros"


情報処理概論目次
mizutani@edu.tuis.ac.jp