組版結果の自動分析の例：MobyDick『白鯨』
はじめに

2

組版結果の自動分析2

分析レポート4

シナリオ

6

Moby-Dick『白鯨』を組版

7

エラーを修正11

ステージ１： 行

12

ステージ２： 段落ウィドウ１

13

ステージ３： 段落ウィドウ２

14

例外ハイフネーション

15

ノーブレークスペース（非分割空白）の追加

16

単一ハイフンを無効に

18

hyphenation-push-character-count を変更

19

未修正の段落ウィドウ

20

ステージ ４：行頭または行末で同じ単語の繰り返し

21

ノーブレークスペース（非分割空白）の追加

21

単語間の空白を調整

22

ステージ５：連続するハイフン

24

ハイフン付けされた単語のハイフネーションを無効に

24

単一の単語のハイフネーションを無効に

24

ステージ６：空白25

空白のチェックを部分的に無効に

26

空白の限界値26

文字間の空白を調整

27

別の段落を変更

29

文字間の空白と単語間の空白

30

ステージ７：リバー（川）30©2020-2021 Antenna House, Inc.

1

Automated Analysis Example: Moby-Dick

リバー（川）の限界値

31

複数の単語をまとめる

31

ステージ８： 行の前後

31

widows ・ orphans プロパティを設定

32<fo:block> で強制的に改ページ

33

ステージ 9: 不均衡な見開きページ

34

終わりに

35

参考文献

36

はじめに
Antenna House Formatter V7.1 は、組版したドキュメント内のさまざまな印刷上の問題を自動的に検出できます。これらの問題を解決するには、通常、編集上
またはスタイル上の変更が必要であり、場合によってはその両方が必要になります。組版結果の自動分析は、長いドキュメントでは非常に役立ちます。短いドキュメントの場合、ユーザーは数ページを見ただけですべての問題を見つけられるだろうと判断するでしょう。
ここで取り上げる例は、ハーマン・メルヴィルの Moby-Dick『白鯨』のアメリカ版の初版の模倣です。Moby-Dick『白鯨』が選ばれたのは、以下の理由からで
す。
·
·
·
·
·

Moby-Dick『白鯨』 は、EPUB および CSS のサンプル ドキュメントとして頻繁に使用されています。
組版すると約 650 ページになるので、各ページを目視で検査するよりも自動分析の方が速く、一貫性も高くなることは明らかです。
この本は著作権が切れています。
テキストは XML 形式で無料で入手できます。
元文書のスキャンはウェブ上で入手可能です。 (1) (2)

このドキュメントでは、さまざまなエラー タイプに対して別々の段階で行われる分析と修正について説明します。これは単に説明をしやすくするためです。
実際には、エラーは任意の有効な順序で修正できます。

組版結果の自動分析
英語を含む言語には、組版したテキストのスタイルに関する慣例があります。
慣例の起源は、読みやすさ、美観、商業上の理由、またはこれらの組み合わせである可能性があります。現在では、根本的な理由を参照せずに、単に優れたデザインと見なされているものもあります。タイポグラフィやブックデザイン©2020-2021 Antenna House, Inc.

2

Automated Analysis Example: Moby-Dickに関する本では、通常、考えられる一連の問題が取り上げられていますが、参考書でも、問題と見なされるもの、問題になる条件の限界値、さらには問題を説明する用語が異なります。
Antenna House Formatter V7.0 で導入され、V7.1 で拡張された自動分析機能 (3)は、さまざまなエラー状態を検出できます。
·

巻末の空白ページが多すぎる
書籍の印刷および製本方法によっては、書籍のページ数が 8、16、32 の倍数、またはそれ以上になる場合があります。force-page-count プロパテ
ィの拡張により、Antenna House Formatter V7.1 ではこれが可能になります。ただし、ページ数の強制により、要件を満たすためだけに文書の最後に空白ページが残る場合があります。空白ページは出版社にとってコストがかかるだけで、確かなメリットはほとんどありません。

·

末尾がハイフンで終わる行が連続する
ハイフンで終わる連続行が多すぎると、読者が行を読み飛ばしたり、同じ行を 2 回読んだりする可能性が高くなります。Chicago Manual of Style（第 17 版） (4) と Elements of Typographic Style (5) はどちらも、ハイフンで終わる連続行を最大 3 行までと推奨しています。

·

同じ単語で始まる、または終わる連続した行が多すぎる
これは、ハイフンで終わる連続した複数の行の問題に似ています。同じ単語で始まる連続した複数の行、または同じ単語で終わる複数の行があると、読者はテキストの行を飛ばしたり、行をもう一度読み直したりする可能性があります。Chicago Manual of Style (第 17 版) では、同じ単語で始まるか終わる行は最大 3 行までと推奨されています。Book Typography(6) では、同じ単語で終わる複数の行に対して警告していますが、制限は示されておらず、同じ単語で始まる行についても言及されていません。

·

ブロックの前後の行数
章が新しいページで始まらない場合、章の見出しの前または後に最低限の行数が必要になることがあります。Book Typography では、章の見出しの上下に少なくとも 3 行必要だと推奨されています。これは通常、
widows プロパティと orphans プロパティを使用して強制できますが、たとえば前の章が短いセリフで終わる場合は強制できません。

©2020-2021 Antenna House, Inc.

3

Automated Analysis Example: Moby-Dick·

ページウィドウ
ページまたは段の最初の行として組版された段落の最後の行が短いと、読みやすさに影響する可能性があります。

·

段落ウィドウ
段落の最後の行が短いと、読みやすさに影響する可能性があります。また、段落ウィドウが多すぎると、ドキュメントに余分なページが追加され、コストがかかる可能性があることも考慮する必要があります。

·

River リバー（川）リバー（川）は、連続する行の空白が重なり合うか、ほぼ重なり合う場所に発生します。リバー（川）は、片側または中央揃えのテキストよりも、両端揃えのテキストで発生する可能性が高くなります。空白のリバー（川）が大きい、または長い場合、テキストの理解が妨げられる可能性があります。リバー（川）に対する感受性は人によって異なりますが、失読症などの特定の認知障害を持つ人にとっては問題となることはよく知られています。

