少しだけ異なるマスターページを管理する方法(Structured FrameMaker)
ツメの位置だけが章別に異なる場所にレイアウトされるものの、 その他部分は完全に共通なテンプレート(中のマスターページ)を 管理したい。
共通部分に変更はいつ入るかわからない。 もし、 マスターページを単純コピーして作成すると、 共通部分に入った変更をコピーした分だけ繰り返し入れる必要が生じてしまう。
こういった作業は単に精神的に辛いだけでなく、発見が難しいヌケモレ系のミスを 引き起こし品質上の問題になる。
ではどうすればいいか?
mif 経由でツメの位置を書き替える
fmファイルをmif形式で保存するとテキストファイルになるため、 sed等のツールでデータを書き替え可能になる。
ツメの位置を章ごとにずらしたいだけなら、ツメに該当する記述の y座標を 適切に書き替えればOK。
以下のようなツメ用の矩形塗り設定 (左,上,横幅,高さ)=(0.0mm, 24.0mm, 10.0mm, 10.0mm) がある場合・・・
<ShapeRect 0.0 mm 24.0 mm 10.0 mm 10.0 mm>
<BRect 0.0 mm 24.0 mm 10.0 mm 10.0 mm>
以下のように 上に該当する左から二番目の値を +10.0 mm する (24.0mm → 34.0mm にカエ) ことで、ツメ用矩形塗りを下に10mm下げることができる。
<ShapeRect 0.0 mm 34.0 mm 10.0 mm 10.0 mm>
<BRect 0.0 mm 34.0 mm 10.0 mm 10.0 mm>
sed でバッチ処理
上記方法で、理屈はわかるのだが、mifデータをテキストエディタで開いて
手動で直していたのでは、面倒で間違いも起きるし、効率的でない。
そこで、以下のように sed で処理できるスクリプトファイルに直しておくことで、
ベースとなるテンプレートから、各章の適切なツメ位置に書き替えた
実際のテンプレートを作り出すことができる。
toChapter2.sed
s/0.0 mm 24.0 mm 10.0 mm 10.0 mm/0.0 mm 34.0 mm 10.0 mm 10.0 mm/
書き替え実行
$ sed -f toChapter2.sed template.mif > template_chapter2.mif
実際のケース
いままでの話は、 章ごとに異なるツメの位置があるので、ツメ情報の異なるマスターページを含んだテンプレートを 作成しておく、という発想。
ただ、実際には、章別にマスターページが異なるということは、 章ごとに異なるアプリケーション定義を作成しておく必要があることを意味し、 アプリケーション定義が増えてその管理が面倒。
そこで、実際には、
- テンプレートは共通のものをとりあえず使用して、章単位でBook構築
- 章別に保存された fm ファイルを mif 保存して、上記と同じ処理を行う
というワークフローを使うことで、テンプレートを増やさないで(=アプリ定義が一つのまま) 同じことが実現できる。
Book構築時に一旦 fm 保存されたファイルを
- 1) mif形式 保存しなおし、2) sed処理 3) 再度 fm 形式で保存
という手順が煩雑だが、
テンプレートを増やしてしまうよりはスマートに問題を解決できる。
単純な保存作業などが続くので、この部分をFrameScriptやFDKを使って自動化できれば
仕事はかなり楽になると思う。
応用)ツメ位置ではなく、ノンブル形式が章別に異なる場合
PLや目次を含んだはじめの章だけは、<$curpagenum> 形式で、 それ以降の章は、<$chapnum>-<$curpagenum> 形式・・・にしなければならないという場合。
FrameMakerでは、システム変数としてノンブル用「現在のページ番号」を 使用する必要がある。 しかし、「現在のページ番号」という変数は一つしかないため、 これに、<$chapnum>-<$curpagenum> を割り当ててしまうと、 最初の章だけ、<$curpagenum> にすることはできない。
たぶんできないと思う。
そこで、これも先ほどと同じ発想で、mif 保存して、 システム変数「現在のページ番号」定義部分を直接書き替えてしまえばよい。
この例では、以下の内容の replace.sed ファイルを用意して・・・
s/<$chapnum\\>-<$curpagenum\\>/<$curpagenum\\>/
以下のように実行すれば、ノンブル表記形式を変えることができる。
$ sed -i -f replace.sed chapter1.mif