LuaLaTeXでソースコードを貼り付ける

概要

pLaTeXなどでは、listings,jlistingを使えばよかったのだが、LuaLaTeXでは使えないのでその解決策をメモする

LuaLaTeXで使う

LuaTeX-jaパッケージでは、LuaTeX-jaとlistingsが読み込まれたときに、 listingsに対するパッチであるlltjp-listingsを自動的に読み込むので、 もはやplistingsやjlistingsは不要です。

むしろ、jlistingやplistingsを読み込むとエラーの原因になるので、読み込まないようにしましょう。

LuaTeX-jaでlistings

main.tex

\documentclass[a4paper,11pt]{ltjsarticle}
\usepackage{luatexja}
\usepackage{listings}

\lstset{
  language={Java},
  basicstyle={\small},
  identifierstyle={\small},
  commentstyle={\small\itshape},
  keywordstyle={\small\bfseries},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=1\zw,
  xleftmargin=3\zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1\zw,
  lineskip=-0.5ex
}


\begin{document}
    \lstinputlisting[caption=DrawPolygon.java]{DrawPolygon.java}
\end{document}

DrawPolygon.java

import tg.*;
import javafx.scene.paint.Color;

public class DrawPolygon extends Turtle implements Drawable2{
    public double radius;
    public double s;
    public int n;

    public DrawPolygon(int n){
        this.n = n;
    }

    public void draw(double x, double y){
        this.radius = Math.random()*100;
        int color = (int)(Math.random()*3);
        if(color == 0){
            setColor(Color.RED);
        }else if(color ==1){
            setColor(Color.BLUE);
        }else{
            setColor(Color.YELLOW);
        }
        up();
        moveTo(x,y);
        bk(radius);
        down();
        for(int i = 0; i < n; i++){
            fd(radius);rt(360.0/n);
        }
        calcArea(radius);
    }

    public void calcArea(double hen){
        this.s = n*hen*hen/(4*Math.tan(Math.PI/n));
    }

    public void display(){
        System.out.printf("%d角形 , 面積 : %3.2f , ",n,s);
        System.out.printf("外接円の半径 : %3.2f\n",radius);
    }
}

.latexmkrc

#!/usr/bin/env perl
$lualatex                    = 'luajittex %O --fmt=luajitlatex.fmt -synctex=1 -interaction=nonstopmode %S';
$bibtex                      = 'pbibtex -kanji=utf8 %O %B';
$biber                       = 'biber --bblencoding=utf8 -u -U --output_safechars';
$makeindex                   = 'mendex %O -o %D %S';
$max_repeat                  = 5;
$pvc_view_file_via_temporary = 0;
$pdf_mode                    = 4;
$postscript_mode = $dvi_mode = 0;
$pdf_previewer               = "open -ga /Applications/Skim.app";
$ latexmk main.tex

f:id:akashisn:20181107184410p:plain

こんな感じで貼り付けられる