Sphinxでグリッドテーブルに全角記号を使った場合のエラー

ドキュメントの作成に、ドキュメントが簡単に作れるツール Sphinx を気に入って使っています。

先日、グリッドテーブル(Grid Table)に全角記号を入れるとエラーになるということに気がつきました。
具体的には、以下のようなものがエラーになってしまいます。

しかし、次のようにするとエラーなく処理されます。

横幅がそろっていないとエラーになるはずが、そろっているとエラーになり、ずらすとエラーがなくなるいう状態です。

困って調べたところ、Pythonのdocutilsパッケージが原因であることがわかりました。

グリッドテーブルが正しい形式になっているかを確認するときに、docutils内で、グリッドテーブルの各行の長さを計算しています。そのとき、ひらがなや漢字などの全角の文字は、半角2文字分の幅を取っているので、見た目と合わせるために、長さを2として計算されます。しかし、「→」などの全角記号が長さを1として計算されているため、見た目とずれてしまっています。

これを修正するために、以下のようにしました。環境はDebian9(stretch)です。

システム側のdocutilsを変更しないで済ませるために、ユーザのホーム以下のディレクトリにコピーをします。ここでは「.pythonlib」というディレクトリ名にしましたが、これは任意の名前で構いません。

このディレクトリを、モジュールファイルのデフォルトの検索パスに追加するために、環境変数を設定します。bashならば、以下の行を環境設定ファイル(「.profile」など)に記述します。

環境設定ファイルを読み込めば有効になります。

コピーしたdocutilsディレクトリ配下の「statemachine.py」の

のように変更します(「A」を追加)。

また、今回の修正には直接関係ありませんが、整合性をとるため、コピーしたdocutilsディレクトリ配下の「utils/__init__.py」の

のように変更(「1」を「2」に変更)しておくといいと思われます。

以上で、全角記号を含んだグリッドテーブルで、見た目がそろっていればエラーが出ずに処理できるようになりました。