·

不均衡な見開きページ
見開きページの本文領域の長さが同じであることは、美観上の要件である場合があります。ただし、初版には不均衡な見開きが複数あります。

·

空白
単語間の空白が多すぎると読みにくくなる場合があります。

分析レポート
自動分析によって発見された問題はログメッセージとして報告されます。
GitHub (7) の Antenna House の 「analysis-utility」プロジェクトでは、エラーログとドキュメントを処理して分析レポートを生成するか、エラーの場所を示す注釈を付けて組版したドキュメントのコピーを生成するスクリプトを提供しています。
分析レポートは次の内容で構成されています。
··

組版したファイルと見つかったエラーに関する情報の概要。
組版したドキュメントの各ページのサムネイル。エラーのあるページのサムネイルには赤い枠線が表示されます。枠線の濃さは、ページ上のエ©2020-2021 Antenna House, Inc.

4

Automated Analysis Example: Moby-Dick·

ラーの数に比例します。PDF リーダーで表示すると、各サムネイルにそのページのエラーの概要を示すツールヒントが表示され、エラーのある
各ページのサムネイルには、そのページの拡大画面へのリンクが表示されます。
エラーのあるページ 画面のペアと、そのページ上にエラーの一覧を出します。片方のページにしかエラーがない場合でも、両方のページが表示されます。エラーの場所は、エラー一覧のエラー番号に対応する吹き出しとともに、ページ画面に表示されます。エラー表示と吹き出し番号は、区別しやすいように一連の色で表示されます。吹き出し番号とエラー表
示の色は、見開き 2 ページにわたって継続されるため、両方のページで同じ番号と色が繰り返されることはありません。PDF リーダーで表示すると、各吹き出し番号にエラー情報を示すツールヒントが表示されます。
さらに、各吹き出しはリスト エントリにリンクされ、各リスト エント
リの番号はページ画面の吹き出しにリンクされます。

各タイプのエラーは、PDF レポート内の個別のレイヤーにあります。レイヤー
はデフォルトで表示されます。レイヤーをオフにすると、そのエラーはサムネ
イルのボーダーに影響しなくなり、そのエラーは大きなページ画面やエラー リ
ストに表示されなくなります。

©2020-2021 Antenna House, Inc.

5

Automated Analysis Example: Moby-Dick

SummaryThumbnails

Spreadシナリオ
起こりうるエラーを見つけて修正するための一般的なプロセスは次のとおりです。
1. TEI でエンコードされた XML は XSL-FO に変換されます。
2. GitHub リポジトリにある‘analysis-utility’の analyzer.bat ファイルを
XSL-FO で実行して、次のものを生成します。
· 組版結果の PDF· 分析エラーの PDF レポート

©2020-2021 Antenna House, Inc.

6

Automated Analysis Example: Moby-Dick

3. レポートを分析し、次の ひとつ以上の項目を調整します。
· オプション設定ファイル· ハイフネーション例外ファイル· XSL-FO· ソース XML
4. 満足のいく結果になるまで繰り返します。
連続的にファイルを変更することは、バッチ ファイルを使用して自動化されています。これにより、誰でも操作を繰り返すことができます。

Moby-Dick『白鯨』を組版
XSL-FO スタイルシートを用いて、Moby-Dick『白鯨』のアメリカ版初版の模倣を試みます。
組版はまだ進行過程です。スタイルの優先事項は、ブロックと 1 行あたりの文字数をほぼ正しくし、自動分析機能できるようにすることです。本の冒頭部分
や巻末の部分にはあまり注意が払われていません。
模倣は満足のいく正確さで、自動分析により、初版にも登場する「whale-」で終わる三つの連続した行を見つけることができます。(Chapter LXII, The Dart,
page 321.)
組版したドキュメントは、初版の再現または模倣であり複製ではありません。
特に、次の点が懸念事項です。
·

·
·

·

初版には明らかなタイポがいくつかあります。たとえば、xxi ページでは「the」の代わりに「tke」が使用されています。TEI ソース (8) XML には
タイポとその修正の両方が含まれており、組版出力には修正のみが表示されます。
初版と同じフォントを持っていません
初版の正確なページサイズ、フォントサイズ、行間隔などを測定することはできません。
o 利用可能なスキャンはそれほど正確ではありません。
o 初版のコピーも、それを購入するための 65,000 ドル (9)の余裕もありません。
初版では句読点の周りに余分な空白があり、今となっては違和感があります。
o 文章間の空白が広い
o 二重引用符の後に空白o ‘;’、‘?’、‘!’の前に空白©2020-2021 Antenna House, Inc.

7

Automated Analysis Example: Moby-Dick·

XML にエンコードされていない部分もありますが、欠落している部分は推測またはそれなりに捏造することができます。
たとえば、目次の後に来る「フライタイトル」にある本のタイトルは次のようになります。

ただし、このタイトルは XML では次のようにのみ記録されています。
<head>MOBY-DICK; OR, THE WHALE.</head>·

初版は手作業で作成され、組版を行う者は体裁を考え、一貫性にとらわれない構成にすることもできました。この例のように、すべての内容を正確に模倣する必要はありません。
たとえば、第 XCVII 章と第 XCVIII 章の最初のページを含む 2 ページの見開
きでは、第 XCVII 章の「章の区切り」が大きくなっています。これは、ページの下部に余白が多すぎるのを避けるためだと思われます。

©2020-2021 Antenna House, Inc.

8

Automated Analysis Example: Moby-Dick

冒頭部分の次の画像には、一連の引用と各引用の出典が示されています。
これらを組版するには、ある程度の論理がありますが、それが正確に何であったかを再現するのは難しいでしょう。

©2020-2021 Antenna House, Inc.

9

Automated Analysis Example: Moby-Dick

小さめな次の画像は、目次の一部分を示していますが、ここでは「theSamuel Enderby of London」の行の長さが長くなっています。これは、テキストを 3 行にするのではなく 2 行に収めるためだと考えられます。

©2020-2021 Antenna House, Inc.

10

Automated Analysis Example: Moby-Dick

