Yamamoto's Laboratory
表紙
ソースリスト
公開情報
古い情報

LaTeXプログラムのソースリスト

仕事柄,プログラムのソースリスト(プログラムリスト)を書くことが多々あります.主にドキュメントの作成には,LaTeXを利用しており,その中でソースリストの処理の仕方を示します.LaTeXでのソースリストの処理にはいろいろな方法がありますが,スタイル「listings」がお気に入りです.

目次


listings

listingsは機能が豊富でマニュアルもしっかりしているので,今のお気に入りです.ただ,latex2htmlを通すとき,工夫が必要.

マニュアル類は,ここからダウンロードできます.

インストール

listings.sty

texlive では,自動的にインストールされるので,以下の設定は不要でしょう.

  1. 必要なファイルを ダウンロードします.
  2. 次に,ダウンロードしたファイルを解凍します.
    $ unzip listings-1.3.zip
    すると,次のようなファイルができます.
    README    listings-1.3.ind    listings-1.3.pdf   
    lstdrvrs-1.3.dtx    listings-1.3.dtx    listings-1.3.ins    lstpatch.sty
  3. lisgings パッケージに必要なファイルの作成します.
    $ platex listings-1.3.ins
    LaTeXを通すと,次のようなファイルができます.
    lstmisc.sty     listings.cfg     lstlang1.sty   
    listings-1.3.ins    listings.sty    lstlang2.sty   
    listings-1.3.log    lstdoc.sty   lstlang3.sty
  4. *.sty と *.cfg をパスの通ったディレクトリーへコピー(スタイルファイルの追加)します.
    # cp *.sty /usr/share/texmf/ptex/listings
    # cp *.cfg /usr/share/texmf/ptex/listings
  5. ファイル名データベースをリフレッシュします.
    # mktexlsr

jlisting.sty

ソースリストに日本語が含まれる場合,lisgings は問題があります.日本語とアルファベットの順序が入れ替わって役に立たなくなるので気をつけてください.jlisting.sty を使えば,この問題は解決できます.ただし,texlive でも jlisting.sty はインストールされませんので,設定が必要です.

Listings - MyTeXpert に,ファイルがあります.「jlisting.sty.bz2」をダウンロードします.そして,それを解凍します.

$ tar  jxf  jlisting.sty.bz2

解凍してできあがったファイル(jlisting.sty)を,適当なディレクトリーに入れるだけです.Tex Live の場合,ディレクトリー「/usr/local/texlive/texmf-local/tex/latex/jlisting/」です.

$ sudo  mkdir  /usr/local/texlive/texmf-local/tex/latex/jlisting/
$ sudo  cp  jlisting.sty  /usr/local/texlive/texmf-local/tex/latex/jlisting/
$ sudo  chmod  644  /usr/local/texlive/texmf-local/tex/latex/jlisting/jlisting.sty

最後に,設定を反映させます.

$ sudo  su  -
# mktexlsr

以上で設定は,完了です.この jlisting.styは,listings.styと併用して使います.したがって,jlisting.styのみをインストールしても意味がありません.

使い方

プリアンブル

普通,プリアンブルに,スタイルファイルとその設定に関する記述を行います.多くの場合,私は次のようにしています.

\usepackage{listings, jlisting}
\renewcommand{\lstlistingname}{リスト}
\lstset{language=C,%
        basicstyle=\footnotesize,%
        commentstyle=\textit,%
        classoffset=1,%
        keywordstyle=\bfseries,%
	frame=tRBl,framesep=5pt,%
	showstringspaces=false,%
        numbers=left,stepnumber=1,numberstyle=\footnotesize%
	}%

本文

ファイルからソースリストを読み込む場合,以下のように記述します.

\lstinputlisting[caption=ここにキャプションを書きます,label=参照するときのラベル名]
{パスとファイル名}

本文中に,リストを書く場合は,次のようにします.

\begin{lstlisting}[caption=ここにキャプションを書きま
    す,label=参照するときのラベル名]

   ここにソースリストを書く

\end{lstlisting}

出力できるプログラミング言語

次の表「設定可能な言語」に示すように,かなり多くのプログラミング言語に対応しています.もし,この中にない言語を使いたい場合には,(1)テキストをそのまま表示する,(2)言語設定を自分でする—というような方法を使うことができます.

設定可能な言語
ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, R/36.10) ACSL
Ada (2005, 83, 95)Algol (60, 68)Ant
Assembler (Motorola68k, x86masm) Awk (gnu, POSIX)
bashBasic (Visual)
C (ANSI, Handel, Objective, Sharp)
C++ (ANSI, GNU, ISO, Visual)Caml (light, Objective)
CILCleanCobol (1974, 1985, ibm)
Comal 80command.com (WinXP)Comsol
cshDelphiEiffel
ElanerlangEuphoria
Fortran (77, 90, 95)GCLGnuplot
HaskellHTMLIDL (empty, CORBA)
informJava (empty, AspectJ)JVMIS
kshLingoLisp (empty, Auto)
Logomake (empty, gnu)
Mathematica (1.0, 3.0, 5.2)Matlab
MercuryMetaPostMiranda
MizarMLModula-2
MuPADNASTRANOberon-2
OCL (decorative, OMG)OctaveOz
Pascal (Borland6, Standard, XSC)Perl
PHPPL/IPlasm
PostScriptPOVProlog
PromelaPSTricksPython
RReduceRexx
RSLRubyS (empty, PLUS)
SASScilabsh
SHELXLSimula (67, CII, DEC, IBM)SPARQL
SQLtcl (empty, tk)
TeX (AlLaTeX, common, LaTeX, plain, primitive)VBScript
VerilogVHDL (empty, AMS)VRML (97)
XMLXSLT

