listings導入

プラグラムのソースコードTeXでいい感じに載せたいときに使うパッケージ、listings.styとその日本語化のためのパッケージjlistingの導入のメモ。

ちょっと前のことなので忘れかけてるけど…

listings.styの入手

まずここからzipでダウンロード。

CTAN: tex-archive/macros/latex/contrib/listings

unzipしてもlistings.styが入ってなくて、「!?!?」ってなったんだけど、

パッケージ本体である sty ファイルが無い場合には,他のファイルから生成します。 dtx ファイルと ins ファイルを同じフォルダーに保存した上で,LaTeX に ins ファイルを処理させます。 例えば multicol.sty を生成するにはコマンドラインから

latex tools.ins

を実行します。

   LaTeX入門/各種パッケージの利用 - TeX Wiki より

とのことなので、

$ latex listings.ins

によりlisting.styを生成。

jlisting.styの入手

このサイトから↓

Listings - MyTeXpert

jlisting 本体 ver. 0.2 (bzip2)をダウンロードして解凍しました。

使ってみる

テストのために以下のようなtest.texというファイルを作成し、listings.styとjlisting.styをとりあえず同じディレクトリに配置。

\documentclass[a4j,10pt,titlepage]{jarticle}
\title{}
\author{sae bachi}
\date{2016/01/02}
\usepackage{listings, jlisting}
\lstset{language=c,
breaklines = true,
basicstyle=\ttfamily\scriptsize,
commentstyle={\textmc},
classoffset=1,
keywordstyle=\bfseries,
showstringspaces=false,
frame=tblr,
numbers=left,
stepnumber=1,
numberstyle=\tiny,
tabsize=2
}
\begin{document}
\maketitle
\lstinputlisting[caption=Hello Worldを表示するプログラム,label=hello]
{./hello.cpp}
\end{document}

ソースコードhello.cppがいい感じに表示されたドキュメントになるTeXファイルです。

hello.cppの中身は以下の通り。

#include <iostream>
using namespace std;
int main(){

cout << "Hello World!" << endl;

return 0;
}

test.texからtest.dviを生成。

$ platex test.tex

しかし、こんなエラーが…

$ platex test.tex
This is e-pTeX, Version 3.14159265-p3.5-130605-2.6 (utf8.euc) (TeX Live 2015/dev/Debian) (preloaded format=platex)
restricted \write18 enabled.
entering extended mode
(./test.tex
pLaTeX2e <2006/11/10> (based on LaTeX2e <2014/05/01> patch level 0)
Babel <3.9l> and hyphenation patterns for 79 languages loaded.
(/usr/share/texlive/texmf-dist/tex/platex/base/jarticle.cls
Document Class: jarticle 2006/06/27 v1.6 Standard pLaTeX class
(/usr/share/texlive/texmf-dist/tex/platex/base/jsize10.clo)) (./listings.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty

***
*** This file requires `listings.sty' version 1.5e.
*** You have a serious problem, so I'm exiting ...
***

 

listings.styのバージョンが、1.5eである必要がありますよ、ということらしいです。

先ほどlistingsをダウンロードしたサイトを見ると、Version 1.6をダウンロードしたはずなんですけど、うーん。

 

ここで、listings.styを確認してみると、バージョンを定義している部分が、

\def\fileversion{1.4}

のようになっていました。

日付は2015/06/04となっていて正しいみたいなんですけど、バージョンの値だけおかしい。

というわけでこの部分を1.4→1.6に書き換えて保存。

で、再び$ platex test.tex を叩いたらまた同じエラー出た。エーッと思いながら今度は1.5eに変更。

やっと成功しました。

で、

$ dvipdfmx test.dvi

で、test.pdfを作成。

いい感じにソースコードが表示されています。

f:id:sae_bachi:20160104123920p:plain

TeXの本文にベタ貼りしてもこうはならないし、ソースコード貼るならやっぱlistings使うといいですね。あと、プリアンプルの設定\lstsetでいろいろ変えられるらしいです。コードを囲っている四角のデザイン?とか、行番号の有無とか。シンタックスハイライトもできるらしいので今度試してみたいです。