RのソースコードをLaTeX文書に記述する
RのソースコードをLaTeX文書に記述するには、listings.styを使います。listings.styを使うと、Rソースファイルを構文強調して表示することができます。 R言語の定義は、lstlang3.sty に書かれています。
listings.styを使うと見出しをつけたり、任意の間隔で行番号をつけたり、さまざまな種類の枠をつけたり、プログラムコードのリスト(目次)を作成したり、いろいろなことができます。ここでは、単純に表示した例を示します。
まずはデフォルトのままで表示する。
\documentclass{jsarticle} \usepackage{listings} \begin{document} \begin{lstlisting}[language=R] boa.acf <- function(link, lags) # Brian Smith has produced the BOA (Bayesian Output Analysis) suite of # S-plus/R functions for analysis of MCMC output, which reads in output # from Classic BUGS or WinBUGS. Version 0.5.0 is now available. { pnames <- boa.pnames(link) result <- matrix(NA, nrow = ncol(link), ncol = length(lags), dimnames = list(pnames, paste("Lag", lags))) lags <- lags[lags <= (nrow(link) - 1)] n.lags <- length(lags) if(n.lags > 0) { idx <- 1:n.lags lag.max <- max(lags) for(i in pnames) { result[i, idx] <- acf(link[, i], lag.max = lag.max, plot = FALSE)$acf[lags + 1] } } return(result) } \end{lstlisting} \end{document}
タイプライタ体にしてみる。デフォルトでは行間が空きすぎなので半分に狭くする。
\documentclass{jsarticle} \usepackage{listings} \lstset{% language=R, basicstyle={\ttfamily}, breaklines=true, columns=[l]{fullflexible}, lineskip=-0.5zw, } \begin{document} \begin{lstlisting} boa.acf <- function(link, lags) # Brian Smith has produced the BOA (Bayesian Output Analysis) suite of # S-plus/R functions for analysis of MCMC output, which reads in output # from Classic BUGS or WinBUGS. Version 0.5.0 is now available. { pnames <- boa.pnames(link) result <- matrix(NA, nrow = ncol(link), ncol = length(lags), dimnames = list(pnames, paste("Lag", lags))) lags <- lags[lags <= (nrow(link) - 1)] n.lags <- length(lags) if(n.lags > 0) { idx <- 1:n.lags lag.max <- max(lags) for(i in pnames) { result[i, idx] <- acf(link[, i], lag.max = lag.max, plot = FALSE)$acf[lags + 1] } } return(result) } \end{lstlisting} \end{document}
カラー表示にしてみる。LaTeXでプレゼンテーションスライドを作成するときには、是非ともカラー表示にしたい。
\documentclass{jsarticle} \usepackage[dvips]{color} \usepackage{listings} \definecolor{Brown}{cmyk}{0,0.81,1,0.60} \definecolor{OliveGreen}{cmyk}{0.64,0,0.95,0.40} \definecolor{CadetBlue}{cmyk}{0.62,0.57,0.23,0} \lstset{% language=R, stringstyle={\ttfamily}, commentstyle={\itshape\color{Brown}}, identifierstyle={\ttfamily\color{CadetBlue}\bfseries}, keywordstyle={\ttfamily\color{OliveGreen}}, basicstyle={\ttfamily}, breaklines=true, columns=[l]{fullflexible}, lineskip=-0.5zw, showstringspaces=ture } \begin{document} \begin{lstlisting} boa.acf <- function(link, lags) # Brian Smith has produced the BOA (Bayesian Output Analysis) suite of # S-plus/R functions for analysis of MCMC output, which reads in output # from Classic BUGS or WinBUGS. Version 0.5.0 is now available. { pnames <- boa.pnames(link) result <- matrix(NA, nrow = ncol(link), ncol = length(lags), dimnames = list(pnames, paste("Lag", lags))) lags <- lags[lags <= (nrow(link) - 1)] n.lags <- length(lags) if(n.lags > 0) { idx <- 1:n.lags lag.max <- max(lags) for(i in pnames) { result[i, idx] <- acf(link[, i], lag.max = lag.max, plot = FALSE)$acf[lags + 1] } } return(result) } \end{lstlisting} \end{document}
さらにESS風(VineLinux標準のEmacsカラーテーマにess-modeを読み込んだ感じ)にしてみる。
\documentclass{jsarticle} \usepackage{listings} \usepackage[dvips]{color} \lstset{% language=R, frame=shadowbox, backgroundcolor={\color[cmyk]{0.777,0.777,0,0.561}}, stringstyle={\ttfamily\color[cmyk]{0,0.51,0.843,0}}, commentstyle={\color[cmyk]{0,0.51,0.843,0}}, identifierstyle={\ttfamily\color{white}}, keywordstyle={\ttfamily\color[cmyk]{1,0,0,0}}, classoffset=2, basicstyle={\ttfamily\color{white}}, breaklines=true, columns=[l]{fullflexible}, lineskip=-0.5zw, morekeywords={FALSE,TRUE,NA}, keywordstyle={\color[cmyk]{0.371,0,0.371,0.016}}, classoffset=0, morekeywords={<-}, keywordstyle={\color[cmyk]{0.525,0,0.157,0}}, classoffset=1, numbers=left, stepnumber=5, numberstyle={\scriptsize\color{black}}, numbersep=1em, xleftmargin=1zw, xrightmargin=1zw, framerule=2pt, rulecolor={\color[gray]{.85}}, } \begin{document} \begin{lstlisting} boa.acf <- function(link, lags) # Brian Smith has produced the BOA (Bayesian Output Analysis) suite of # S-plus/R functions for analysis of MCMC output, which reads in output # from Classic BUGS or WinBUGS. Version 0.5.0 is now available. { pnames <- boa.pnames(link) result <- matrix(NA, nrow = ncol(link), ncol = length(lags), dimnames = list(pnames, paste("Lag", lags))) lags <- lags[lags <= (nrow(link) - 1)] n.lags <- length(lags) if(n.lags > 0) { idx <- 1:n.lags lag.max <- max(lags) for(i in pnames) { result[i, idx] <- acf(link[, i], lag.max = lag.max, plot = FALSE)$acf[lags + 1] } } return(result) } \end{lstlisting} \end{document}
色強調するキーワードがess-modeと微妙に違うけれども、このあたりで妥協。
Rのキーワードの定義は下記のようになっています。ここにリストされていない単語は、TeXソースの中で適宜追加すれば(つまり、language{R}を再定義する)キーワード扱いになります。
\lst@definelanguage{R}% {keywords={abbreviate,abline,abs,acos,acosh,action,add1,add,% aggregate,alias,Alias,alist,all,anova,any,aov,aperm,append,apply,% approx,approxfun,apropos,Arg,args,array,arrows,as,asin,asinh,% atan,atan2,atanh,attach,attr,attributes,autoload,autoloader,ave,% axis,backsolve,barplot,basename,besselI,besselJ,besselK,besselY,% beta,binomial,body,box,boxplot,break,browser,bug,builtins,bxp,by,% c,C,call,Call,case,cat,category,cbind,ceiling,character,char,% charmatch,check,chol,chol2inv,choose,chull,class,close,cm,codes,% coef,coefficients,co,col,colnames,colors,colours,commandArgs,% comment,complete,complex,conflicts,Conj,contents,contour,% contrasts,contr,control,helmert,contrib,convolve,cooks,coords,% distance,coplot,cor,cos,cosh,count,fields,cov,covratio,wt,CRAN,% create,crossprod,cummax,cummin,cumprod,cumsum,curve,cut,cycle,D,% data,dataentry,date,dbeta,dbinom,dcauchy,dchisq,de,debug,% debugger,Defunct,default,delay,delete,deltat,demo,de,density,% deparse,dependencies,Deprecated,deriv,description,detach,% dev2bitmap,dev,cur,deviance,off,prev,,dexp,df,dfbetas,dffits,% dgamma,dgeom,dget,dhyper,diag,diff,digamma,dim,dimnames,dir,% dirname,dlnorm,dlogis,dnbinom,dnchisq,dnorm,do,dotplot,double,% download,dpois,dput,drop,drop1,dsignrank,dt,dummy,dump,dunif,% duplicated,dweibull,dwilcox,dyn,edit,eff,effects,eigen,else,% emacs,end,environment,env,erase,eval,equal,evalq,example,exists,% exit,exp,expand,expression,External,extract,extractAIC,factor,% fail,family,fft,file,filled,find,fitted,fivenum,fix,floor,for,% For,formals,format,formatC,formula,Fortran,forwardsolve,frame,% frequency,ftable,ftable2table,function,gamma,Gamma,gammaCody,% gaussian,gc,gcinfo,gctorture,get,getenv,geterrmessage,getOption,% getwd,gl,glm,globalenv,gnome,GNOME,graphics,gray,grep,grey,grid,% gsub,hasTsp,hat,heat,help,hist,home,hsv,httpclient,I,identify,if,% ifelse,Im,image,\%in\%,index,influence,measures,inherits,install,% installed,integer,interaction,interactive,Internal,intersect,% inverse,invisible,IQR,is,jitter,kappa,kronecker,labels,lapply,% layout,lbeta,lchoose,lcm,legend,length,levels,lgamma,library,% licence,license,lines,list,lm,load,local,locator,log,log10,log1p,% log2,logical,loglin,lower,lowess,ls,lsfit,lsf,ls,machine,Machine,% mad,mahalanobis,make,link,margin,match,Math,matlines,mat,matplot,% matpoints,matrix,max,mean,median,memory,menu,merge,methods,min,% missing,Mod,mode,model,response,mosaicplot,mtext,mvfft,na,nan,% names,omit,nargs,nchar,ncol,NCOL,new,next,NextMethod,nextn,% nlevels,nlm,noquote,NotYetImplemented,NotYetUsed,nrow,NROW,null,% numeric,\%o\%,objects,offset,old,on,Ops,optim,optimise,optimize,% options,or,order,ordered,outer,package,packages,page,pairlist,% pairs,palette,panel,par,parent,parse,paste,path,pbeta,pbinom,% pcauchy,pchisq,pentagamma,persp,pexp,pf,pgamma,pgeom,phyper,pico,% pictex,piechart,Platform,plnorm,plogis,plot,pmatch,pmax,pmin,% pnbinom,pnchisq,pnorm,points,poisson,poly,polygon,polyroot,pos,% postscript,power,ppoints,ppois,predict,preplot,pretty,Primitive,% print,prmatrix,proc,prod,profile,proj,prompt,prop,provide,% psignrank,ps,pt,ptukey,punif,pweibull,pwilcox,q,qbeta,qbinom,% qcauchy,qchisq,qexp,qf,qgamma,qgeom,qhyper,qlnorm,qlogis,qnbinom,% qnchisq,qnorm,qpois,qqline,qqnorm,qqplot,qr,Q,qty,qy,qsignrank,% qt,qtukey,quantile,quasi,quit,qunif,quote,qweibull,qwilcox,% rainbow,range,rank,rbeta,rbind,rbinom,rcauchy,rchisq,Re,read,csv,% csv2,fwf,readline,socket,real,Recall,rect,reformulate,regexpr,% relevel,remove,rep,repeat,replace,replications,report,require,% resid,residuals,restart,return,rev,rexp,rf,rgamma,rgb,rgeom,R,% rhyper,rle,rlnorm,rlogis,rm,rnbinom,RNGkind,rnorm,round,row,% rownames,rowsum,rpois,rsignrank,rstandard,rstudent,rt,rug,runif,% rweibull,rwilcox,sample,sapply,save,scale,scan,scan,screen,sd,se,% search,searchpaths,segments,seq,sequence,setdiff,setequal,set,% setwd,show,sign,signif,sin,single,sinh,sink,solve,sort,source,% spline,splinefun,split,sqrt,stars,start,stat,stem,step,stop,% storage,strstrheight,stripplot,strsplit,structure,strwidth,sub,% subset,substitute,substr,substring,sum,summary,sunflowerplot,svd,% sweep,switch,symbol,symbols,symnum,sys,status,system,t,table,% tabulate,tan,tanh,tapply,tempfile,terms,terrain,tetragamma,text,% time,title,topo,trace,traceback,transform,tri,trigamma,trunc,try,% ts,tsp,typeof,unclass,undebug,undoc,union,unique,uniroot,unix,% unlink,unlist,unname,untrace,update,upper,url,UseMethod,var,% variable,vector,Version,vi,warning,warnings,weighted,weights,% which,while,window,write,\%x\%,x11,X11,xedit,xemacs,xinch,xor,% xpdrows,xy,xyinch,yinch,zapsmall,zip},% otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/},% alsoother={._$},% sensitive,% morecomment=[l]\#,% morestring=[d]",% morestring=[d]'% 2001 Robert Denham }%