Wordの相互参照機能は、ページ物の文書作成にはとても便利な機能です。ただ、仕様的に固有のクセがあるので、利用する場合には特別に注意すべきポイントがあります。これを知らずに使うと、文書が大きく壊れるような結果になってしまうのです。
ここでは、相互参照の仕組みと、利用する場合の注意事項を説明します。
相互参照の機能と仕組み
相互参照を使うと、別の箇所のタイトルやページ番号を埋め込めます。後で参照先の情報が変わっても最新状態に更新できるので、ページ量があって内容の変更が多い文書作成には大変助かります。ハイパーリンクにできるので可用性も優れています。
参照先にブックマークが設置され、参照元にはそのブックマークを参照するREFフィールドが挿入されるという仕組みです。ブックマークのIDは自動で設定されます。
相互参照のトラブル要因
「相互参照が壊れる」と前述しましたが、実はデータとしては壊れてはいません。壊れたとしか見えない状態になる、というのが正確です。
トラブルは、ブックマークの設置箇所でユーザーの編集時に発生し、相互参照の挿入箇所でフィールドの更新時に出現します。発生と出現の場所やタイミングが異なるので、因果関係に気づきにくいのが厄介です。
相互参照ブックマークの特性
要因①: 文書上では見えない!
ユーザーが設置するブックマークとは別種の、特殊な隠しブックマークが設置されます。オプションの詳細設定の [ブックマークを表示する] を有効にしても、隠しブックマークは表示されません。
つまり、編集する箇所に相互参照ブックマークが設置されていないか(参照先になっていないか)、編集の結果にブックマーク範囲が不正になっていないかをその場で確認できないのです。
要因②: 1段落のテキスト範囲(段落記号を含まない)に設置される
ブックマークは複数段落の範囲にも設置できるのですが、相互参照ブックマークが設置されるのは1段落の段落記号を含まない範囲です。これで、段落テキストのみ(段落の書式などを除外した情報)が渡されます。
編集によってこの状態が壊れると、相互参照が正しく機能しなくなるのです。
問題は、テキストを編集するときのブックマーク範囲とカーソルの位置関係です。
トラブル発生パターン1 : 先頭に段落を追加したときに起こること
実は、段落先頭に置いたカーソルは、ブックマーク範囲に対してこの位置になっています。
ここに段落を挿入することで起きた現象を順を追って説明します。
- ブックマーク範囲内に段落記号が挿入され、相互参照ブックマークは本来1段落のはずが2段落の範囲になった
- REFフィールドには「追加の段落記号+元のテキスト」が渡されるようになり、段落が分断された
- 渡された段落記号が持つ段落スタイルが、REFフィールド前の段落全体に適用された
段落先頭に限らず、テキストの途中(ブックマーク範囲の中)で段落を挿入した場合も、同様の結果になります。
入力したのがテキストならば、「追加テキスト+元のテキスト」で参照元が正しく更新される仕組みなのですが、段落を挿入するとこの仕組みが裏目に出てしまう、というわけです。
このトラブルの対処方法
原因箇所がわからなくなってから問題に気づいた場合は、次の手順でリカバリーできます。
トラブルの相互参照箇所を右クリックし、[フィールドコードの表示/非表示]をクリックする
{ REF _Ref76139684 \h } のようなREFフィールドが現れます。
[挿入]タブの[ブックマーク]をクリックし、ブックマークダイアログボックスを表示する
[自動的に挿入されたブックマークを表示する]をチェックする
相互参照のブックマークIDがリストに現れます。
トラブル箇所と同じIDのブックマークを削除する
トラブル箇所のREFフィールドを削除し、相互参照を挿入し直す
トラブル発生パターン2 : 末尾にテキストを追加したときに起こること
今度は、相互参照先の段落末尾(段落記号の前)にカーソルを置き、テキストを追加してみます。そのあとで相互参照フィールドを更新するとどうなってしまうでしょう?
結果は…変わらないのです。ビフォー・アフターが同じです。パターン1のように大きく崩れることはありませんが、参照先のテキスト変更を自動反映するという相互参照の本来の用途が機能していません。
実は、段落末尾に置いたカーソルは、ブックマーク範囲に対してこの位置になっています。
パターン1とは真逆で、ブックマーク範囲の外に追加テキストが挿入されてしまうのです。
つまりこちらは、入力したのが Enter (段落挿入)ならば、参照先段落が増えたりしない仕組みなのですが、テキストを挿入するとこの仕組みが裏目に出てしまう、というわけです。
相互参照トラブルを回避するには
段落に対して相互参照ブックマークの有無が確認できないので確実な回避策はないのですが、例えば次のような運用でリスクを軽減できます。
トラブル防止のための編集ルールを設ける
- 相互参照で参照先にする段落スタイルを特定する(見出し 1 ~ 3 のみ など)
該当スタイルには相互参照ブックマークがあるかもしれないという前提で操作する - 該当スタイルの段落末尾以外への段落挿入は禁止
- 該当スタイルの内容の変更は末尾文字より手前を書き換えた後で不要テキストを削除する
相互参照の挿入は、できるだけ後工程で行う
相互参照の使用箇所がわずかな場合は、相互参照機能は使わず手入力で妥協する
または、見えないブックマークを見える化してしまう、という対策もできます。