• 検索結果がありません。

プログラムソースの挿入

第 9 章 L A TEX の応用 151

9.18 プログラムソースの挿入

プログラムなどのソースコードを載せるときに,

verbatim

だけでは寂しいと感じる方 も多いと思います.変数やコメントなどをうまく整形するプログラムやマクロパッケージ があります.アルゴリズムの行数を文中で指定したいときには行数も表示されるとうれし いものです.

Texinfo

のように変数名や関数名なども半自動的に索引に追加されるとうれ しいものです.ソースコードの整形プログラムの中で私が良いと思うのが

Carsten Heinz

氏が作成したlistingsです.これは正式には日本語が通りませんが,吉永徹美氏が作成し た自称強引なマクロで切り抜けることができます.これに関しては奥村晴彦氏の掲示板の

『汎用的な浮動体』

http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html

好き好き

L

A

TEX 2

ε初級編

9.18

プログラムソースの挿入

9

という一連の書き込みを参照してください.結果としてこれをまとめたファイルを

jlisting.sty

として置いておきます.おそらく私のサイトの

http://tex.dante.jp/

にあると思われます.他にも

lgrind

,morevrb,progcなどの類似品がありますがそれら の包括的なパッケージがlistingsです.このlistingsだけを使用していれば特に困ること もないと思います.

listingsを使用するときにはプリアンブルに

\usepackage[オプション]{listings}

のようにします.このときに指定するパッケージオプションは

draft ソースコードを出力しないようにします.ドキュメントクラスオプションですで

draft

を指定している場合はそれが反映されるので,さらにオプションを記述す

る必要はありません.

final

draft

オプションを無効にし,実際にソースコードを整形します.

savemem

TEX/ L

A

TEX

のメモリをなるべく消費しないようにします.

などがあります.listingsは

TEX

のメモリをたくさん使いますので原稿執筆の段階では

draft

オプションを付けたほうが良いでしょう.

listingsの使い方は大きく分けて二つです.一つは

lstlisting

環境にソースコードを

記述する方法,二つ目はプログラムのソースコードをファイルから入力する方法です.一 つ目の

L

A

TEX

の原稿に直接記述する方法は次のような文法になります.

begin{lstlisting}[

h設定

1,

設定

2,...i ]

ソースコード

end{lstlisting}

例として

C

のソースを記述するならば

\begin{lstlisting}[language=c]

int main( void ){

printf("HelloWorld!!\n");

}

\end{lstlisting}

とになります.

二つ目の方法としては

\lstinputlisting

命令を使ってファイルからソースコードを 読み込みます.

\lstinputlisting[

h設定

1,

設定

2,...

i

]{

hファイル名i

}

h設定iを毎回指定していたのでは疲れますので

\lstset

命令で

\usepackage[dvips]{color}

\lstset{%listingsの表示設定

frame=tbrl,%枠を上下左右に表示する

backgroundcolor={\color[gray]{0.85}},%背景を灰色に numbers=left,%行番号を左に

numberstyle=\scriptsize,%

stepnumber=1,%1行おきに行番号を numbersep=1zw}%ソースと行番号の間隔

のように設定しておけば全てのソースコードに共通の設定をすることができます.この設 定の場合は上下左右に枠を表示させ,背景色を薄いグレーにし,行番号を左側の

1

行おき に表示するようにします.

いくつかの設定をひとまとめにしたいときは

\lstdefinestyle

命令を使ってスタイル を定義します.

\lstdefinestyle{

hスタイル名i

}{

h設定i

}

例えば行番号に関しては左側に

1

行おきに表示させたいので

\lstdefinestyle{number1}{numbers=leftnumberstyle=\scriptsize,%

stepnumber=1numbersep=1zw}

という定義をして

\begin{lstlisting}[language=c,style=number1]

のように指定したり,または特定の言語に共通のスタイルを用いるときは

\lstdefinstyle{C}{language=c,style=number1}

として

\begin{lstlisting}[style=c]

と使うこともできます.

ある言語のソースコード用に新しい環境を定義できます.

\lstnewenvironment{

h環境名i

}{

h始めの設定i

}{

h終わりの設定i

}

例えば

C

言語用の環境を新たに定義するときは

\lstnewenvironment{C}{%

\lstset{language=c,style=number1}}{}

のとしても良いでしょう.

ソースコードを浮動体(

float

)として出力することもできます.具体的には

\begin{lstlisting}[language=c,float,caption={listingsの使用例}]

int main( void ){printf("HelloWorld!!\n");}

\end{lstlisting}

のようになります.

好き好き

L

A

TEX 2

ε初級編

9.18

プログラムソースの挿入

9 9.18.1 言語の設定

listingsでは非常に多くの言語用の設定が定義されています.あらかじめ定義されて

いない言語は自分で新たに定義することもできます.あらかじめ定義されている言語は 表

9.11

の通りです.角括弧を含む言語の指定は

9.11 listingsで使用できる主な言語

Assembler Basic C

C

++

Cobol csh

[Sharp]C Delphi Fortran

HTML IDL Java

ksh [LaTeX]TeX Lisp

Logo make Mathematica

Matlab MetaPost MuPAD

Octave Pascal [plain]TeX

Perl PHP Prolog

Python Ruby Scilab

