柳井です。okkezさん、ありがとうございます。

> * 置換リストの右側にはRubyでそのまま使用できる文字列が記述されているので
>   evalで評価すれば、Rubyの文字列になる。(\n,\tが期待どおりの文字列になる)

>   [tmp.first, eval('"' + tmp.last.gsub(/(\\[0-9])/){ "\\" + $1 } + '"')]

evalという関数、こんなふうに使うんですね! 勉強になりました。
まだちゃんと理解できていませんが、とりあえず希望していたことはできそうで
す。重ねて、感謝です。