ハイフネーションの使用

文書内のテキストをよりコンパクトに配置するために、ハイフネーションの使用が必要になる場合があります。同時に、単語のハイフネーションの詳細は言語ごとに異なる可能性があることを理解することが重要です。

現在、ハイフネーションは、特に英語の文章では以前ほど頻繁に使用されていません。それにもかかわらず、この機能の使用はユーザーのドキュメントに重大な影響を与える可能性があります。ハイフネーションはレイアウトに影響を与え、その結果、PDF 形式などの出力ファイルの外観に影響を与えます。

単語を正しく分割するには、言語固有のハイフネーション辞書が使用されます。 Aspose.Words は高度なアルゴリズムを使用してこのような辞書を操作し、Microsoft Word と同じハイフネーションを取得できるようにします。

ハイフネーション辞書

言語が異なれば単語のハイフネーションに異なる基準やルールが使用されるため、正しいハイフネーションの最適な解決策は特別な辞書を使用することです。 Aspose.Words は OpenOffice 辞書を使用します。

OpenOffice はスペル チェックのために、TeX のハイフネーション アルゴリズムを一般化した Hunspellライブラリ を使用します。このアルゴリズムにより、競合する標準ハイフネーション パターンとカスタム ハイフネーション パターンを使用した自動非標準ハイフネーションが可能になります。 Hunspell はハイフネーションに ハイフン を使用します。

ハイフネーションアルゴリズム

Aspose.Words は TeX ハイフネーション アルゴリズム を実装しており、OpenOffice のハイフネーション辞書を再利用できます。

Aspose.Words アルゴリズムの次の機能を考慮する必要があります。

  • ハイフネーション辞書で指定されたハイフネーション距離パラメーター (LEFTHYPHENMIN、RIGHTHYPHENMIN、COMPOUNDLEFTHYPHENMIN、COMPOUNDRIGHTHYPHENMIN) は無視されます。 Aspose.Words は、ドキュメントの互換性モードに応じて、独自の距離パラメータのセットを使用します。
  • Aspose.Words のハイフネーション アルゴリズムは 複合ハイフネーション をサポートしています。ただし、Aspose.Words は、アルファベット文字と非アルファベット文字が混在する文字シーケンスをアルファベットのみの部分 (単語) に分割し、それらを個別にハイフネーションします。 複合語のハイフネーションの Microsoft Word ロジックはドキュメント互換モードに依存することに注意してください。
  • Aspose.Words のハイフネーション アルゴリズムは 非標準のハイフネーション を実装していません。標準以外のパターンは無視されます。

ハイフネーション辞書のロード

ハイフネーション機能を使用するには、まずハイフネーション辞書を登録します。次のコード例は、指定した言語のハイフネーション辞書をファイルからロードする方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(MyDir + "German text.docx");
Hyphenation.RegisterDictionary("en-US", MyDir + "hyph_en_US.dic");
Hyphenation.RegisterDictionary("de-CH", MyDir + "hyph_de_CH.dic");
doc.Save(ArtifactsDir + "WorkingWithHyphenation.HyphenateWordsOfLanguages.pdf");

次のコード例は、指定した言語のハイフネーション辞書をストリームからロードする方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(MyDir + "German text.docx");
Stream stream = File.OpenRead(MyDir + "hyph_de_CH.dic");
Hyphenation.RegisterDictionary("de-CH", stream);
doc.Save(ArtifactsDir + "WorkingWithHyphenation.LoadHyphenationDictionaryForLanguage.pdf");

ハイフネーション辞書を事前に登録する代わりに、「リクエストに応じて」必要なハイフネーション辞書のみを登録することも可能です。これを実現するには、IHyphenationCallback インターフェイスを実装し、静的コールバック Callback を使用します。

次のコード例は、IHyphenationCallback インターフェイスを実装する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public void HyphenationCallback()
{
try
{
// Register hyphenation callback.
Hyphenation.Callback = new CustomHyphenationCallback();
Document document = new Document(MyDir + "German text.docx");
document.Save(ArtifactsDir + "WorkingWithHyphenation.HyphenationCallback.pdf");
}
catch (Exception e) when (e.Message.StartsWith("Missing hyphenation dictionary"))
{
Console.WriteLine(e.Message);
}
finally
{
Hyphenation.Callback = null;
}
}
public class CustomHyphenationCallback : IHyphenationCallback
{
public void RequestDictionary(string language)
{
string dictionaryFolder = MyDir;
string dictionaryFullFileName;
switch (language)
{
case "en-US":
dictionaryFullFileName = Path.Combine(dictionaryFolder, "hyph_en_US.dic");
break;
case "de-CH":
dictionaryFullFileName = Path.Combine(dictionaryFolder, "hyph_de_CH.dic");
break;
default:
throw new Exception($"Missing hyphenation dictionary for {language}.");
}
// Register dictionary for requested language.
Hyphenation.RegisterDictionary(language, dictionaryFullFileName);
}
}

ハイフネーションのレイアウトへの影響

テキストを複数の行に分割するとき、Aspose.Words は各単語が現在の行に完全に収まるかどうかをチェックします。別の単語が長すぎて行末に収まらない場合、デフォルトでは、Aspose.Words はその単語をハイフンで区切らずに次の行の先頭に移動します。

ただし、Aspose.Words でハイフネーション機能を使用すると、単語にハイフンを挿入して、両端揃えのテキストのギャップをなくしたり、狭い列で均等な行の長さを維持したりできます。これは明らかに行数、つまりページ数に影響を与える可能性があります。つまり、ハイフネーション機能を使用すると、ドキュメントのレイアウトに影響します。

ハイフネーションと両端揃え (H&J)

Microsoft Word には、テキストが両端揃えでハイフネーションが有効になっている場合にブレークポイントを選択するための複雑なロジックがあります。つまり、Microsoft Word は行のハイフネーションを避けるためにスペースを縮小または拡張することを好む可能性があります。おそらく、このロジックは クヌースの記事 に基づいています。

Aspose.Words は独自の H&J アルゴリズムを実装しており、Microsoft Word と同じ結果をもたらし、出力ドキュメント内で同一の改行を提供します。

関連項目