プレーンテキストを出力する方法

プレーンテキスト(plain text)を出力したければ,言語設定を空にします.これは,かなり便利で,データなどをかっこよく表示することに重宝しています.また,特殊な言語のリストを表示するのにも役立ちます.

\lstset{language=}

折り返しについて

1行が長い場合,折り返しもできます.それらに関する設定を示します.いまは,マニュアルからの引用にとどめますが,時間があるときに,もう少し詳しい説明を追加する予定です.

  • linewidth=<dimension>
  • xleftmargin=<dimension>
  • xrightmargin=<dimension>
  • resetmargins=<true|false>
  • breaklines=<true|false>
  • breakatwhitespace=<true|false>
  • prebreak=<token>
  • postbreak=<token>
  • breakindent=<dimension>
  • breakautoindent=<true|false>

LaTeX2HTMLとの関係

LaTeX2HTMLについて説明している部分の「プログラムソースの記述のlistings」を見てください.

CASL IIのためのlistingsの設定

3年生に基本情報処理技術者試験のためのアセンブラ言語CASL IIを教えています.講義ノートをLaTeXで作成していますので,ソースリストをlistingsで処理したくなりました.プリアンブルに言語の定義を以下のように書けば,CASL IIのリストを listings で処理できます.

\lstdefinelanguage{CASL2}{
morekeywords={START,END,DS,DC,OUT,RPUSH,RPOP,LD,ST,LAD,%
ADDA,SUBA,SUBL,AND,OR,XOR,CPA,CPL,SLA,SRA,SLL,SRL,%
JPL,JMI,JNZ,JZE,JOV,JUMP,PUSH,POP,CALL,RET,SVC,NOP,%
GR0,GR1,GR2,GR3,GR4,GR5,GR6,GR7},%
morecomment=[l]{;},%
morestring=[b]",%" 
}

C言語同様に,処理の仕方のパラメーターを以下のように書いています.ただし,CASL IIは全て大文字で書きますので,デフォルトの文字間隔だと詰まりすぎて見苦しい. そのため,basewidthを少し広くしています.

\renewcommand{\lstlistingname}{リスト}
\lstset{language=CASL2,%
        basicstyle=\footnotesize,%
        commentstyle=\textit,%
        classoffset=1,%
        keywordstyle=\bfseries,%
	basewidth={0.8em,0.55em},%
	frame=tRBl,framesep=5pt,%
	showstringspaces=false,%
        numbers=left,stepnumber=1,numberstyle=\footnotesize%
	}%

拡張

lstlangs.sty に記述する方法

プログラミング言語の仕様が変更され,コマンドが追加あるいは削除されることがあります.その場合は,listings のスタイルファイルを追加する必要があります.プログラミング言語のリストを出力するために必要なコマンドのリストなどの情報は,インストールしたディレクトリーの lstlang1.styとlstlang2.sty,lstlang3.styに書かれています.新言語の場合,lstlang0.styにその内容を記述します.詳細は,マニュアル(listings.pdf)の p.41p.46に記載があります.

lgrind

インストール

日本語を含まない場合は lgrind で良いが,そうでない場合は古川さんの jlgrind を使っている.windowsの人は jlgrind を使うのが良いでしょう.インストールの方法は,以下の通りです.

  1. 必要なファイルを以下からダウンロードする.
    • lgindはネットを調べるとあちこちにあるので,適当なものをつかう.
    • jlgrind は,ここから
  2. ファイルを解凍して,インストールすれば良い.インストールの詳細は忘れてしまったが,解凍したファイルの中にそれが書かれたものがあったかもしれない.

使い方

C言語のソースをLaTeXのファイルへ変換

C言語のソースファイル(hogehoge.c)をLaTeXのファイル(hogehoge.tex)への変換は,

$ lgrind -i -lc -o hogehoge.tex hogehoge.c

とする.

日本語を含む場合

lgrindを使ってソースコードを整形した場合,latex2htmlで日本語が文字化けすることがある.windowsの jlgrind は,日本語を問題なく扱える.これで整形し,late2htmlを通すと日本語の問題は無くなる.以下のようにすればよい.

  1. ソースプログラムのコードをshift-jisに変換する.
    $ nkf -s source.c >  source_s.c
  2. Windowsにファイル(source_s.c)を移動
  3. Windowsのjlgrindで,TeXの入力に整形
    $ jlgrind -i -lc source.c >  source_s.tex
  4. Linuxにファイル(source_s.tex)を移動
  5. 日本語コードをeucに変換
    $ nkf -e -d source_s.tex >  source.tex

このでき上がった source.texを使えば,日本語もきちんと処理される.

プリアンブル

\usepackage{lgrind}

本文

リストをファイル(./program/source_c.tex)から取り込む場合,以下のように記述する.

\LGnuminterval=1  % 行番号は各行に
\LGleftnumtrue    % 行番号は左端
\lgrindfile{program/source_c.tex}

LaTeX2HTML

LaTeX2HTMLについて説明している部分の「プログラムソースの記述のlgrind」を見てください.

ページ作成情報

参考資料

更新履歴

2007年頃 ページの新規作成
2015年11月08日 TeX Live での jlisting のインストールの説明を追加.


no counter