エラーを修正エラーの検出と修正のプロセスは、個別の段階で行われるものとして説明されています。これは単にわかりやすい説明にするためです。実際には、エラーは任意の順序で修正できます (通常は前から後ろの順序で修正されます)。また、エラーを修正するための XSLT テンプレートは、この例で使用されている複数のスタイルシートではなく、ひとつのスタイルシートである場合が多くあります。
各段階のスタイルシートは、その前の段階のスタイルシートをインポートしま
す。Antenna House Formatter は、現在の段階と前の段階のすべてのオプション
設定ファイルを使用して組版を実行します。
ひとつのエラーを修正すると、他のエラーが発生する可能性があることに注意
してください。一般的に、エラーを修正する場合は、ドキュメントの先頭から始めて、後ろに向かって作業する方がよいでしょう。たとえば、改行を強制または回避するための変更 (同じ単語で終わる連続行が多すぎる場合など) は、ハ
イフンに関連する新しいエラーが発生したり、同じ単語で始まるまたは終わる
別の行が発生したり、複数のページにわたって改ページが変更されたりする可能性があります。
また、分析エラーとその修正は、ドキュメントの組版結果のうちのひとつに固有のものである可能性が高くなります。同じドキュメントを異なるフォント、フォント サイズ、行の高さ、またはページ サイズで組版すると、改行と改ぺージが異なります。分析エラーは異なる可能性があり、同じ修正を別の組版結果に適用すると、修正が別の組版結果に与える影響によっては、効果がないか、エラーが増える可能性があります。

©2020-2021 Antenna House, Inc.

11

Automated Analysis Example: Moby-Dick

各段階で、修正を含む XSL-FO ファイルがさらに処理され、上書きが適用された場所を示す変更バーが追加されます。変更バーは、組版したドキュメントの改行や改ページには影響しません。変更バーは別の手順で追加されるため、どのスタイルシートがどの上書きを追加したかを区別することはできません。そのため、たとえば、コアの「tei2fo.xsl」スタイルシートによって追加された
U+00A0 NO-BREAK SPACE 文字は、エラー修正段階のうちのひとつによって追加された U+00A0 と同じように報告されます。

次の節が示すエラー番号とスクリーンショットは、その時点で最新であったソース XML、スタイルシート、およびレポート ツールに基づいています。すべて変更される可能性があります。

ステージ１： 行
これは、他の段階と比較するときの基準となるものです。ソース XML は、コア
スタイルシートを使用して変換されます。XSL-FO は、デフォルトのオプションを使用して、ハイフネーション例外を使用せずに組版されます。

スタイルシートが改善されるとページ数は確実に変わるため、「Blank pages atdocument end（ドキュメントの最後に空白ページがあります）」というエラーは無視できます。

©2020-2021 Antenna House, Inc.

12

Automated Analysis Example: Moby-Dick

ステージ２： 段落ウィドウ１
段落の空白部分は、明らかにステージ１にある最も一般的なエラーです。
Antenna House Formatter V7.1 のデフォルト設定では、段落の最後の行が 2.5em(フォント サイズの 2.5 倍) またはブロックの幅の 15% 未満の場合、段落の空白部分が報告されます。
初版の段落ウィドウのうち、どの段落が出版社によって許容可能とみなされ、どの段落が単に避けられないものであったかは推測することしかできません。
初版の段落ウィドウ (およびそのページ番号) のうち、現在の組版結果でも発生するものは次のとおりです。
·
·
·
·
·
·
·

way. (pg 54)
me.’ (pg 287)
it.’ (pg 292)
whales. (pg 294)
him. (pg 306)
be seen. (pg 308)
ghost!” (pg 310)

初版の他の段落ウィドウには次のものがあります。
· now. (pg 213)
· lar. (pg 285, ‘vernacular’をハイフネーション)· in. (pg 287)
値を探るために、一旦「him.」の 16.8 ポイントの幅が段落ウィンドウの最小幅であると仮定します。

©2020-2021 Antenna House, Inc.

13

Automated Analysis Example: Moby-Dick

これを 16pt、または 8pt フォント サイズで 2em に切り捨てて、オプション設定
ファイルの analysis-settings で値を指定します。
<analyzer-settings paragraph-widow-limit-em="2" paragraphwidow-limit-percent="0" />現在のスタイルシートでは、段落ウィドウの数が約 40 に減ります。

ステージ３： 段落ウィドウ２
段落の空白部分の長さに適切な限界値を指定すると、エラー数が大幅に減少しました。残りのエラーには個別の解決策が必要です。使用できるテクニックはいくつかあります。それでも、段落の空白部分の一部は避けられないものとして受け入れる必要があるかもしれません。

©2020-2021 Antenna House, Inc.

14

Automated Analysis Example: Moby-Dick

例外ハイフネーション
単語の不適切なハイフンの挿入により段落ウィドウが生ずることがあります。

単語をハイフンで区切るべきではない場合、または単語のその位置でハイフン
区切りをするべきではない場合、その単語をハイフン辞書に追加できます。
XML ファイル内のハイフネーション辞書には、複数のコンポーネントがあります。その主なコンポーネントは、例外辞書を構成する単語のセットです。各単語は、単語をハイフンでつなぐことができるすべてのポイントに <hyphen/> またはハイフンを持っています。例外辞書は、これらの単語のアルゴリズムによるハイフネーションを上書きします。
Antenna House Formatter は、共通フォルダにある言語固有のハイフネーション
辞書を自動的に使用します。フォルダの場所は次のうちのいずれかです。
···-hypdic を使用して AHFCmd コマンドラインで指定されたフォルダ。
AHF71_HYPDIC_PATH (64 ビット版の場合は AHF71_64_HYPDIC_PATH) 環境
変数で指定されたフォルダ。
Antenna House Formatter インストール フォルダ内のハイフネーション フ
ォルダ (Windows 以外のバージョンでは etc/hyphenation)。

