JustoFitホーム JustoFitバージョン1.3.0使用説明書


相互参照と内容生成

JustoFitには内容生成機能がそなわっています。

InDesign CS2にはAdobe FrameMakerやMicrosoft Wordのような相互参照機能がありませんが、JustoFitのこの内容生成機能を利用することで、InDesign文書でも相互参照を利用することができるようになります。

相互参照の作成

InDesign CS2にこのプラグインをインストールした状態で、相互参照を作成するには、以下のように操作します。

  1. 「生成内容スタイル」パネルが表示されていることを確認します。

    表示されていないときは、「ウィンドウ」メニューの「生成内容スタイル」コマンドを選択します。

  2. 相互参照を挿入したい箇所に文字カーソルを置きます。

  3. 「生成内容スタイル」パネルから、挿入したい相互参照のスタイル名をクリックします。

    →すると、文字カーソルの位置に、そのスタイルに従って仮生成テキストが挿入されます。

     また、「生成内容スタイル」パネルの「参照」ボタンと「キャンセル」ボタンが灰色から黒に変わって押せるようになります。

  4. 参照したい段落に文字カーソルを置きます。

  5. 「生成内容スタイル」パネルの「参照」ボタンをクリックします。

    →すると、さきに挿入されていた仮生成テキストが、参照先の情報を反映した正しいテキストに変わります。

※「参照」ボタンを押す前に、別のスタイルをクリックすると、生成させるテキストの形式をそのスタイルへその場で変更することができます。[生成内容なし]をクリックした場合は、参照動作がキャンセルされ、仮生成内容は削除されます。「キャンセル」ボタンを押した場合も同様に参照動作がキャンセルされ、仮生成内容が削除されます。

相互参照のスタイルを変更

すでに作成済の相互参照のスタイルを変えるには、以下のように操作します。

  1. 作成済の相互参照の中に文字カーソルを置きます。

    →すると、その相互参照の現在のスタイルが、「生成内容スタイル」パネル上で反転表示されます。

  2. 「生成内容スタイル」パネルで、別のスタイルをクリックします。

    →すると、相互参照のスタイルが変更されます。

相互参照を削除

すでに作成済の相互参照を削除するには、以下のように操作します。

  1. 作成済の相互参照の中に文字カーソルを置きます。

    →すると、その相互参照の現在のスタイルが、「生成内容スタイル」パネル上で反転表示されます。

  2. 「生成内容スタイル」パネルで、「生成内容なし」をクリックします。

    →すると、相互参照が削除されます。

生成内容を更新

文書内の生成内容(相互参照を含む)を更新するには、「生成内容スタイル」パネルの「生成内容の更新...」コマンドを選択します。

生成内容スタイルを追加

「生成内容スタイル」パネルの「新規生成内容スタイル...」コマンドを選択すると生成内容スタイルを追加できるよう、近日機能拡張予定です。それまでは後述の方法で、ヘッダのCSSを直接編集してください。

スタイルを複製

「生成内容スタイル」パネルの「スタイルを複製...」コマンドを選択すると生成内容スタイルを複製できるよう、近日機能拡張予定です。それまでは後述の方法で、ヘッダのCSSを直接編集してください。

スタイルを削除

「生成内容スタイル」パネルの「スタイルを削除」コマンドを選択すると生成内容スタイルを削除できるよう、近日機能拡張予定です。それまでは後述の方法で、ヘッダのCSSを直接編集してください。

スタイルを編集

「生成内容スタイル」パネルの「スタイルの編集...」コマンドを選択すると生成内容スタイルの定義内容を編集できるよう、近日機能拡張予定です。それまでは後述の方法で、ヘッダのCSSを直接編集してください。

セレクタ表現

「生成内容スタイル」パネルの「セレクタ表現」コマンドを選択してチェックを入れると、スタイル一覧が生のセレクタ表現で表示されます。

※表示されるのは、ヘッダCSSにあるセレクタのうち、contentプロパティを持つセレクタです。「セレクタ表現」にチェックが入っていないときは、さらにこれは、.-un-gクラスセレクタともう1つのクラスセレクタ(スタイル名)だけでできているセレクタのみの表示に絞り込まれています。

小さく表示

「生成内容スタイル」パネルの「小さく表示」コマンドを選択してチェックを入れると、スタイル一覧が小さく表示されます。

将来実装予定の機能

