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 /s/y ……」を「rm -f ……」に直します。ただし、Windows版以外では、この必要はないかもしれません。
$ sed -i 's|del /s/y|rm -f|' Makefile |
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 |
ついでに、graphicsxやxcolorなどもdvipdfmxの指定を追加したほうが良いのかもしれません。
元がこうであるところ、
\usepackage[dvipdfmx, pagebackref=true, colorlinks=true, linkcolor=blue, unicode ]{hyperref} |
下のように変えます。
\usepackage[dvipdfmx, pagebackref=true, colorlinks=true, linkcolor=blue ]{hyperref} |
実際には使っていないらしく、削除しても特に問題ありませんでした。削除する理由は、これがあると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での設定によって出力が変わるので、この手順がそのまま適用できるとは限らないので。
スポンサード リンク |
この記事のカテゴリ
- プログラミング一般 ⇒ DoxygenのLaTeX出力で日本語を使う