XSL-FO を用いて組版する場合、axf:hyphenation-info を使用して、XSL-FO ファイ
ルの fo:declarations 内にハイフネーション情報を含めることができます。
axf:hyphenation-info には例外辞書を含めることができ、外部のハイフネーショ
ン辞書を参照することもできます。fo:declarations には複数の axf:hyphenationinfo を含めることができます。
「Jonah」が初版に 85 回登場するのは驚くことではありません (目次にも登場します)。「Jonah」をハイフンで区切らないことに決めたので、このハイフンで区切らない単語を XSL-FO ファイルの axf:hyphenation-info に追加できます。

©2020-2021 Antenna House, Inc.

15

Automated Analysis Example: Moby-Dick<axf:hyphenation-info language="eng"xmlns:axh="http://www.antennahouse.com/names/XSL/Hyphenations"><axh:exceptions>Jonah</axh:exceptions></axf:hyphenation-info>
結果は次のようになります。

実際に、これは第 9 章の「Jonah」がハイフンで区切られた 2 行にも影響を及ぼしました。
第 9 章にはハイフンで区切られた「Jonah’s」も含まれていました。これが例外
辞書に追加されると、Knuth-Plass の「Breaking Paragraphs into Lines」(BPIL) 機能
によって段落全体の改行が最適化されるため、段落の 5 行が変更されました。
これによって新たなエラーは発生しませんでした。
例外辞書に追加された単語には、「humbug」や「Hussey」などがあります。

ノーブレークスペース（非分割空白）の追加
段落の最後に短い単語があると、段落ウィドウが発生することがあります。

単一の単語の段落ウィドウを回避する ひとつの方法は、単語の前の空白をノーブレークスペース（非分割空白）に変更することです。Antenna House
Formatter は、その時点では行を分割しなくなるため、前の単語の末尾の前で改行が行われるようになります。前の単語をハイフンで区切ったり、前の単語の前で改行したり、BPIL 機能が段落の新しい改行を最適化するときに複数の単語を次の行に移動したりすることができます。

©2020-2021 Antenna House, Inc.

16

Automated Analysis Example: Moby-Dick

マークアップにおける最小限の変更は、「 it. 」が「&#xA0;it. 」になることです。
ここで、&#xA0; は U+00A0 NO-BREAK SPACE 文字への数値文字参照です。
変更はソース XML で行うことができます。通常の空白をノーブレークスペース（非分割空白）に変更することは、結局のところ、小さな目に見えない変更です。ただし、· XML は元の XML と同期しなくなりました。何らかの理由で XML の正式なバージョンが変更された場合は、ノーブレークスペース（非分割空白）の変更を再度適用する必要があります。
· ノーブレークスペース（非分割空白）は、ソース XML のほかの組版では必要ない可能性が高いです。段落の末尾のノーブレークスペース（非分割空白）が問題になることはまずありませんが、発生する可能性はあります。さらに、ブロックの途中にノーブレークスペース（非分割空白）を追加することで回避できるエラーが他にもありますが、それらのノーブレークスペース（非分割空白）は再組版で問題を引き起こす可能性が高くなります。
· 通常の空白の代わりにノーブレークスペース（非分割空白）を使用すると、XML のテキスト検索で問題が発生する可能性があります。Moby-Dick『白鯨』で「it.」が使われている箇所をすべて見つけたいと思うのは熱
心なメルヴィル研究家でしょうが、一般的な原則として、可能であれば元のテキストを変更しない方がよいでしょう。
· テキストの変更ではなくスタイルの変更を伴う解決策、およびエラーの解決策が他にもがあります。XSL-FO を変更するのと同じ一般的な手法を使用して、組版ごとに必要な場所にノーブレークスペース（非分割空白）を追加できます。
一般的に、XSL-FO を作成時に変更するか、または組版前に XSL-FO を後処理して変更する方が、より良い解決策となります。
最初の手順は、変更する場所を特定することです。Oxygen XML エディターには、カーソル位置にあるノードの XPath をクリップボードにコピーする「Copy
XPath 」機能があります (他のエディターにも同様の機能があるかも知れません)。

2 番目の手順は、その XPath に一致し、そのノードの既定の処理を上書きする
テンプレート ルールを追加することです。現在のステージのスタイルシートが©2020-2021 Antenna House, Inc.

17

Automated Analysis Example: Moby-Dick

前のステージのスタイルシートをインポートするように実装し、各ステージに前のステージで行われた変更が含まれます。スタイルシートをインポートするための XSLT ルールは、現在のスタイルシートのテンプレートが、前のスタイル
シートの対応するテンプレートを自動的に上書きすることを意味します。
「 it. 」を「&#xA0;it. 」に変更するためのテンプレート ルールは次のように簡単です。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[59]/p[11]/text()"><xsl:value-of select="replace(., ' it\.$', '&#xA0;it.')"/></xsl:template>
Oxygen は、match 属性の値 (「/text()」まで) を提供しています。一致させる文
字列は「 it\.$」です。これは、正規表現の「.」は任意の文字に一致するのに対し、「\.」は文字通りの「.」にのみ一致し、「$」はテキストの末尾に一致するためです。正規表現が段落内の他の場所にある「 it.」に誤って一致しないようにするために含まれています。
その結果は次のとおりです。

単一ハイフンを無効にハイフンで区切られた単語のうち、いくつかの文字が次の行に持ち越されると、段落ウィドウが発生することがあります。

同じ単語が同じ方法でハイフンで区切られて ブロックの途中に現れても、通常は問題にはなりません。

©2020-2021 Antenna House, Inc.

18

Automated Analysis Example: Moby-Dick

ノーブレークスペース（非分割空白）を挿入するのと同様に、U+2060 ZEROWIDTH JOINER 文字を挿入して、ハイフンの不要な位置で文字をひとつにまとめることができます。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[29]/p[9]/text()"><xsl:value-of
select="replace(., 'retreated\.$','retrea&#x2060;ted.')" /></xsl:template>
複数の音節を持つ単語の場合、改行が単語の前のほうで行われることがよくあります。最終行の文字は段落ウィドウの限界値よりも長くなっています。