上記以外に将来実装予定の機能は以下のとおりです。

CSS3の生成内容表現

この節は以下の方を対象としています。

contentプロパティ

JustoFitは内部的に生成内容(相互参照を含む)を、CSS3のcontentプロパティを用いて記述しています。

要素のCSSがcontentプロパティ値を持つとき、その要素は生成内容要素として扱われ、プロパティ値での指定にしたがって要素の内容が自動的に生成されます。

ここでcontentプロパティは、要素自身がxhtml:style属性に持つものだけでなく、文書のヘッダのCSSでその要素にマッチするセレクタの規則からもたらされたものも含みます。ヘッダCSSに規則を書くと、各要素にいちいち同じ宣言を書かないですむので便利です。JustoFitの生成内容スタイル機能も、このヘッダCSSのセレクタを利用しています。

ヘッダのCSSに生成内容スタイルを書く

JustoFitでは、InDesign文書が内蔵するXML構造の冒頭にさまざまなスタイルを書くことにより、組版調整や生成内容のスタイルを定義しています。

具体的には、普通のXHTMLと同様、XML構造の最上位要素の子要素としてxhtml:head要素を持ち、その子要素としてxhtml:style要素を持って、その中にCSS形式のスタイルシートを書いています。これを以下、ヘッダCSSと呼びます。

スタイルの名前はCSSのクラスセレクタとして表されます。生成内容スタイルは「-un-g」クラスとの組み合わせによって表現されます。

生成内容スタイルのセレクタ表現の例

生成内容スタイル名セレクタ表現
pagetext.-un-g.pagetext

JustoFitは、CSS3のcontentプロパティ値を生成内容として解釈・適用します。ただし目下、解釈できるのは以下の内容だけです。

JustoFitは、相互参照先を識別するためにIDを用いて、その値を参照先要素のxhtml:id属性に格納しています。それと同じ値を参照元のxhtml:href属性にも格納していますが、こちらは頭に「#」がつきます。

相互参照先の要素の記述例

<xhtml:p xhtml:id="referree">相互参照先見出し</xhtml:p>

相互参照元の要素の記述例

<xhtml:a xhtml:href="#myID" xhtml:class="-un-g textpage"></xhtml:a>

ヘッダCSSの記述例(参照先のテキストをコピーしてくる)

.-un-g.textonly { content: target-text(attr(xhtml|href, url)); }

ヘッダCSSの記述例(参照先のノンブルをコピーしてくる)

.-un-g.pageonly { content: target-counter(attr(xhtml|href, url), page); }

ヘッダCSSの記述例(複合)

.-un-g.textpage { content: target-text(attr(xhtml|href, url)) "(p." target-counter(attr(xhtml|href, url), page) ")"; }

JustoFitで使う相互参照のための生成内容スタイルを書くには、以上の知識があれば十分です。

