DocBook XML文書をPDF形式に変換するdblatexに挑む(screen要素やprogramlisting要素などを使用すると起きる問題)
サンプルについて
使用するサンプルは前回と同じで、「DocBook文書について」の「bookの例」として貼り付けた文書をbooktest.xmlとして使用する。今回は、この文書の2番目のchapterを<chapter id="chap2"> <title>2番目の章</title> <para>2番目の章の段落</para> <screen><prompt>$</prompt> ls</screen> </chapter>
として、端末にプロンプト「$」と、コマンド「ls」を入力している状態を示す記述を追加してみる。
screen要素やprogramlisting要素を使用するとエラー?
これを処理するとBuild the listings... XSLT stylesheets DocBook - LaTeX 2e (0.2.7) =================================================== Build booktest.pdf This is pdfeTeX, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5) entering extended mode pdflatex failed /usr/share/texmf/tex/latex/latex-unicode/utf8x.def:27: Package utf8x Error: Please use \usepackage{ucs} to support encoding utf8x. /usr/share/texmf/tex/latex/latex-unicode/utf8x.def:27: leading text: ...epackage{ucs} to support encoding utf8x}{} Error: pdflatex compilation failed
となる。
LaTeX文書側のエラーが出たので、-t texを付け、中間ファイルのLaTeX文書を出力してみる。入力されたXMLファイルをdblatexに付属するXSLスタイルシートに通したものがこの.texファイルになる。
$ dblatex -t tex booktest.xml Build the listings... XSLT stylesheets DocBook - LaTeX 2e (0.2.7) =================================================== 'booktest.tex' successfully built
これを開くと
% ----------------------------------------- % Autogenerated LaTeX file from XML DocBook % ----------------------------------------- %%<params> %% latex.encoding utf8 %%</params> \documentclass{report} \usepackage{fancybox} \usepackage{makeidx} \def\hyperparamadd{pdfcreator=DBLaTeX-0.2.7} \usepackage[hyperlink]{docbook} \lstset{inputencoding=utf8x, extendedchars=\true} \setuplocale{ja} \renewcommand{\DBKreleaseinfo}{} \setcounter{tocdepth}{5} \setcounter{secnumdepth}{5} \renewcommand{\DBKcopyright}{\noindent 製作著作 \textnormal{\copyright} 2007 Copyright (C) Taro Yamada} \title{タイトル} \author{山田 太郎 [FAMILY Given]} (以下略)
のようになっている。これをPDFへ変換処理するには、
$ TEXINPUTS=[インストール先]/share/dblatex//: pdflatex booktest.tex
のようにする。TEXINPUTSをセットしないと、dblatexに含まれるstyファイルが見付けられず
! LaTeX Error: File `docbook.sty' not found.
となる。
指示*1どおり、下のように該当記述を追加して
--- booktest.tex.orig +++ booktest.tex @@ -7,6 +7,7 @@ \documentclass{report} \usepackage{fancybox} \usepackage{makeidx} +\usepackage{ucs} \def\hyperparamadd{pdfcreator=DBLaTeX-0.2.7} \usepackage[hyperlink]{docbook} \lstset{inputencoding=utf8x, extendedchars=\true}
下を実行すると、
$ TEXINPUTS=[インストール先]/share/dblatex//: pdflatex booktest.tex
無事にPDFファイルが生成された。そこで、XSLスタイルシート側を
--- [インストール先]/share/dblatex/xsl/lang.xsl.orig +++ [インストール先]/share/dblatex/xsl/lang.xsl @@ -205,6 +205,7 @@ </xsl:variable> <xsl:choose> <xsl:when test="$use-unicode='1' or $latex.encoding='utf8'"> + <xsl:text>\usepackage{ucs} </xsl:text> <xsl:text>\lstset{inputencoding=utf8x, extendedchars=\true} </xsl:text> </xsl:when> <xsl:when test="$latex.encoding='latin1' and $latex.unicode.use!='0'">
といった感じに修正すると、今後、上の流れを手動で行う必要はなくなる。なお、
[引用]ファイル名: [インストール先]/share/dblatex/xsl/lang.xsl より
<xsl:when test="$latex.encoding='utf8'"> <xsl:text>\usepackage[T2A,T2D,T1]{fontenc} </xsl:text> <xsl:text>\usepackage{ucs} </xsl:text> <xsl:text>\usepackage[utf8x]{inputenc} </xsl:text> </xsl:when>
この3行はLaTeX文書には追加されないのだが(-Pを付けて指定しても変化なし)、.texファイルに上記3行の「\usepackage」を直接書いた場合
(中略) Package hyperref Warning: Set package option `unicode' first (hyperref) in order to load unicode support. (/usr/share/texmf/tex/latex/cjk-latex/CJKutf8.sty ! LaTeX Error: Option clash for package inputenc. See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... l.33 \RequirePackage [encapsulated]{CJK}
のようなエラーが出てしまう。「\usepackage[encapsulated]{CJK}」を「{ucs}」の上の行に追加しても同じだった。
screenやprogramlistingに日本語を含めると...
今度は、日本語を含めて<chapter id="chap2"> <title>2番目の章</title> <para>2番目の章の段落</para> <screen><prompt>$</prompt> touch テスト.txt</screen> </chapter>
としてみる。
Build the listings... XSLT stylesheets DocBook - LaTeX 2e (0.2.7) =================================================== Build booktest.pdf This is pdfeTeX, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5) entering extended mode pdflatex failed booktest_tmp.tex:97: Package ucs Error: Unknown Unicode character 12486 = U+30C6, booktest_tmp.tex:97: leading text: $ touch テ booktest_tmp.tex:97: Package ucs Error: Unknown Unicode character 12473 = U+30B9, booktest_tmp.tex:97: leading text: $ touch テス booktest_tmp.tex:97: Package ucs Error: Unknown Unicode character 12488 = U+30C8, booktest_tmp.tex:97: leading text: $ touch テスト Error: pdflatex compilation failed
.texファイルを出力後、これを手動で処理し、詳細なメッセージを見たところ
! Package ucs Error: Unknown Unicode character 12486 = U+30C6, (ucs) possibly declared in uni-48.def. (ucs) Type H to see if it is available with options. See the ucs package documentation for explanation. Type H <return> for immediate help. ... l.97 $ touch テ スト.txt\end{lstlisting} ? H Unicode character 12486 = U+30C6: KATAKANA LETTER TE Character available with following options: cjkjis.
となった。
中間ファイルを手動で編集し、「\usepackage[cjkjis]{ucs}」に修正すると
! Undefined control sequence. \u-cjkjis-12486 #1->\jischar {2546} l.94 $ touch テ スト.txt\end{lstlisting}
このようなエラーになる。
.texファイル中の該当部分は
\begin{lstlisting}[firstnumber=1,] $ ls テスト.txt\end{lstlisting}
なのだが、ここには日本語が入れられない仕様だとかいうことはあるのだろうか...?
LaTeXのことがよく分からないこともあり、何か大きな勘違いをしているのかもしれないが、お手上げ状態なので、この実験はこのあたりにしておく。
*1:Please use \usepackage{ucs} to support encoding utf8x.