hyphenation-push-character-count を変更
XSL 1.1 には、次の行に追い出す文字の最小文字数を制御するためのhyphenation-push-character-count プロパティがあります (また、ハイフンの前に残せる最小文字数を制御するための hyphenation-remain-character-count プロパ
ティもあります)。ハイフン付けされた単語の後半のいくつかの文字 (および後続の句読点) で構成される段落ウィドウは、hyphenation-push-character-count プ
ロパティを指定することで修正できます。
段落に hyphenation-push-character-count プロパティを指定すると、段落のテキ
スト全体に影響することに注意してください。これにより、他の単語のハイフ
ネーションも抑制され、段落全体の外観に影響する可能性があります。

<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[64]/p[56]/text()"><fo:wrapper hyphenation-push-character-count="5"><xsl:next-match /></fo:wrapper></xsl:template>©2020-2021 Antenna House, Inc.

19

Automated Analysis Example: Moby-Dick

未修正の段落ウィドウ
段落ウィドウを修正しない理由はいくつかあります。たとえば、次のとおりです。
· ウィドウの幅が限界に近づいています。
次のスクリーンショットの「this:」は、2em の限界値よりわずかに小さいだけです。

·

初版にウィドウが存在する。
すべての文書でこの言い訳が使えるわけではありませんが、歴史的正確さを保つために段落ウィドウの部分をそのまま残すこともできます。

©2020-2021 Antenna House, Inc.

20

Automated Analysis Example: Moby-Dick

ステージ ４：行頭または行末で同じ単語の繰り返し
連続する行の先頭または末尾に同じ単語が繰り返されると、読みやすさに影響する可能性があります。連続する行の区切りの両側にある単語は一緒に意味を成すため、読者が誤って行をスキップしたり、行を再度読み直したりする可能性があります。
段落ウィドウを修正するのと同じ手法を用いて、繰り返す単語を修正できます。

ノーブレークスペース（非分割空白）の追加
段落ウィドウを修正する場合との違いは、一致させる正規表現を「$」を使用
してテキストの末尾に固定しないことです。したがって、 ブロックに不要な非改行空白が散らばらないように、一意の文字列に一致させるようにさらに注意する必要があります。
ここでは、「to」が 3 行の行末で連続しています。

このテンプレートルールでは次の 3 行のみを変更しました。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[3]/p[45]/text()"><xsl:value-of select="replace(., 'to be', 'to&#xA0;be')"/></xsl:template>©2020-2021 Antenna House, Inc.

21

Automated Analysis Example: Moby-Dick

比較してみると、このテンプレート ルールは、「to be」だけではなく、すべての「to」に一致します。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[3]/p[45]/text()"><xsl:value-of select="replace(., 'to ', 'to&#xA0;')" /></xsl:template>
6 行を変更し（次のページの 2 行も含め)、単語間の空白を増やしました。

単語間の空白を調整
単語間の空白を最小限に変更するだけで、改行位置を変更するのに十分な空白を追加できます。段落全体に適用される小さな変更は、Antenna House
Formatter が単語を分割したり単語間で分割したりするのを止めるよりも目立たない場合があります (ただし、Antenna House Formatter V7.1 の BPIL 機能は、行
単位のアルゴリズムよりもこれを適切に処理します)。単語間の空白を変更すると、かなりの数の単語がある長い段落で明らかに効果的です。
追加する単語間の空白の量は、段落のテキストと 1 行あたりの文字数の両方によって異なります。テキストの「色」（文字の黒色と文字間の空白の白色、文字の周囲の空白の白色とのバランス）が変わりすぎないようにするには、必要な効果が得られる最小の値にする必要があります。最小の有効値を決定するには、複数回の試行が必要になる場合があります。「em」単位の空白は、フォント サイズの観点から空白の目安として役立ちます。
この例では、段落の 5 行目から 7 行目の先頭に「and」が連続しています。

©2020-2021 Antenna House, Inc.

22

Automated Analysis Example: Moby-Dickword-spacing は継承プロパティなので、段落に fo:block のプロパティを設定
すると、この fo:block も他の段落と同じ属性を使用します。
<xsl:template ｓmatch="/TEI/text[1]/body[1]/div[1]/div[13]/p[5]"><fo:block word-spacing.minimum="0.03em"
xsl:use-attribute-sets="p"><xsl:apply-templates /></fo:block></xsl:template>
プロパティ値を設定すると、改行位置が変更されます。

©2020-2021 Antenna House, Inc.

23

Automated Analysis Example: Moby-Dick

ステージ５：連続するハイフン
ハイフンで終わる連続する行

ハイフン付けされた単語のハイフネーションを無効に
ハイフン付けされた単語がさらにハイフンで区切られることでエラーが発生する場合は、axf:hyphenate-hyphenated-word 拡張プロパティを使用して追加のハ
イフンを無効にできます。

<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[62]/p[2]"><fo:block axf:hyphenate-hyphenated-word="false"
xsl:use-attribute-sets="p"><xsl:apply-templates /></fo:block></xsl:template>

単一の単語のハイフネーションを無効に単語に複数のハイフネーション ポイントがあるが、単語をハイフネーションする必要がない場合は、その単語に対してのみハイフネーションを無効にすることができます。または、hyphenation-push-character-count または axf:hyphenatehyphenated-word を設定して、単語のアルゴリズムによるハイフネーションを変更して、ハイフネーションを禁止しないようにすることもできます。

©2020-2021 Antenna House, Inc.

24

Automated Analysis Example: Moby-Dick<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[133]/note[1]/p[1]/te
xt()"><xsl:analyze-string select="ahf:text(.)"
regex="comprehensively"><xsl:matching-substring><fo:wrapper hyphenate="false"><xsl:value-of select="." /></fo:wrapper></xsl:matching-substring><xsl:non-matching-substring><xsl:value-of select="." /></xsl:non-matching-substring></xsl:analyze-string></xsl:template>

ステージ６：空白
Antenna House Formatter V7.1 では、1 行内の極端に広い空白と、連続する行に連続する空白の両方を検出する機能が追加されました。
リバー（川）と空白の両方のデフォルトの限界値では、数千のエラーが生成され、ほぼすべての空白以外のページでエラーが報告されます。

