4.5.4. 単語・フレーズを強調する(3)ー 網掛けにする

 今度は網掛けを使ってみます。網掛けは、長方形を描画するbox フロー・オブジェクト・クラスを使い、背景を塗りつぶすことで実現できます。box フロー・オブジェクト・クラスは子の領域の周囲に枠線を描画します。子の領域は、表示領域・インライン領域のどちらであってもかまいません。box フロー・オブジェクト自身がどちらの領域になるかは、特質 display?: によって指定します。
 さて、box フロー・オブジェクト・クラスには3 つの描画タイプ ―― border(枠線のみ)・background(背景のみ)・both(枠線と背景) ―― があります。描画タイプは特質 box-type:で指定します。この特質の初期値は border です。

枠線の特性

 枠線の特性として、score フロー・オブジェクト・クラスで説明したものと同様の特質を指定できます。指定可能な特質は、 color:line-cap:line-dash:line-thickness:line-repeat:および line-sep: です。これに加えて特質 line-join: を使用することができます。
 line-join: は線の結合部の形状をあらわし、miterroundbevel のいずれかのシンボルを指定することができます。初期値は miter です。

背景の指定

 背景に関する特質は background-color:background-layer: の2つです。まず background-layer: ですが、これは背景のレイヤ(重なり順)の指定で、引数は整数値です。数値が大きいほど前面に、小さいほど背面に配置されます。初期値は-1で、通常他のオブジェクトの背面に配置されます。
 もう一方の background-color: では、背景を塗りつぶす際の色を指定します。色の指定は、色空間を決定し、そこから選択するという手順をとります。色空間を表すオブジェクトは次の式で取得できます。

(color-space string [...])

 string は色空間をあらわす識別子で、公開識別子として定義されている表4.2のいずれかを文字列として指定します。

表4.2 色空間公開識別子
ISO/IEC 10179:1996//Color-Space Family::Device Gray
ISO/IEC 10179:1996//Color-Space Family::Device RGB
ISO/IEC 10179:1996//Color-Space Family::Device CMYK
ISO/IEC 10179:1996//Color-Space Family::Device KX
ISO/IEC 10179:1996//Color-Space Family::CIE LAB
ISO/IEC 10179:1996//Color-Space Family::CIE LUV
ISO/IEC 10179:1996//Color-Space Family::CIE Based ABC
ISO/IEC 10179:1996//Color-Space Family::CIE Based A

 文字列の後に続くオプション引数は、文字列にどの公開識別子を指定するかによって指定内容が変化します。たとえば、文字列“ISO/IEC 10179:1996//Color-Space Family::Device RGB” を指定した場合であれば、引数はこの公開識別子だけで、他の引数はありません。
 手続き (color-space …) によって得られたオブジェクトは、次に説明する手続き (color …) で使用します。(color …) を記述するたびに、(color-space …) を毎回記述して color-space オブジェクトを取得するのは面倒ですから、以下のように変数で参照できるようにしておくとよいでしょう。

(define *device-rgb*
  (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB"))

 色そのものは(color color-space […]) という式で取得します。この式が必要とする引数は、選択した color-space に依存します。color-space が Device RGB の場合であれば、引数に R/G/B の各要素(値域は0.0~1.0)が必要になります。たとえば、シアンをあらわすオブジェクトを得たいならば、先程の変数定義と併用して

(color *device-rgb* 0 1 1)

として取得することができます。これも color-space と同様に

(define *cyan* (color *device-rgb* 0 1 1))

などとしておくとよいでしょう。

枠線・背景に共通の特性

 枠線・背景に共通の特性として、次のものがあります。

• 角の丸め

 特質 box-corner-rounded: で、角を丸めるかどうかを指定します。論理定数 #f の場合はどの角も丸められず、#t の場合はすべての角が丸められます。このほかに、シンボルのリストを指定して特定の角だけを丸めることも可能です。シンボルは x-y という形式で、x、yは before または after になります(図4.11)。
 また、角の丸みの半径を特質box-corner-radius:で指定することができます(図4.12)。引数はlength-spec で、初期値は3pt です。この値には負の値を指定することもできます。

• 長方形の高さ

 特質 box-size-before:およびbox-size-after:で、矩形の高さを調整することができます。それぞれ、配置パスからの距離をlength-spec で指定します。box-size-before:の初期値は8pt、box-size-after:の初期値は4pt です。この特質が適用されるのは、インライン領域の場合のみです。


図4.11 角の位置を表すシンボル      図4.12 角の丸みを半径で指定

DSSSL プロセッサによる違い
本書で解説しているフロー・オブジェクト・クラスはDSSSL の規格に定められているものですが、DSSSL プロセッサは必ずしもそれらすべてを実装しているわけではありません。サポートされていない機能を指定するとエラーになる場合もありますし、エラーにはならないもののフォーマット結果に反映されない場合もあります。
たとえば box-corner-rounded: を例にとると、Jade ではエラーにはなりませんが、RTF バックエンド用の出力には指定は反映されません(#f を指定した場合と同じ状態のまま)。一方、DSSSLprint では box-corner-rounded: の指定だけでは結果に反映されませんが、次のように拡張機能を有効にすると指定通りにフォーマットされます。

(declare-characteristic box-corner-rounded
 "UNREGISTERED::Next Solution//Characteristic::box-corner-rounded" #t)

<<prev      next>>