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

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

横幅がそろっていないとエラーになるはずが、そろっているとエラーになり、ずらすとエラーがなくなるいう状態です。
困って調べたところ、Pythonのdocutilsパッケージが原因であることがわかりました。
グリッドテーブルが正しい形式になっているかを確認するときに、docutils内で、グリッドテーブルの各行の長さを計算しています。そのとき、ひらがなや漢字などの全角の文字は、半角2文字分の幅を取っているので、見た目と合わせるために、長さを2として計算されます。しかし、「→」などの全角記号が長さを1として計算されているため、見た目とずれてしまっています。
これを修正するために、以下のようにしました。環境はDebian9(stretch)です。
システム側のdocutilsを変更しないで済ませるために、ユーザのホーム以下のディレクトリにコピーをします。ここでは「.pythonlib」というディレクトリ名にしましたが、これは任意の名前で構いません。
| 
					 1 2 3 4  | 
						$ cd $HOME $ mkdir .pythonlib $ cd .pythonlib $ cp -rp /usr/lib/python2.7/dist-packages/docutils .  | 
					
このディレクトリを、モジュールファイルのデフォルトの検索パスに追加するために、環境変数を設定します。bashならば、以下の行を環境設定ファイル(「.profile」など)に記述します。
| 
					 1  | 
						export PYTHONPATH="$HOME/.pythonlib/"  | 
					
環境設定ファイルを読み込めば有効になります。
コピーしたdocutilsディレクトリ配下の「statemachine.py」の
| 
					 1  | 
						if east_asian_width(char) in 'WF': # 'W'ide & 'F'ull-width  | 
					
を
| 
					 1  | 
						if east_asian_width(char) in 'WFA': # 'W'ide & 'F'ull-width  | 
					
のように変更します(「A」を追加)。
また、今回の修正には直接関係ありませんが、整合性をとるため、コピーしたdocutilsディレクトリ配下の「utils/__init__.py」の
| 
					 1 2 3 4 5 6 7  | 
						east_asian_widths = {'W': 2,   # Wide                      'F': 2,   # Full-width (wide)                      'Na': 1,  # Narrow                      'H': 1,   # Half-width (narrow)                      'N': 1,   # Neutral (not East Asian, treated as narrow)                      'A': 1}   # Ambiguous (s/b wide in East Asian context,                                # narrow otherwise, but that doesn't work)  | 
					
を
| 
					 1 2 3 4 5 6 7  | 
						east_asian_widths = {'W': 2,   # Wide                      'F': 2,   # Full-width (wide)                      'Na': 1,  # Narrow                      'H': 1,   # Half-width (narrow)                      'N': 1,   # Neutral (not East Asian, treated as narrow)                      'A': 2}   # Ambiguous (s/b wide in East Asian context,                                # narrow otherwise, but that doesn't work)  | 
					
のように変更(「1」を「2」に変更)しておくといいと思われます。
以上で、全角記号を含んだグリッドテーブルで、見た目がそろっていればエラーが出ずに処理できるようになりました。