ほぼすべてのページに不適切な空白がある状態では、Moby-Dick『白鯨』は販売されなかったでしょう。当時の出版社が不適切な空白スペースと見なしたもの
を正確に知ることはできません。ただし、組版された文書と元の文書の同一行を比較することはできます。空白エラーが報告された同一行は、出版社にとって許容可能であった (または避けられないものとして受け入れられた) に違いありません。

©2020-2021 Antenna House, Inc.

25

Automated Analysis Example: Moby-Dick

空白のチェックを部分的に無効に空白の限界値を増やして、残っているエラーをチェックすると、最も広い空白を持つ行のうち 25 行が目次の 2 ページにあることがわかりました。目次には、2 列の 2 ページに 135 の章とその章番号が記載されています。章のタイトルは、使用できる狭い幅内で揃えられているため、広い空白は避けられませんでした。
むしろ、組版したテキストの空白の幅は、元のテキストよりも狭くなっています。

Antenna House Formatter V7.1 は、分析を細かく制御するための拡張プロパティを用意しています。axf:analyze-white-space プロパティは、現在の FO で空白分析を実行するかどうかを指定します。目次で axf:analyze-white-space="none" を指定すると、空白エラーの分析を停止します。

空白の限界値
文書全体の空白の限界値は、fo:root に axf:analyze-white-space を指定するか、オ
プション設定ファイルで white-space を指定することで設定できます。
white-space="0.65em" を指定して (同一行の 1 つに 0.62em 幅の空白があったため)、再実行すると、エラーのある残りの同一行には 0.66em 幅の空白があることが示されました。

0.75em までの結果は©2020-2021 Antenna House, Inc.

26

Automated Analysis Example: Moby-Dick

初版は活版印刷で制作されました。活版印刷では、標準幅のさまざまな活字ブ
ロックから空白が構築されます。1885 年の The American Printer (10)からの抜粋
では次のように説明されています。

0.66em または 0.75em のどちらも、都合のよい妥当な限界値になります。
実際には、0.75em は便利すぎます。0.75em の空白は、この ひとつの厄介な行にのみ発生します。これは、「(Duodecimo.)」をうまく分割できないためです。
限界値が 0.75em の場合、空白エラーはほとんど報告されません。

文字間の空白を調整
空白に関して 2 番目に厄介な行には、Antenna House Formatter が行に単語を収めることができなかった 0.74em の空白がありました。

文字間の空白の調整に letter-spacing を使用することは、単語間の空白の調
整に word-spacing を使用する代わりに使用できます。この場合、文字間の空白を 0.0075em、0.75%、または 0.06pt (8pt フォント サイズの場合) だけ減©2020-2021 Antenna House, Inc.

27

Automated Analysis Example: Moby-Dick

らすだけで十分でした。段落全体の文字間の空白を調整する代わりに、最初の文の前半のテキストのみに上書きが適用されました。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[133]/p[16]/text()"><xsl:analyze-string
select="ahf:text(.)"
regex="Like noiseless nautilus shells, their lightprows sped through the sea;"><xsl:matching-substring><fo:inline letter-spacing.minimum="-0.0075em"><xsl:value-of select="." /></fo:inline></xsl:matching-substring><xsl:non-matching-substring><xsl:value-of select="." /></xsl:non-matching-substring></xsl:analyze-string></xsl:template>
この例では、広い空白は 0.70em です。letter-spacing.minimum="-0.005em" を段落全体に適用すると、「though」は 1 行目まで引き戻され、2 行目は「no」で終わります。値が -0.0075em の場合、「agent」は 6 行目まで引き戻され、改行は「wholly」がハイフンで区切られていることを除いて、初版と同じです。値が -0.011em の場合、改行は初版とまったく同じです。

©2020-2021 Antenna House, Inc.

28

Automated Analysis Example: Moby-Dick

別の段落を変更
ここでは、改ページ前の最後の行に 0.69em の空白があります。次のページの最初の単語は「incompetence」です。改ページ前の 4 行は、「incompetence」
を改ページ前に引き戻すほど十分に圧縮できません。ページはハイフンで終了
してはならないため、「incompetence」もページをまたいで分割できません。
改ページ前にもう 1 行ある場合、「incompetence」がページの最後から 2 番目の行と最後の行をまたいで分割されても問題はありません。

解決策は、前の段落を修正して、1 行少なくし、改ページ前にもう 1 行分の空
白を残すことでした。204 ページから始まる段落は 44 行 (約 1 と 1/4 ページ) を占め、最後の行に「able object.」と書かれています。letter-spacing.minimum="0.006em" をその段落に適用すると、43 行になります。ページの残りの行は上に移動し、次のページから 1 行余分に取得してそのページを埋めます。次のページでは、問題の段落の 1 行余分に 2 ページ目から取得します。Antenna House
Formatter は、「incompetence」のハイフン付けを避ける必要がないため、段落を別の方法で組版します。

このような行が失われると、サイクルを破る何かが起きるまで、後続のすべてのページに波及効果が生じる可能性があります。これは、たとえば、新しいページで始まる章や、widows または orphans プロパティの制約に違反するため 1
ページ戻すことができない行などです。この変更によって、新しい分析エラーが発生する可能性もあります。

©2020-2021 Antenna House, Inc.

29

Automated Analysis Example: Moby-Dick

この変更は、改ページで 78 ページに渡って影響しました。改ページでは、1
行戻すと次のページの上部に 1 行分のウィドウ行が残ることになります。ページ間で引き出される行数はかなりばらつきました。ひとつのページから前のページに 8 行も引き出されました。この数は、以前は段落が短かったために段落がページをまたいでから最小 2 行が表示されていた場合が増え、さらに行を引き出すと次のページの行数が少なすぎる段落の場合は減りました。章のタイトルが前のページに引き出された場合でも、この数が増えました。章の最後の章区切り（装飾文字）が前のページに引き出され、次の章のタイトルが元のページの上部に移動した場合は、この数が減りました。章区切り（装飾文字）の下には空白ができ、章のタイトルの上には、章区切り（装飾文字）の直後に章のタイトルがあったときよりも多くの空白がありました。
78 ページが変更されたにもかかわらず、新しいエラーは報告されず、リバー（川） エラーは 8 つ減少しました。

