図やリストの自動番号振り

今俺は依頼された原稿を書いている。そこで図やプログラムリストの書き方は以下のように図やリストに番号を振るよう指示されている。

この画像は弊社のWebページの画像です(図1).
------------------
(図1) キャプション
---------------

しかし、手で番号を振ると、すでに書き上げた文章の途中に図を新たに挿入する場合に番号がずれてしまう。そこでRubyに番号振りを任せるのだ。RubyといったらRailsばかり注目されているけれど、もともとテキスト処理に強い言語だ。

要求とは裏腹に、執筆者は図を番号ではなくて内容で認識している。だから図に名前をつけて参照するのが賢明だ。また、図の番号は出現順に振られるもの。だからHashで名前→番号の対応を作り、「図記法」が現れたら置換する。

この工夫をすることで、番号の対応を気にせずに執筆が続けられるのだ。いちいち前の図に戻って番号を確認するのは非人間的でストレスがたまる。

=begin test_convert_object_number
txt = "a [Fig:test] [Fig:foo] b [Fig:foo]c [Fig:test]"
assert_equal "a 図1 図2 b 図2c 図1", convert_object_number(txt,"Fig","図")
=end
def convert_object_number(txt,en,ja)
  n = 1; h = {}
  txt.gsub(/\[#{en}:(.+?)\]/) do
    objname = $1
    unless h.key? objname
      h[objname] = n
      n += 1
    end
    "#{ja}#{h[objname]}"
  end
end

def create_object_number(txt)
  convert_object_number(convert_object_number(txt, "Fig", "図"), "List", "リスト")
end