白猫学生のブログ

自分の趣味をひたすら投稿するブログ

listingsを用いてLatexにソースコードを直接挿入する方法 (Windows)


f:id:KevinArrow:20160905170323g:plain

はじめに

レポートやら研究関係の資料提出やらでソースコードを渡す必要があったのですが,
Latexに導入するのに時間がかかったのと地味に面倒だったので記事にしました.
そもそもLatexでやる意味はあるのかといわれると疑問ですが,結果としてLatexでできると応用が利くようになったのと
プログラムをコピペするだけで完成するので非常に便利になった気がします.


listings とは

listingsとはLatexのパッケージの一つで,ソースコードを直接Latexに挿入することができます.
Windowsだと少々インストールが面倒なのと一からまとまったサイトが少ないと感じたので,設定方法とそのサンプルコードを記載します.


導入環境

導入環境は以下の通りです.
OS : Windows 8.1
System : 64bit Operating System
texのインストール場所 : C:\tex


導入方法

Latexのインストール


WindowsLatexをインストールしたい場合は以下のサイトを参考にするといいと思います.
自分はこのサイトに完全に依存しているため,これ以上のことは何も説明できないです...
このサイトはこまめに更新されているのでググってみるといいかもしれません.

簡単LaTeXインストールWindows編(2016年4月版)


listingsのダウンロード


まず初めに,「listing」 と 「jlisting」 をダウンロードします. 以下のサイトでダウンロードして解凍してください.

listings

↑リンクが切れている場合は下記から


jlisting

↑リンクが切れている場合は下記から

すべてのリンクが切れている場合は下記にある参考サイトを拝見してください


listingsのインストール準備


まず最初に先ほど解凍した「jlisting.sty」を「listings」のディレクトリ内に移動してください.
その後,「listings」のディレクトリを

「(Latexのインストールディレクトリ)\w32tex\share\texmf-local\tex\latex\」

に移動してください.おそらく,デフォルトの設定から何もプラグインを追加したことない方は
texmf-local以降のディレクトリが存在しないと思います. その場合は,「\tex\latex\」のディレクトリを作成してから「listings」を移動してください.

これで,準備完了です!!


listingsのインストール


コマンドプロンプトを起動し,Latex本体をインストールしたときに用いた「platex」を用いてインストールします.

(「listings」のディレクトリ内に移動)
>>>cd (Latexのインストールディレクトリ)\w32tex\share\texmf-local\tex\latex\listings

(ディレクトリ移動後)
>>> platex listings.ins

>>> mktexlsr

以上でインストール完了です.
問題なくインストールができていれば「texmf-local」内に「ls-R」というファイルが追加(更新)され,
中身を見ると「listings」が認識されていることがわかります.


listingsの設定


listingsの長所として,挿入するソースコードを細かく設定できることが挙げられます.
ただ,逆に細かく設定できすぎてしまうため全部を理解するのが非常に困難です.

そこで,簡単な説明と自分の設定方法を記載します.これをコピペすれば基本的な形にはなっていると思います.
自分の設定では「Python」なので,別言語を用いる場合は設定を変更してください.

\lstset{
	%プログラム言語(複数の言語に対応,C,C++も可)
 	language = Python,
 	%背景色と透過度
 	backgroundcolor={\color[gray]{.90}},
 	%枠外に行った時の自動改行
 	breaklines = true,
 	%自動改行後のインデント量(デフォルトでは20[pt])	
 	breakindent = 10pt,
 	%標準の書体
 	basicstyle = \ttfamily\scriptsize,
 	%コメントの書体
 	commentstyle = {\itshape \color[cmyk]{1,0.4,1,0}},
 	%関数名等の色の設定
 	classoffset = 0,
 	%キーワード(int, ifなど)の書体
 	keywordstyle = {\bfseries \color[cmyk]{0,1,0,0}},
 	%表示する文字の書体
 	stringstyle = {\ttfamily \color[rgb]{0,0,1}},
 	%枠 "t"は上に線を記載, "T"は上に二重線を記載
	%他オプション:leftline,topline,bottomline,lines,single,shadowbox
 	frame = TBrl,
 	%frameまでの間隔(行番号とプログラムの間)
 	framesep = 5pt,
 	%行番号の位置
 	numbers = left,
	%行番号の間隔
 	stepnumber = 1,
	%行番号の書体
 	numberstyle = \tiny,
	%タブの大きさ
 	tabsize = 4,
 	%キャプションの場所("tb"ならば上下両方に記載)
 	captionpos = t
}



ソースコードの挿入方法

直接挿入する場合

\begin{lstlisting}[caption = キャプション, label = ラベル]
   ソースコード is ここ
\end{lstlisting}



別ファイルから挿入する場合

\lstinputlisting[caption = キャプション2 ,label = program2]{test.py}



サンプルプログラム

今回作成した設定と挿入方法を導入した結果は以下の通りです.
下のプログラムをコピペして,挿入したいファイルのパスを通せばコンパイルができるはずです.

\documentclass[a4paper, 10pt, uplatex]{jsarticle}

\usepackage{ascmac, here, txfonts, txfonts}
\usepackage{listings, jlisting}
\usepackage{color}

%プログラム挿入の設定
\lstset{
	%プログラム言語(複数の言語に対応,C,C++も可)
 	language = Python,
 	%背景色と透過度
 	backgroundcolor={\color[gray]{.90}},
 	%枠外に行った時の自動改行
 	breaklines = true,
 	%自動開業後のインデント量(デフォルトでは20[pt])	
 	breakindent = 10pt,
 	%標準の書体
 	basicstyle = \ttfamily\scriptsize,
 	%basicstyle = {\small}
 	%コメントの書体
 	commentstyle = {\itshape \color[cmyk]{1,0.4,1,0}},
 	%関数名等の色の設定
 	classoffset = 0,
 	%キーワード(int, ifなど)の書体
 	keywordstyle = {\bfseries \color[cmyk]{0,1,0,0}},
 	%""で囲まれたなどの"文字"の書体
 	stringstyle = {\ttfamily \color[rgb]{0,0,1}},
 	%枠 "t"は上に線を記載, "T"は上に二重線を記載
	%他オプション:leftline,topline,bottomline,lines,single,shadowbox
 	frame = TBrl,
 	%frameまでの間隔(行番号とプログラムの間)
 	framesep = 5pt,
 	%行番号の位置
 	numbers = left,
	%行番号の間隔
 	stepnumber = 1,
	%右マージン
 	%xrightmargin=0zw,
 	%左マージン
	%xleftmargin=3zw,
	%行番号の書体
 	numberstyle = \tiny,
	%タブの大きさ
 	tabsize = 4,
 	%キャプションの場所("tb"ならば上下両方に記載)
 	captionpos = t
}

\begin{document}

%直接記入の場合
\begin{lstlisting}[caption = キャプション1 , label = program1]
import time

def main():
	time.sleep(5)
	print "ok"

#testtest 
if __name__ == "__main__":
	main()

\end{lstlisting}


% ソースコードが別ファイルの場合
\lstinputlisting[caption = キャプション2 ,label = program2]{test.py}

\end{document}

その時の出力結果の一部がこれです.

f:id:KevinArrow:20160905175054p:plain


ちなみに,もっと詳しく知りたい方は「listings」のディレクトリ内に「listings.pdf」があるので,それを参考にするといいと思います.
英語なので少々しんどいですが,頑張ってください.


さいごに

地味に大変な作業だった・・・