[Sphinx] 国際化対応してPDFを生成する場合はちゃんとcleanしないとハマるって話

こんにちは。サービスグループの武田です。Sphinxの国際化対応をした後、PDFを出力しようとしてしばらくハマっていたので解決策を共有します。
2020.08.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

先日、Sphinxドキュメントの国際化対応について確認しました。

Sphinxは、さまざまなフォーマットで成果物を生成できることが魅力的なポイントです。HTMLはもちろんですが、PDFも需要の高いフォーマットではないでしょうか。

さて国際化対応で確認したのはHTMLだけでした。せっかくなのでPDFも出力したいですよね。というわけで、英語版のPDFを出力しようとしたところ、次のようにエラーになってしまいました。

$ pipenv run make latexpdf -e SPHINXOPTS='-D language="en"'
Sphinx v3.1.2 を実行中
翻訳カタログをロードしています [en]... 完了
保存された環境データを読み込み中... 完了

(中略)

! Package inputenc Error: Unicode character 第 (U+7B2C)
(inputenc)                not set up for use with LaTeX.

See the inputenc package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.1 ...�}Developers.IO 2020 CONNECT}{1}{chapter.1}
                                                  %
?

Ctrl-Cで中断して繰り返してみてもやはり同様のエラーが出てしまいました。日本語ベースのドキュメントから英語翻訳のPDFは生成できないんでしょうか?

試行錯誤を繰り返した結果、どうやら「日本語PDF」を生成した後に続けて「英語PDF」を生成しようとするとこのエラーが出るようです(逆も然り)。前回生成したLaTeXファイルが邪魔をしているという解釈になるでしょうか。というわけで、解決策は一度きれいにしてしまうことでした。具体的にはcleanを実行すれば大丈夫です。

$ pipenv run make clean
$ pipenv run make latexpdf -e SPHINXOPTS='-D language="en"'

またはビルドに使用するディレクトリを言語ごとに分けてしまうのも方法かと思われます。

まとめ

思わぬところでエラーに遭遇しましたが、「とりあえずcleanしてみる」は令和でも有効な手段であることがわかりました。