ハイフネーションの操作
ドキュメント内のテキストをよりコンパクトに配置するためにハイフネーションを使用する必要がある場合があります。 同時に、単語ハイフネーションの詳細は言語ごとに異なる可能性があることを理解することが重要です。
現在、ハイフネーションは、特に英語のテキストでは、以前ほど頻繁には使用されていません。ただし、この機能を使用すると、ユーザー ドキュメントに重大な影響を与える可能性があります。ハイフネーションはレイアウトに影響し、その結果、たとえば PDF 形式の出力ファイルの外観に影響します。
単語を正しく分割するために、言語固有のハイフネーション辞書が使用されます。 Aspose.Wordsは高度なアルゴリズムを使用してこのような辞書を操作し、Microsoft Wordと同じハイフネーションを取得できます。
ハイフネーション辞書
異なる言語が単語ハイフネーションのために異なる規範と規則を使用するので、正しいハイフネーションのための最適な解決策は特別な辞書を使用することです。 Aspose.WordsはOpenOffice辞書を使用します。
スペルチェックのために、OpenOfficeは次のものを使用します Hunspellライブラリ これは、TeXのハイフネーションアルゴリズムの一般化です。 このアルゴリズムでは、競合する標準ハイフネーションパターンとカスタムハイフネーションパターンを使用して、非標準ハイフネーションを自動化できます。 Hunspellを使用しています ハイフン ハイフネーションのために。
ハイフネーションアルゴリズム
Aspose.Words実装 TeXハイフネーションアルゴリズム また、OpenOfficeハイフネーション辞書を再利用できます。
Aspose.Wordsアルゴリズムの次の機能を考慮する必要があります:
- ハイフネーションディクショナリで指定されたハイフネーション距離パラメータ(LEFTHYPHENMIN、RIGHTHYPHENMIN、COMPOUNDLEFTHYPHENMIN、COMPOUNDRIGHTHYPHENMIN)は無視されます。 Aspose.Wordsは、ドキュメント互換モードに応じて独自の距離パラメータセットを使用します。
- Aspose.Wordsのハイフネーションアルゴリズムでは、次のことがサポートされています 複合ハイフネーション. ただし、Aspose.Wordsは、英字と非英字が混在する文字シーケンスを英字のみの部分(単語)に分割し、それらを別々にハイフネーションします。 複合語のハイフネーションのMicrosoft Wordロジックは、文書互換モードに依存することに注意してください。
- Aspose.Wordsのハイフネーションアルゴリズムは、Aspose.Wordsのハイフネーションアルゴリズムを実装しません。 非標準ハイフネーション. 非標準パターンは無視されます。
ハイフネーション辞書の読み込み
ハイフネーション機能を使用するには、まずハイフネーション辞書を登録します。次のコード例は、指定された言語のハイフネーション辞書をファイルから読み込む方法を示しています:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(MyDir + u"German text.docx"); | |
Hyphenation::RegisterDictionary(u"en-US", MyDir + u"hyph_en_US.dic"); | |
Hyphenation::RegisterDictionary(u"de-CH", MyDir + u"hyph_de_CH.dic"); | |
doc->Save(ArtifactsDir + u"WorkingWithHyphenation.HyphenateWordsOfLanguages.pdf"); |
次のコード例は、ストリームから指定された言語のハイフネーション辞書を読み込む方法を示しています:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(MyDir + u"German text.docx"); | |
SharedPtr<System::IO::Stream> stream = System::IO::File::OpenRead(MyDir + u"hyph_de_CH.dic"); | |
Hyphenation::RegisterDictionary(u"de-CH", stream); | |
doc->Save(ArtifactsDir + u"WorkingWithHyphenation.LoadHyphenationDictionaryForLanguage.pdf"); |
ハイフネーション辞書を事前登録する代わりに、必要なハイフネーション辞書のみを"要求によって"登録することができます。 これを実現するには、IHyphenationCallbackインターフェイスを実装し、静的コールバックCallbackを使用します。
次のコード例は、IHyphenationCallbackインターフェイスを実装する方法を示しています:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
class CustomHyphenationCallback : public IHyphenationCallback | |
{ | |
public: | |
void RequestDictionary(String language) override | |
{ | |
String dictionaryFolder = MyDir; | |
String dictionaryFullFileName; | |
if (language == u"en-US") | |
{ | |
dictionaryFullFileName = System::IO::Path::Combine(dictionaryFolder, u"hyph_en_US.dic"); | |
} | |
else if (language == u"de-CH") | |
{ | |
dictionaryFullFileName = System::IO::Path::Combine(dictionaryFolder, u"hyph_de_CH.dic"); | |
} | |
else | |
{ | |
throw System::Exception(String::Format(u"Missing hyphenation dictionary for {0}.", language)); | |
} | |
// Register dictionary for requested language. | |
Hyphenation::RegisterDictionary(language, dictionaryFullFileName); | |
} | |
}; | |
void HyphenationCallback() | |
{ | |
{ | |
auto __finally_guard_0 = ::System::MakeScopeGuard([]() { Hyphenation::set_Callback(nullptr); }); | |
try | |
{ | |
// Register hyphenation callback. | |
Hyphenation::set_Callback(MakeObject<WorkingWithHyphenation::CustomHyphenationCallback>()); | |
auto document = MakeObject<Document>(MyDir + u"German text.docx"); | |
document->Save(ArtifactsDir + u"WorkingWithHyphenation.HyphenationCallback.pdf"); | |
} | |
catch (System::Exception& e) | |
{ | |
ASSERT_TRUE(e->get_Message().StartsWith(u"Missing hyphenation dictionary")); | |
std::cout << e->get_Message() << std::endl; | |
} | |
} | |
} |
ハイフネーションがレイアウトに与える影響
テキストを行に分割するとき、Aspose.Wordsは各単語が現在の行に完全に収まるかどうかをチェックします。 別の単語が長すぎて行末に収まらない場合、デフォルトでAspose.Wordsはハイフネーションするのではなく、次の行の先頭に移動します。
ただし、Aspose.Wordsでハイフン機能を使用すると、単語にハイフンを挿入して、正当化されたテキストのギャップを排除したり、狭い列の行の長さを均等に保 これは明らかに行数、したがってページ数に影響を与える可能性があります。 つまり、ハイフネーション機能を使用すると、ドキュメントレイアウトに影響します。
ハイフネーションと正当化(H&J)
Microsoft Wordには、テキストが正当化され、ハイフネーションが有効になっている場合にブレークポイントを選択するための複雑なロジックがあります。 つまり、Microsoft Wordは行のハイフネーションを避けるためにスペースを縮小またはストレッチすることを好む場合があります。 ほとんどの場合、このロジックは次のものに基づいています クヌースの記事.
Aspose.Wordsは独自のH&Jアルゴリズムを実装し、Microsoft Wordと同じ結果を得て、出力ドキュメント内で同一の改行を提供します。