構造化FrameMakerでインライングラフィックを扱う方法
XML文書をFrameMakerに取り込んだときにグラフィック要素が、インライン上に配置されるように するにはどうしたらいいかの調査記録です。
概要
FrameMakerでは、インライングラフィックという概念は(たぶん)なく、 常にグラフィック枠を設置して、そこにグラフィック要素を配置します。 グラフィック枠は、文書中の適当な場所にアンカーされ、そこを基準として表示位置指定される。
具体的には、以下のような選択がある。

わたしがよく使う指定
- Below current line
- 現在の行のすぐしたに配置、align指定で、left,center,right等指定できる
- Run into Paragraph
- アンカーしているパラグラフ内に配置、align指定で、left,center,right等指定できる
- ※これは便利なのだが、パラグラフ内の文字量が少なく、グラフィックより高さが低いケースではちょっとレイアウトが困る
- アンカーしているパラグラフ内に配置、align指定で、left,center,right等指定できる
※グラフィック枠は、InDesignのアンカー付きオブジェクトと似ている。
テストするXML文書
articleエレメント内にparaがあり、そこに img 要素を入れる、という超シンプルなXML文書です。
<?xml version="1.0" encoding="UTF-8"?>
<article>
<para>
Please push
<img src="ok.svg" position="inline" xoffset="0" yoffset="0" />
button.
</para>
</article>
DTD
<?xml encoding="UTF-8"?>
<!ELEMENT article (para)*>
<!ELEMENT para (#PCDATA|img)*>
<!ELEMENT img EMPTY>
<!ATTLIST img
src CDATA #REQUIRED>
DTDからEDDに変換してカスタマイズ
DTDをFrameMakerにEDDとして取り込みます。
EDD修正ポイント
imgエレメントを以下のように修正
- Element(Container) ... img になっているので Element(Graphic)に修正
- 必要な属性を追加 → position ,xoffset, yoffset
alignも重要
インライン上に配置するグラフィックにとっては、align指定は関係ないが、 それ以外の位置にグラフィック(枠)を配置する場合には、align指定が重要になる。
FrameMakerでは、 インライングラフィックとして配置しないケースでの グラフィックス枠の配置は、position と align の二つのパラメータで制御することが判明。
positionとalign属性はセットで指定するべき。
この辺は後日追記予定。
position
グラフィック枠(AnchoredFrame)をどう配置するかの指定です。
インライン上に配置する場合は、そのまま inline と指定します。
どんな文字列が position属性の値として指定できるかは、FrameMaker付属の
StructureDevGuide.pdf を参照します。
xoffset,yoffset
グラフィック要素を含んだXML文書をFrameMakerに取り込むと、 グラフィック枠の中にグラフィック要素が配置されるのですが、そのとき、 グラフィック枠とグラフィック要素の間にデフォルトで スペース(CSSで言えば、padding値のようなもの)が設定されます。
この値をコントロールするには、xoffset,yoffset に値を設定します。
完成したEDD

完成したEDD(StructureView)

Read/Write Rules の設定
読み書きルールを以下のように設定
fm version is "7.2";
element "img"
{
is fm graphic element;
attribute "src"
{
is fm property file;
is fm attribute;
}
attribute "position"
{
is fm property position;
is fm attribute;
}
attribute "xoffset" {
is fm property horizontal offset;
is fm attribute;
}
attribute "yoffset" {
is fm property vertical offset;
is fm attribute;
}
}
テンプレート作成/アプリ設定/XML文書のDOCTYPEの追記
EDDが完成したら、テンプレートを作成し、EDDをインポート、その後、 structapps.fm の設定を行い、そこで指定した、DOCTYPEをXML文書に追加します。
XML文書は以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OSIMA//DTD Myimage//EN" "">
<article>
<para>
Please push
<img src="ok.svg" position="inline" xoffset="0" yoffset="0" />
button.
</para>
</article>
結果