文字間の空白と単語間の空白
この引用文には 0.66em の空白がある行があります。(whales)を前の行に戻す解決策は、letter-spacing.minimum="-0.01em" と word-spacing.minimum="-0.02em" の両方を指定することでした。

ステージ７：リバー（川）リバー（川）は、修正するのが最も簡単なエラーであると同時に、最も難しいエラーでもあります。大きな段落で合計 3em を超えるリバー（川）は、最小単語間の空白を 0.2% 変更することで修正されました。他の段落では、すべての「単語間の空白」と「文字間の空白」の調整が新しいリバー（川）を引き起こ
すだけのように見えます。これは、短い単語を多く含む行がある段落に特に当てはまります。なぜなら、すべての変更によって、多くの空白が整列する可能性が高いからです。
リバーを修正するテクニックのほとんどは、これまでにも説明してきました。
つまり、「単語間の空白」と「文字間の空白」のひとつまたは両方を調整する
か、単語間に改行なしの空白を追加します。

©2020-2021 Antenna House, Inc.

30

Automated Analysis Example: Moby-Dick

リバー（川）の限界値
文書全体のリバー（川）の限界値は、fo:root で ‘axf:analyze-river’ を指定する
か、オプション設定ファイルで river を指定することで設定できます。この例では river="2.5em" を使用しており、時間の許す範囲で修正可能な範囲を超えるリバー（川）を検出せずに、最大のリバー（川）を検出しています。

複数の単語をまとめる
段落内に単一の U+00A0 NO-BREAK SPACE を追加する代わりに、連続する短い単語をまとめるために複数の U+00A0 を使用する場合があります。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[61]/p[6]/text()"><xsl:value-of select="ahf:no-break(., 'in the trough')"/></xsl:template>または、同じ段落内の異なる箇所に複数の U+00A0 を使用することもできます。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[3]/p[22]/text()"><xsl:value-of
select="replace(replace(ahf:text(.),'stood full','stood&nbsp;full'),'a coffer-dam', 'a&nbsp;coffer-dam')"/></xsl:template>

ステージ８： 行の前後章が新しいページで始まらない場合、章の見出しの前または後に最低限の行数が必要になることがあります。Book Typography (6) では、章の見出しの上下に少なくとも 3 行必要だと推奨しています。これは通常、widows および orphans
プロパティを使用して強制できますが、たとえば前の章が短いセリフで終わる
場合は強制できません。
fo:block に axf:analyze-lines-before または axf:analyze-lines-after を指定して、組版したブロックの前または後に必要な最小行数を設定します。これらは特定のブロックでのみ役立つため、オプション設定ファイルにはデフォルト設定として含まれていません。

©2020-2021 Antenna House, Inc.

31

Automated Analysis Example: Moby-Dickwidows ・ orphans プロパティを設定
章タイトルの後の最初の段落に orphans を設定し、各章の最後の段落に widowsを設定すると、報告されるエラーが 9 件から 1 件に減ります。
<xsl:templatematch="p[preceding-sibling::*[1][self::head][@type ='sub']]"><xsl:param name="atts" select="()" as="attribute()*" /><xsl:next-match><xsl:with-param name="atts" as="attribute()*"><xsl:attribute name="orphans"select="$analyze-lines-after" /><xsl:sequence select="$atts" /></xsl:with-param></xsl:next-match></xsl:template><xsl:templatematch="div[@type = 'chapter']/p[last()]"><xsl:param name="atts" select="()" as="attribute()*" /><xsl:next-match><xsl:with-param name="atts" as="attribute()*"><xsl:attribute name="widows"
select="$analyze-lines-before" /><xsl:sequence select="$atts" /></xsl:with-param></xsl:next-match></xsl:template>©2020-2021 Antenna House, Inc.

32

Automated Analysis Example: Moby-Dick

しかし、これは文書本体の 635 ページのうち 471 ページに影響し、他にもこの変更前にはエラーではなかったものがエラーになりました。これにより、新しいリバー（川）も発生しました。
widows の設定により、正しい行数に強制されました。

また、前のページから行を引き抜いてきたときに、不均衡な見開きページも作成されました。

<fo:block> で強制的に改ページ
章のタイトルの前に十分な行がない場合、前のページの 1 行以上を問題のあるページに転用することができます。バランスの悪いページの作成や、オーファ©2020-2021 Antenna House, Inc.

33

Automated Analysis Example: Moby-Dick

ン行やウィドウ行の問題を回避するために、問題のあるページの 2 ページ以上前のページの行を転用することが望ましい場合もあります。
空のブロック <fo:block/> は、強制的に改行するための一般的な手法です。ページの最後から 2 番目の行の末尾に <fo:block/> を配置すると、最後の行を次のページに強制的に移動できます。ただし、ブロックが両端揃えになっている場合、<fo:block/> のある行のテキストはブロックの最後の行として扱われ、両端揃え
ではなくなります。text-align-last="justify" を指定しても役に立ちません。
<fo:block/> の後の部分の最後の行も両端揃えになります。
解決策は、2 ページ目の部分を独自の fo:block で囲むことです。
<xsl:templatematch="/TEI/text[1]/body[1]/div[1]/div[51]/p[3]"><xsl:param name="atts" select="()" as="attribute()*" /><fo:block text-align-last="justify" xsl:use-attributesets="p"><xsl:copy-of select="$atts" /><xsl:variable name="text" select="ahf:text(text())" /><xsl:value-of
select="substring-before($text, 'so many sails,')"/><xsl:text>so many sails,</xsl:text><fo:block text-indent="0" text-align-last="left"><xsl:value-of
select="substring-after($text, 'so many sails,')"/></fo:block></fo:block></xsl:template>

ステージ 9: 不均衡な見開きページ
アンバランスな見開きとは、2 ページの見開きページがそれぞれ異なる行数で構成され、一方のページのテキストがもう一方のページのテキストよりも上に表示されることです。これがどの程度問題になるかについては意見が分かれています。Requirements for Latin Text Layout and Pagination (LatinReq) (11) には、“The Classical Rules of Hyphenation and Pagination”（ハイフン付けとページ付けの古典的な規則）として次の内容が含まれています。
>Balance facing pages by moving single lines.
1 行ずつ移動して見開きページのバランスをとります。
Book Typography (6)には次の内容が含まれています。

