Index > 少しだけ異なるマスターページを管理する方法(Structured FrameMaker)
Sat, May 23, 2009

少しだけ異なるマスターページを管理する方法(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

実際のケース

いままでの話は、 章ごとに異なるツメの位置があるので、ツメ情報の異なるマスターページを含んだテンプレートを 作成しておく、という発想。

ただ、実際には、章別にマスターページが異なるということは、 章ごとに異なるアプリケーション定義を作成しておく必要があることを意味し、 アプリケーション定義が増えてその管理が面倒。

そこで、実際には、

  1. テンプレートは共通のものをとりあえず使用して、章単位でBook構築
  2. 章別に保存された fm ファイルを mif 保存して、上記と同じ処理を行う

というワークフローを使うことで、テンプレートを増やさないで(=アプリ定義が一つのまま) 同じことが実現できる。

Book構築時に一旦 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
 Twitter
follow me on Twitter
 Categories