より詳しくお知りになりたい方は、CSS3のワーキングドラフト「CSS3 module: Generated Content for Paged Media」(http://www.w3.org/TR/css3-gcpm/)をご参照ください。

CSSの汎用性

内部的に、JustoFitが解する相互参照記法は、XHTMLとCSS3で記述された相互参照です。なので将来的に、ウェブなどへの流用が容易であるばかりでなく、逆にウェブからの読み込み文書でも相互参照がそのまま生きます。

また、XHTMLもCSS3も、InDesignの標準機能であるXML機能を使って文書内に普通に格納しておくことができますので、プラグイン独自の情報によって文書を「汚す」ことがありません。したがって、JustoFitのために相互参照を付与した文書を、JustoFitプラグインのインストールされていない環境へ持っていっても、まったく互換性の問題を起こすことはありません。可搬性の高い形式です。

生成内容要素

JustoFitの「生成内容スタイル」パネルでスタイル名をクリックして生成内容を挿入するとき、内部的には以下のような文書構造変更が行われています。

しかしJustoFitは、こうして作成された生成内容要素だけでなく、直接またはCSSカスケードによりcontentプロパティ値を持つすべての要素を生成内容要素として扱います。したがって、たとえば

JustoFitで正しくスタイルの閲覧や生成内容更新を行うことができます。

※要素が直接自分のxhtml:style属性にcontentプロパティ値を持っているときは、「生成内容スタイル」パネルの[スタイルなし]または[セレクタなし]がハイライトされます。

CSS3に正しく準拠したこうした汎用性により、たとえJustoFitを使って設定した生成内容でなく、任意のWebページなどから持ってきたものであっても、JustoFitでそのまま機能させることができるので便利です。

参照先要素

JustoFitの「生成内容スタイル」パネルで「参照」ボタンを押して参照先を指定するとき、内部的には以下のような文書構造変更が行われています。

しかしJustoFitは、こうして作成された参照先要素だけでなく、xhtml:id属性値を持つすべての要素を参照先要素として扱います。したがって、たとえば

JustoFitで正しく参照や更新を行うことができます。

いろいろな記述例

CSSの相互参照を直接書いたり読んだりするときの参考として、いくつかの記述例を以下に示します。

相互参照を記述するには、CSS3で拡張されたcontentプロパティを使います。

以下、上記で相互参照先URIをxhtml:href属性に書いたものと仮定します。

テキスト参照

参照先のテキストをコピーしてきたい場合は、xhtml:style属性の中に書くなら以下のように記述してください(CSS3の記法に従い、「:」を「|」に変える点に注意)。

content: target-text(attr(xhtml|href, url));

ヘッダCSSに書くならたとえば以下のようになります。

xhtml|a { content: target-text(attr(xhtml|href, url)); }

必要に応じて、セレクタにクラスセレクタ・IDセレクタ・属性セレクタなどを併用して、もっと細かく条件を指定することも可能です。

ノンブル参照

相互参照先のノンブルをコピーしてきたい場合は、同様にCSS3に従って次のように書けます。

content: target-counter(attr(xhtml|href, url), page);

複合文字列生成

contentプロパティの値には、文字列を直接書くこともできますし、複数の構成内容を空白類文字(半角スペース等)で区切って指定することもできます。たとえば次のように:

content: target-text(attr(xhtml|href, url)) "(p." target-counter(attr(xhtml|href, url), page) ")";

相互参照元の記述例(href属性とattr()関数記法を利用)

○○については<xhtml:a xhtml:href="#ID4649" xhtml:style="content: target-counter(attr(xhtml|href, url), page) 'ページの「' target-text(attr(xhtml|href, url)) '」';"></xhtml:a>を参照してください。

相互参照スタイル

ヘッダに「相互参照スタイル」を作成しておき、各相互参照元インスタンスからはxhtml:class属性からそのクラスセレクタを呼び出すようにすれば、毎回長いcontentプロパティを書く必要がなく、以下のように、もっと記述をすっきりさせることができます。

. . .
<style>
   .page_and_text {
      content: target-counter(attr(xhtml|href, url), page) 'ページの「' target-text(attr(xhtml|href, url)) '」';
   }
</style>
. . .
○○については<xhtml:a xhtml:href="#ID4649" xhtml:class="page_and_text"></xhtml:a>を参照してください。
. . .

上記の規則では、参照先URIは必ずxhtml:href属性に格納されていることが前提です。

相互参照元の記述例(url()関数記法を利用)

下記のような指定のしかたもできます。

○○については<xhtml:a xhtml:style="content: target-counter(url(#ID4649), page) 'ページの「' target-text(url(#ID4649)) '」';"></xhtml:a>を参照してください。

CSSの中にURIを直接書き込んでいますので、この記法の場合、特殊な場合を除き、ヘッダCSSに書くことは現実的ではないでしょう。

相互参照先

一般の文書作成者は、ふつう相互参照先として「段落」や「テキスト範囲」を想定するものですが、CSS3は要素を相互参照先としてとらえます。

テキスト範囲を相互参照先にしたいときは、何らかの要素でその範囲をラップしてください。XHTML名前空間の要素にするならxhtml:spanが一般的でしょう。

段落を相互参照先にしたいときは、既存の段落要素か、JustoFitによって自動的に生成されるxhtml:p段落要素を参照先にしてください。

それ以外の要素(複数の段落をくくるセクション要素など)を相互参照先にすることもできます。

そしてそうして決定した相互参照先要素に、xhtml:id属性を付与し、適当なIDを与えてください。IDは文書内で一意である必要があります。例:

xhtml:id="myID"

※他文書への相互参照は未実装です。いずれ拡張する予定です。

相互参照先の要素の記述例:

<xhtml:span xhtml:id="referree">相互参照先見出し</xhtml:span>



Copyright (C) 2007-2008 UNIT, Ltd. All Rights Reserved.