2015年6月29日追記:現在のDoxygenとW32TeXの状況に合わせて書き直しました。DoxygenのLaTeX出力で日本語を使う(2015年版)をご覧ください。

DoxygenのLaTeX出力は、普通のLaTeXもしくはpdfLaTeXを想定しており、そのままでは日本語が使えません。そのため、日本語を含むドキュメントを最低限文字化けせずにPDF化する方法を調べていました。

  • 必要なもののインストール(初回だけ)
  • Doxyfileの修正(プロジェクトごとに1回だけ)
  • Makefileとrefman.texの修正(doxygenコマンドを実行するたび)

まず、以下のものが必要でした。

Doxygen
この記事を書いている時点での最新は1.7.6.1でした。しかし、この方法自体は1年くらい前からやり始めたので、もう少し前のバージョンでも可能だと思います。
pLaTeXまたはupLaTeX
WindowsなのでW32TeXを使っています。私はW32TeX – TeX Wikiの「標準インストールで必要なもの」一式とuptex-w32.tar.xzを導入した状態です(OTFパッケージも入れていますが今回は使っていません)。もちろん、pLaTeXを使用するならuptex-w32.tar.xzは不要です。Unix系ならTeX Live 2011などで良いと思います
Cygwin
なくても大丈夫です。私は、Doxygenの生成するMakefileの実行にGNUのmakeを使うためと、ファイルの修正にsedを使うためにCygwinを使っています。

このほか、以下のパッケージが必要でした。Doxygenが生成するLaTeXソース内でこれらが\usepackageされています。


準備ができたら、Doxyfileの編集です。doxygen -gやDoxywizardなどで生成したDoxyfileに対して以下の2ヶ所を修正します。

LATEX_CMD_NAME
LATEX_CMD_NAME = uplatex

platexを使う場合は以下のようにします。その場合、OTFパッケージとUTF-8 入力での利用 – OTF – TeX Wikiにある補助プログラムの併用を考えても良いかもしれません。2018年4月22日追記: 現在その記述は無くなりました

LATEX_CMD_NAME = "platex -kanji=utf8"
USE_PDFLATEX
USE_PDFLATEX = NO

現在のところ、pdfLaTeXは日本語環境で使えません。そのため、NOを選択しておきます。この設定、YESでもNOでも日本語環境に適さないという点では同じですけどね。

このほか、もちろんGENERATE_LATEXがYESになっていなければYESにしましょう。


ここまできたら、doxygenコマンドを実行します。ただし、これで終わりではありません。生成されたファイルに、さらに修正を加える必要があります。毎回行うのは面倒なので、適当なスクリプトにでもまとめておきましょう。

Makefileのdel

Makefileの最下行の「del /s/y ……」を「rm -f ……」に直します。ただし、Windows版以外では、この必要はないかもしれません。

$ sed -i 's|del /s/y|rm -f|' Makefile
refman.texにPDFのしおりに関する指定を追加

2行目に以下の内容を追加します。この記述内容についてはhyperref – TeX Wikiを参考にしてください。

\ifx\kanjiskip\undefined\else
  \usepackage{atbegshi}
  \ifx\ucs\undefined
    \ifnum 42146=\euc"A4A2
      \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}
    \else
      \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
    \fi
  \else
    \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}}
  \fi
\fi
refman.texでhyperrefのオプションをps2pdfからdvipdfmxに変える

ついでに、graphicsxやxcolorなどもdvipdfmxの指定を追加したほうが良いのかもしれません。

refman.texでhyperrefのオプションからunicodeを消去する

元がこうであるところ、

\usepackage[dvipdfmx,
            pagebackref=true,
            colorlinks=true,
            linkcolor=blue,
            unicode
           ]{hyperref}

下のように変えます。

\usepackage[dvipdfmx,
            pagebackref=true,
            colorlinks=true,
            linkcolor=blue
           ]{hyperref}
\usepackage{pspicture}の行を削除する

実際には使っていないらしく、削除しても特に問題ありませんでした。削除する理由は、これがあるとdvipdfmxで生成できないためです。Doxygenのバージョンが新しいと、そもそもこの行が生成されないのでこの手順は不要です。

本文をゴシック体にする

本文がサンセリフ体となっているため、そのままだと「和文:明朝体、欧文:サンセリフ体」というアンバランスな組み合わせになってしまいます。最低限の対処として、本文の和文書体をゴシック体にすることしました。\renewcommand{\kanjifamilydefault}{\gtdefault}を書き加えると良いようです(参考:スライドなどで数式をサンセリフ体にする – 西方研Wiki)。

上に書いたrefman.texへの修正をsedでやるとこんな感じでしょうか。

1a\\\ifx\\kanjiskip\\undefined\\else\
  \\usepackage{atbegshi}\
  \\ifx\\ucs\\undefined\
    \\ifnum 42146=\\euc"A4A2\
      \\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}\
    \\else\
      \\AtBeginShipoutFirst{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}\
    \\fi\
  \\else\
    \\AtBeginShipoutFirst{\\special{pdf:tounicode UTF8-UCS2}}\
  \\fi\
\\fi
s/usepackage\[ps2pdf,/usepackage[dvipdfmx,/
/unicode/d
s/linkcolor=blue,/linkcolor=blue/
/\\usepackage{pspicture}/d
1a\\\renewcommand{\\kanjifamilydefault}{\\gtdefault}

上記内容をrefman.sedというファイル名で保存したら、以下のように実行できます。

$ sed -f refman.sed -i refman.tex

ここまでができたら、makeとdvipdfmxを実行します。

$ make && dvipdfmx refman.dvi

Cygwinがないなど、makeを使わないなら適当に(u)platexを実行すれば同じです。Makefileの中でやっていることはだいたいこんな感じです。

$ uplatex refman.tex
$ makeindex refman.idx
$ uplatex refman.tex
$ uplatex refman.tex
$ dvipdfmx refman.dvi

platexでもだいたい同じです。

$ platex -kanji=utf8 refman.tex
$ makeindex refman.idx
$ platex -kanji=utf8 refman.tex
$ platex -kanji=utf8 refman.tex
$ dvipdfmx refman.dvi

refman.texの修正の仕方は、refman.tex実物を1度見て、どう直すか考えるのが良いと思います。DoxygenのバージョンやDoxyfileでの設定によって出力が変わるので、この手順がそのまま適用できるとは限らないので。


スポンサード リンク

この記事のカテゴリ