DocBook文書をPDFファイルに変換するdblatexの色付きコード表示について(バージョン0.3現在)
概要
dblatexではDocBook文書のprogramlisting要素として記述するプログラムやマークアップ言語などを色付き表示(シンタックス・ハイライティング)することができる。programlistingタグのlanguage属性を言語ごとの名前にすることで、その言語ごとの文法に応じた色付き表示がされるようになる。日本語はそのままではうまく扱えないが、この問題の回避には成功したので、別記事で扱う。
対応言語と言語名
この言語名はListingsというパッケージが提供するもので、/usr/share/texmf-texlive/tex/latex/listings/lstlang1.styなど(2や3もある・ディストリによってディレクトリが異なる可能性もある)の中で
\lst@definelanguage{langname}
のような行で始まるまとまりで定義されている。言語によっては
\lst@definelanguage[Sharp]{C}%
のように、「C」の中の「Sharp」(「方言」的な扱い?)として複数の階層で名前が指定されるものもあり、DocBook文書側では
<programlisting language="{[sharp]c}"><![CDATA[ (ここにC#言語のコードを記述) ]]></programlisting>
といった形で波括弧を用いて言語名を指定する(波括弧を用いないとエラーとなる)。
対応言語名を一覧する
試しに、手元の環境(Mandriva Linux 2010.0)の.styファイル内の言語名一覧に近いものを出力してみると
$ cd /usr/share/texmf-texlive/tex/latex/listings/ [/usr/share/texmf-texlive/tex/latex/listings]$ grep definelanguage *.sty lstdoc.sty:\lstdefinelanguage[doc]{Pascal}{% lstlang1.sty:\lst@definelanguage{ACSL}[90]{Fortran}% lstlang1.sty:\lst@definelanguage[2005]{Ada}[95]{Ada}% lstlang1.sty:\lst@definelanguage[95]{Ada}[83]{Ada}% lstlang1.sty:\lst@definelanguage[83]{Ada}% lstlang1.sty:\lst@definelanguage[gnu]{Awk}[POSIX]{Awk}% lstlang1.sty:\lst@definelanguage[POSIX]{Awk}% lstlang1.sty:\lst@definelanguage[Visual]{Basic} lstlang1.sty:\lst@definelanguage[ANSI]{C++}[ISO]{C++}{}% lstlang1.sty:\lst@definelanguage[GNU]{C++}[ISO]{C++}% lstlang1.sty:\lst@definelanguage[Visual]{C++}[ISO]{C++}% lstlang1.sty:\lst@definelanguage[ISO]{C++}[ANSI]{C}% lstlang1.sty:\lst@definelanguage[Objective]{C}[ANSI]{C} lstlang1.sty:\lst@definelanguage[Handel]{C}[ANSI]{C} lstlang1.sty:\lst@definelanguage[ANSI]{C}% lstlang1.sty:\lst@definelanguage[Sharp]{C}% lstlang1.sty:\lst@definelanguage{csh} lstlang1.sty:\lst@definelanguage{bash}[]{sh}% lstlang1.sty:\lst@definelanguage{sh}% lstlang1.sty:\lst@definelanguage[90]{Fortran}[95]{Fortran}{} lstlang1.sty:\lst@definelanguage[95]{Fortran}[77]{Fortran}% lstlang1.sty:\lst@definelanguage[77]{Fortran}% lstlang1.sty:\lst@definelanguage{HTML}% lstlang1.sty:\lst@definelanguage[AspectJ]{Java}[]{Java}% lstlang1.sty:\lst@definelanguage{Java}% lstlang1.sty:\lst@definelanguage{JVMIS}% lstlang1.sty:\lst@definelanguage{Matlab}% lstlang1.sty:\lst@definelanguage[5.2]{Mathematica}[3.0]{Mathematica}%% lstlang1.sty:\lst@definelanguage[3.0]{Mathematica}[1.0]{Mathematica}% lstlang1.sty:\lst@definelanguage[1.0]{Mathematica}% lstlang1.sty:\lst@definelanguage{Octave}% lstlang1.sty:\lst@definelanguage[XSC]{Pascal}[Standard]{Pascal} lstlang1.sty:\lst@definelanguage[Borland6]{Pascal}[Standard]{Pascal} lstlang1.sty:\lst@definelanguage[Standard]{Pascal}% lstlang1.sty:\lst@definelanguage{Perl}% lstlang1.sty:\lst@definelanguage{POV}% lstlang1.sty:\lst@definelanguage{Python}% lstlang1.sty:\lst@definelanguage{Scilab}% lstlang1.sty:\lst@definelanguage{SQL}% lstlang1.sty:\lst@definelanguage{VHDL}% lstlang1.sty:\lst@definelanguage[AMS]{VHDL}[]{VHDL}% lstlang1.sty:\lst@definelanguage{XSLT}[]{XML}% lstlang1.sty:\lst@definelanguage{Ant}[]{XML}% lstlang1.sty:\lst@definelanguage{XML}% lstlang2.sty:\lst@definelanguage[R/3 6.10]{ABAP}[R/3 4.6C]{ABAP}% lstlang2.sty:\lst@definelanguage[R/3 4.6C]{ABAP}[R/3 3.1]{ABAP}% lstlang2.sty:\lst@definelanguage[R/3 3.1]{ABAP}[R/2 5.0]{ABAP}{}% lstlang2.sty:\lst@definelanguage[R/2 5.0]{ABAP}% lstlang2.sty:\lst@definelanguage[R/2 4.3]{ABAP}[R/2 5.0]{ABAP}% lstlang2.sty:\lst@definelanguage[CORBA]{IDL}% lstlang2.sty:\lst@definelanguage[Objective]{Caml}[light]{Caml} lstlang2.sty:\lst@definelanguage[light]{Caml} lstlang2.sty:\lst@definelanguage[ibm]{Cobol}[1985]{Cobol}% lstlang2.sty:\lst@definelanguage[1985]{Cobol}[1974]{Cobol}% lstlang2.sty:\lst@definelanguage[1974]{Cobol}% lstlang2.sty:\lst@definelanguage{Delphi}% lstlang2.sty:\lst@definelanguage{Eiffel}% lstlang2.sty:\lst@definelanguage{Euphoria}% lstlang2.sty:\lst@definelanguage{GCL}% lstlang2.sty:\lst@definelanguage{Gnuplot}% lstlang2.sty:\lst@definelanguage{Haskell}% lstlang2.sty:\lst@definelanguage{IDL}% lstlang2.sty:\lst@definelanguage{inform}{% lstlang2.sty:\lst@definelanguage{Lisp}% lstlang2.sty:\lst@definelanguage[Auto]{Lisp}% lstlang2.sty:\lst@definelanguage[gnu]{make}% lstlang2.sty:\lst@definelanguage{make} lstlang2.sty:\lst@definelanguage{Mercury}% lstlang2.sty:\lst@definelanguage{Miranda}% lstlang2.sty:\lst@definelanguage{ML}% lstlang2.sty:\lst@definelanguage{Oz}% lstlang2.sty:\lst@definelanguage{PHP}% lstlang2.sty:\lst@definelanguage{Prolog}% lstlang2.sty:\lst@definelanguage{Rexx} lstlang2.sty:\lst@definelanguage{Ruby}% lstlang2.sty:\lst@definelanguage{SHELXL}% lstlang2.sty:\lst@definelanguage[tk]{tcl}[]{tcl}% lstlang2.sty:\lst@definelanguage[]{tcl}% lstlang2.sty:\lst@definelanguage{VBScript}% lstlang2.sty:\lst@definelanguage[97]{VRML} lstlang3.sty:\lst@definelanguage[68]{Algol}% lstlang3.sty:\lst@definelanguage[60]{Algol}% lstlang3.sty:\lst@definelanguage[Motorola68k]{Assembler}% lstlang3.sty:\lst@definelanguage[x86masm]{Assembler}% lstlang3.sty:\lst@definelanguage{Clean}% lstlang3.sty:\lstdefinelanguage{CIL}% lstlang3.sty:\lst@definelanguage{Comal 80}% lstlang3.sty:\lst@definelanguage[WinXP]{command.com}% lstlang3.sty:\lst@definelanguage{Comsol}% lstlang3.sty:\lst@definelanguage{Elan}% lstlang3.sty:\lst@definelanguage{erlang}% lstlang3.sty:\lst@definelanguage{ksh} lstlang3.sty:\lst@definelanguage{Lingo} lstlang3.sty:\lst@definelanguage{Logo}% lstlang3.sty:\lst@definelanguage{MetaPost}% lstlang3.sty:\lst@definelanguage{Mizar}% lstlang3.sty:\lst@definelanguage{Modula-2}% lstlang3.sty:\lst@definelanguage{MuPAD}{% lstlang3.sty:\lst@definelanguage{NASTRAN} lstlang3.sty:\lst@definelanguage{Oberon-2}% lstlang3.sty:\lst@definelanguage[decorative]{OCL}[OMG]{OCL} lstlang3.sty:\lst@definelanguage[OMG]{OCL}% lstlang3.sty:\lst@definelanguage{Plasm}% lstlang3.sty:\lst@definelanguage{PL/I}% lstlang3.sty:\lst@definelanguage{PostScript}{% lstlang3.sty:\lst@definelanguage{Promela} lstlang3.sty:\lst@definelanguage{PSTricks}% lstlang3.sty:\lst@definelanguage{Reduce}% lstlang3.sty:\lst@definelanguage{RSL}% lstlang3.sty:\lst@definelanguage[IBM]{Simula}[DEC]{Simula}{}% lstlang3.sty:\lst@definelanguage[DEC]{Simula}[67]{Simula}% lstlang3.sty:\lst@definelanguage[CII]{Simula}[67]{Simula}% lstlang3.sty:\lst@definelanguage[67]{Simula}% lstlang3.sty:\lst@definelanguage{SPARQL}% lstlang3.sty:\lst@definelanguage{S}[]{R}{} lstlang3.sty:\lst@definelanguage[PLUS]{S}[]{R}{} lstlang3.sty:\lst@definelanguage{R}% lstlang3.sty:\lst@definelanguage{SAS}% lstlang3.sty:\lst@definelanguage[AlLaTeX]{TeX}[LaTeX]{TeX}% lstlang3.sty:\lst@definelanguage[LaTeX]{TeX}[common]{TeX}% lstlang3.sty:\lst@definelanguage[plain]{TeX}[common]{TeX}% lstlang3.sty:\lst@definelanguage[common]{TeX}[primitive]{TeX} lstlang3.sty:\lst@definelanguage[primitive]{TeX}% lstlang3.sty:\lst@definelanguage{Verilog}% lstmisc.sty:\lst@UserCommand\lstdefinelanguage{\lst@DefLang\iftrue} lstmisc.sty:\lst@UserCommand\lst@definelanguage{\lst@DefLang\iffalse} lstmisc.sty:\lstdefinelanguage{}{}
のようになった。
行番号表示に関する指定
同タグのlinenumbering属性を「numbered」にすることで行番号を左に表示するようにできる。
<programlisting language="[言語名]" linenumbering="numbered"><![CDATA[ (ここにコードを記述) ]]></programlisting>
更に、行番号の開始値をstartinglinenumber属性で指定することもできる。
<programlisting language="[言語名]" linenumbering="numbered" startinglinenumber="[開始行]"><![CDATA[ (ここにコードを記述) ]]></programlisting>
画像は両方とも「linenumbering="numbered"」付き(ない場合は行番号は付かない)・上がstartinglinenumber指定なし、下が「3」を指定したもの
関連記事:
- DocBook文書をPDFファイルに変換するdblatexに関するその後(2010/4/26現在)
- DocBook文書をPDFファイルに変換するdblatexのリンク色変更と日本語の段落の自動改行に関するメモ(バージョン0.3現在)
- DocBook文書をPDFファイルに変換するdblatexでprogramlisting要素のコード内の日本語の表示がおかしくなる件とその対処について(バージョン0.3現在)
- DocBook文書をPDFファイルに変換するdblatexで外部の設定ファイルを用いる(バージョン0.3現在・ページ1/3)
- DocBook文書をPDFファイルに変換するdblatexで外部の設定ファイルを用いる(バージョン0.3現在・ページ2/3)
- DocBook文書をPDFファイルに変換するdblatexで外部の設定ファイルを用いる(バージョン0.3現在・ページ3/3)
関連URL:
使用したバージョン: