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


相互参照

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

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

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

ユーザーインタフェース

近い将来、JustoFitには相互参照を設定するための便利な「相互参照」パネルと「相互参照スタイル」パネルを用意する予定です。これにより、少なくともFrameMakerと同程度以上に便利な相互参照の運用が可能になるものと考えています。

しかし当面はまだこのユーザーインタフェースが用意できていませんので、相互参照機能を利用したい場合は、以下に示すように、XHTMLとCSS3を直接文書内に設定してください。

作成した相互参照を更新するには、「段落メタ」パレットのメニューで「メタ書式の適用...」コマンドを選択してください。すると、InDesign文書全体にメタ書式が適用されるとともに、相互参照も更新されます。

CSS3の相互参照

JustoFitは、CSS3のワーキングドラフト「CSS3 module: Generated Content for Paged Media」(http://www.w3.org/TR/css3-gcpm/)のとおりにXHTMLとCSSを書けば、それが相互参照として機能するようになっています。ただし目下JustoFitでは、CSS3のすべての相互参照機能が使えるわけではありません(近い将来にはすべてを網羅する予定です)。また、上記はワーキングドラフトであるため、いまだ規格としては未確定ということになっています。かつ、日本語に訳出された資料もまだ一般に供用されていないようです。

ですので以下にあらためて、JustoFitが解する、CSS3による相互参照の記述のしかたを示します。

相互参照先

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

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

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

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

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

xhtml:id="myID"

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

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

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

相互参照元

相互参照元には、空の要素を挿入してください。空でなくてもかまいませんが、その場合中身はあとで自動的に上書きされるので注意してください。XHTML名前空間の要素にするならxhtml:aが一般的でしょう。

その参照元要素に任意の名前の属性を与え、その中に相互参照先URIを書いてください。具体的には、「#」と相互参照先のID値を書いてください。XHTML名前空間の属性を使うならxhtml:hrefが一般的でしょう。例:

xhtml:href="#myID"

また、参照元要素にxhtml:style属性を付与してCSSを書くか、またはヘッダのCSS(最上位要素の子のxhtml:head要素の子のxhtml:style要素のテキスト)にその参照元要素がマッチするセレクタの規則を書いてください。

相互参照を記述するために、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に書くことは現実的ではないでしょう。



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