SQL tcl [tk]tcl

TeX VBScript [Visual]Basic

[Visual]C

++

VRML XML

\begin{lstlisting}[\language={[LaTeX]TeX}]

のように波括弧の中に入れて指定するのが安全です.

言語があらかじめ定義されていなくても,

\lstdefinelanguage

命令で自分で言語の 定義をすることができます.

\lstdefinelanguage{

h言語名i

}{

h設定i

}

具体的には

\lstdefinelanguage{CCC}{

morekeywords={shortintlongfloatdouble},%予約語 sensitive=false,

morecomment=[l]{//},%行末コメント morecomment=[s]{/*}{*/},%範囲コメント morestring=[b]",%文字列

morestring=[d]’,%文字} のようにします.

標準のlistingsの字詰めや行送りはローマン体でなるべく等幅になるように字詰めをし

ています.そちらのほうが正しい設定なのでしょうが,見栄えを考えると

columns=[l]{fullflexible}

としたほうが良いかもしれません.タイプライタ体で出力しない場合は等幅になりません ので,ソースコードとしては不適切な設定かもしれません.

9.18.2 主な設定値

空白などに関する設定です.

lineskip

=h長さi 行間にさらに加える空きを調節します.標準は

0 pt

firstline

=h整数i 入力されているソースコードを,どの行から読み込むを設定します.

標準は

1

lastline

=h整数i ソ ー ス コ ー ド の ど の 行 ま で 読 み 込 む か を 設 定 し ま す .標 準 は

9999999

tabsize

=h整数i ソースコード中のタブ文字を何文字分にするかを設定します.標準は

8

です.

showtabs

=h

true

|

false

i タブ文字を可視・不可視にします.

tab

=h文字列i タブ文字を h文字列i に置き換えて表示します.

$\Longrightarrow$

(−→)などを使う方法もあります.

showspace

=h

true

|

false

i スペースを可視(・不可視( )にします.

linewidth

=h長さi ソースコードの文章幅を指定します.標準は

\linewidth

です.

xleftmargin

=h長さi 左側の余白を指定します.標準は

0 pt

です.

xrightmargin

=h長さi 右側の余白を指定します.標準は

0 pt

です.

breaklines

=h

true

|

false

i ソースコードの文章幅よりも長い文字列を自動的に折り返 すかを指定します.標準は

false

です.

prebreak

=h文字列i 行頭に挿入する文字列を指定します.

postbreak

=h文字列i 行末の挿入する文字列を指定します.例えば行末の改行の位置を 特別に示したいときは

‘postbreak

=

\return’

のようにすると良いでしょう.

言語の設定です.

language

=

{

h言語i

}

あらかじめ定義されている主な言語については表

9.11

をご覧くだ さい.

文字の表示の仕方の設定です.

basicstyle

=hスタイルi 通 常 の ソ ー ス の ス タ イ ル を 設 定 し ま す .hス タ イ ルi に は

\small

\ttfamily

などのフォントの宣言をする命令が使えます.

commentstyle

=hスタイルi コメントのスタイルを設定します.

stringstyle

=hスタイルi ソースコード中の文字列のスタイルを設定します.

keywordstyle

=hスタイルi キーワード,プログラミング言語で言えば予約語のスタイル の設定です.

好き好き

L

A

TEX 2

ε初級編

9.18

プログラムソースの挿入

9

行番号の表示の設定です.

numbers

=h

none

|

left

|

right

i 行番号をどのように表示するかの設定です.

stepnumber

=h数字i 何行おきに行番号を表示するかを設定します.

numberstyle

=hスタイルi 行番号のスタイルを指定します.

firstnumber

=h

auto

|

last

|h数字ii 行番号の開始の数字を指定します.

浮動体などに関する設定です.

float

=h

htbp

の部分集合i ソースコードを浮動体として出力します.

caption

=h文字列i 見出しの文字列を指定します.

label

=h文字列i

\ref

命令で参照できるラベルを作成します.

captionpos

=h

t

|

b

i 見出しの位置を指定します.

以下の命令はソースコードを目次として出力するときなどの命令です.適宜再定義して ください.

\lstlistoflistings

ソースコード目次を出力します.これは

caption

を付けたソー スコードが出力されます.

\lstlistlistingname

ソースコード目次の見出しです.標準は

‘Listings’

です.

\lstlistingname

見出しの前の文字列を指定します.標準は

‘listing’

です.

\lstlistlistingname

命令と

\lstlistingname

\renewcommand{\lstlistlistingname}{ソースコード目次}

\renewcommand{\lstlistingname}{ソースコード}

のように定義しておくと日本語の文書でも違和感がないと思います.

罫線枠に関する設定です.

frame

=h

none

|

single

|

shadowbox

i ソースコードの周りに表示する罫線枠の設定です.

frame

=h

trblTRBL

の部分集合i 上(

t

)・下(

b

)・左(

l

)・右(

r

)の罫線の表示を指定し ます.

枠を付けて表示する例として

\begin{lstlisting}[frame=TBlr,]

main( void ){

int a=3; int b=5;

printf("a+b=%d.\n", a+b);

}

\end{lstlisting}

と入力するとソースコード

9.1

のようになります.

ソースコード9.1 枠の調整 1

main( void ){