Index > 構造化FrameMakerでインライングラフィックを扱う方法
Sat, February 7, 2009

構造化FrameMakerでインライングラフィックを扱う方法

XML文書をFrameMakerに取り込んだときにグラフィック要素が、インライン上に配置されるように するにはどうしたらいいかの調査記録です。

概要

FrameMakerでは、インライングラフィックという概念は(たぶん)なく、 常にグラフィック枠を設置して、そこにグラフィック要素を配置します。 グラフィック枠は、文書中の適当な場所にアンカーされ、そこを基準として表示位置指定される。

具体的には、以下のような選択がある。

わたしがよく使う指定

※グラフィック枠は、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エレメントを以下のように修正

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>

結果

 Twitter
follow me on Twitter
 Categories