しがないエンジニアのブログ

技術的な内容をメモ代わりにつらつら

LaTeXでソースコードを書く

  • 基本

listingsを用いる.

\documentclass{jsarticle}

\usepackage{listings}

\begin{document}
\begin{lstlisting}
#include <iostream>
int main(){
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
\end{lstlisting}
\end{document}

そうすると下の感じになる.

f:id:turgure:20160819181544p:plain

  • 基本2

\begin{lstlisting}の後ろに[]を書いてその中に色々オプションを指定できる.
例えばlanguage=c++のようにすればc++仕様になる.

\begin{lstlisting}[language=c++]
#include <iostream>
int main(){
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
\end{lstlisting}

予約語が太字になってスペースが表示されるようになっていることが分かる.

f:id:turgure:20160819181633p:plain

他にもnumbers=leftで左に行番号を表示したり,tabsize=2でタブサイズを指定できたりする.

オプションの指定には,\lstsetを用いる方法もある.
様々なところで利用する際に同じオプションを付けたいならこっち.

\lstset{
    frame=single,
    numbers=left,
    tabsize=2
}

\begin{lstlisting}[language=c++]
#include <iostream>
int main(){
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
\end{lstlisting}

結果は下.
枠追加,左側に行番号追加,タブサイズが2になっていることが分かる.
また以前と同様に\begin{lstlisting}の方でオプションも追加できる.

f:id:turgure:20160819182000p:plain

  • 応用

\lstnewenvironmentを用いることで自分で新しく定義できる.

\lstnewenvironment{mylisting}[1][]
    {\lstset{
        frame=single,
        basicstyle=\ttfamily,
        numbers=left,
        numbersep=10pt,
        tabsize=2,
        extendedchars=true,
        xleftmargin=17pt,
        framexleftmargin=17pt,
        #1
    }
}{}

\begin{mylisting}[language=c++,caption=C++サンプルコード]
#include <iostream>
using namespace std;
int main(){
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
\end{mylisting}

結果は下のほうに.
こんな感じに定義すると便利かもね.

f:id:turgure:20160819182553p:plain

参考URL

基本的なところ

languageに利用できるもの

応用編