©2020-2021 Antenna House, Inc.

34

Automated Analysis Example: Moby-Dick>The depth of the text panel is kept consistent throughout the book. However, in the US,>some pages are set one line long or one line short as a way of manipulating the text
>and avoiding widows, orphans and bad word divisions.

テキスト パネルの深さは、本全体を通じて一定に保たれています。ただし、米国では、テキストを操作し、ウィドウ行、オーファン行、不適切な単語の分割を回避するために、一部のページが 1 行長くなったり 1 行短くなったりすることがあります。
初版には複数の不均衡な見開きページがありました。

終わりに
Antenna House Formatter V7.1 による組版上の問題の自動分析により、650 ペー
ジの本のさまざまな問題をすばやく簡単に検出できるようになりました。自動分析は、組版したページを目視で検査するよりも迅速かつ信頼性が高くなります。
エラーが見つかると、組版したドキュメントの XSL-FO ソースに適用される単純で繰り返し可能な変換によってプログラム的に修正され、元のソース XML は変更されませんでした。
ここで説明した手法を使用することで、報告されたエラーの数は 300 個以上か
ら 3 個に減少しました。そのうち ふたつのエラーは初版にも存在していました。
ｓ

次のテクニック、技法が有効です。
· ハイフネーション例外辞書に単語を登録して望み通りにならないハイフ
ネーションを例外扱いにします。
· 段落内の特定の単語の前にノーブレークスペース（非分割空白）を追加します。
· 段落内の特定の単語のハイフネーションを抑制するためにゼロ幅ジョイ
ナーを追加します。
· 単語をハイフネーションする必要がないとき hyphenation-push-charactercount を使用します。
· axf:hyphenate-hyphenated-word で、すでにハイフン付けされている語を
ハイフネーションしないようにします。

©2020-2021 Antenna House, Inc.

35

Automated Analysis Example: Moby-Dick

·
·
·
·
·
·

ハイフネーションを無効にするには hyphenate プロパティを使用します。
単語間の空白を調整して改行を制御します。
文字間の空白を調整して改行を制御します。
回避できないエラーを無視するには、axf:analyze-white-space="none" などの拡張プロパティを使用します。
エラーを含む段落で改ページが発生する場所を変更するために、前の段落を変更して行数を減らします。
段落内で強制的に改ページします。

分析エラーをチェックして修正する一般的な方法は次のとおりです。
1. ドキュメントのスタイルシートを確定します。修正を適用した後に基本スタイルを変更すると、修正が無関係になったり、新しいエラーの原因になったりするリスクがあります。テキストやスタイルの変更によって修正の一部が元に戻ってしまうほどエラーの修正に力を入れすぎていると思われる場合は、エラーの修正を開始するのが早すぎます。
2. ソース XSL-FO または HTML ドキュメントに対して分析ユーティリティを実行し、存在するエラーのベースラインを取得します。
3. 分析レポートを調べて、報告されたエラーの数と重大度を確認します。
4. 必要に応じて、分析ユーティリティ レポートに、利用可能な時間とリソースで修正する価値のあるエラーのみが表示されるまで、オプション設
定ファイルのエラー限界値を調整します。
5. ドキュメントの先頭から始めて、後ろに向かってエラーを順番に修正(または無視) します。最初に最も大きなエラーをいくつか修正したくなるかもしれませんが、他の修正を行ったときにそれらの修正が元に戻ったり、新しいエラーが発生したりする可能性があります。このドキュメ
ントの 1.5 語が前の行に戻されたために 78 ページが変更された例は、修正が意図した対象をはるかに超えて影響を与える可能性があることを示しています。
6. 変更によって新しいエラーが発生していないことを確認するために、ドキュメントを頻繁に再分析します。

参考文献
1. Melville Electronic Library. Moby-Dick Side-by-Side: The American And British First
Editions. Melville Electronic Library. (オンライン)
https://melville.electroniclibrary.org/moby-dick-side-by-side.
2. Indiana University. Moby-Dick, or, The Whale (PDF). Wright American Fiction. (オンライン) http://purl.dlib.indiana.edu/iudl/wright/printable/VAC7237.
3. Antenna House. Automated Analysis. Antenna House Formatter V7.1. (オンライン)
https://www.antenna.co.jp/AHF/help/en/ahf-analyzer.html.
4. The University of Chicago Press. The Chicago Manual of Style. Chicago and London :The University of Chicago Press, 2017.

©2020-2021 Antenna House, Inc.

36

Automated Analysis Example: Moby-Dick

5. BringhurstRobert. Elements of Typographic Style. Vancouver, BC, Canada : Hartley &Marks, 2001.
6. MitchellM. , WrightmanS. Book Typography: A Designer's Manual. Marlborough,Wiltshire : Libanus Press, 2005.
7. Antenna House. analysis-utility - Antenna House Formatter Analysis Utility. GitHub.
(オンライン) https://github.com/AntennaHouse/analysis-utility.
8. Indiana University. Moby-Dick, or, The Whale. Wright American Fiction. (オンライン) http://purl.dlib.indiana.edu/iudl/wright/encodedtext/VAC7237.
9. Raptis Rare Books. Moby Dick, or, The Whale Herman Melville First Edition Rare.
Raptis Rare Books. (オンライン) (引用日: 2020 年 October 月 19 日.)
http://web.archive.org/web/20201019122014/https://www.raptisrarebooks.com/pro
duct/moby-dick-or-the-whale-herman-melville-first-edition-rare/.
10. MacKellarThomas. The American Printer. Philadelphia : MacKellar, Smiths & Jordan,
1885.
11. W3C. Requirements for Latin Text Layout and Pagination. (オンライン) 2016 年
July 月 21 日. http://www.w3.org/TR/dpub-latinreq/.
12. Antenna House. Automated Analysis. Antenna House Formatter V7.0. (オンライン) https://www.antenna.co.jp/AHF/help/v70e/ahf-analyzer.html.

©2020-2021 Antenna House, Inc.

37