---
title: "Робота з розстановкою переносів в C++"
---


Іноді буває необхідно використовувати розстановку переносів для більш компактного розміщення тексту в документі. У той же час важливо розуміти, що особливості розстановки переносів слів можуть відрізнятися для кожної мови.

В даний час перенесення використовується не так часто, як раніше, особливо в текстах англійською мовою. Проте, використання цієї функції може мати серйозний вплив на призначені для користувача документи – Розстановка переносів впливає на оформлення і, як наслідок, на зовнішній вигляд вихідних файлів, наприклад, у форматі PDF.

Для коректного поділу слів використовуються словники переносів для конкретних мов. Aspose.Words використовує просунуті алгоритми для роботи з такими словниками і дозволяє отримати ту ж розстановку переносів, що і в Microsoft Word.

## Словники для розстановки переносів

Оскільки в різних мовах використовуються різні норми і правила перенесення слів, оптимальним рішенням для правильної розстановки переносів є використання спеціальних словників. Aspose.Words використовує OpenOffice словники.

Для перевірки орфографії OpenOffice використовує [Hunspell бібліотека](https://hunspell.github.io/), що є узагальненням алгоритму перенесення в TeX. Цей алгоритм дозволяє автоматично розставляти нестандартні переноси, використовуючи конкуруючі стандартні і призначені для користувача шаблони розстановки переносів. Hunspell використовує [Дефіс](https://github.com/hunspell/hyphen) для розстановки переносів.

{{% alert color="primary" %}}

Словники розстановки переносів можна взяти з [LibreOffice словників GitHub](https://github.com/LibreOffice/dictionaries). Наприклад,, [en - US словник розміщення переносів](https://github.com/LibreOffice/dictionaries/blob/master/en/hyph_en_US.dic).

{{% /alert %}}

{{% alert color="primary" %}}

Оскільки Microsoft Word використовує словники, відмінні від словників OpenOffice, для переносу деяких слів, визначених у словниках OpenOffice, може відрізнятися від переносу Microsoft Word. З цієї причини іноді нам доводиться радити клієнтам додавати необхідні шаблони до своїх словників, щоб виправити перенесення певних слів.

{{% /alert %}}

## Алгоритм розстановки переносів

Aspose.Words реалізує [алгоритм розстановки переносів в TeX](https://github.com/hunspell/hyphen/blob/master/README.hyphen) і може повторно використовувати OpenOffice словники переносу.

Слід враховувати наступні особливості алгоритмів Aspose.Words:

* Параметри відстані між перенесеннями (LEFTHYPHENMIN, RIGHTHYPHENMIN, COMPOUNDLEFTHYPHENMIN, COMPOUNDRIGHTHYPHENMIN), зазначені в словнику переносів, ігноруються. Aspose.Words використовує власний набір параметрів відстані залежно від режиму сумісності з документом.
* Алгоритм розстановки переносів в Aspose.Words підтримує [складові переноси](https://github.com/hunspell/hyphen/blob/master/README.compound). Однак Aspose.Words розбиває послідовності символів, що містять змішані літерні та не алфавітні символи, на частини (слова), що містять лише літери, і переносить їх окремо.
  Зверніть увагу, що Microsoft Word логіка розміщення складних слів через дефіс залежить від режиму сумісності документів.
* Алгоритм перенесення в Aspose.Words не реалізує [нестандартну розстановку переносів](https://github.com/hunspell/hyphen/blob/master/doc/tb87nemeth.pdf). Нестандартні шаблони ігноруються.

## Завантаження словників розстановки переносів

Щоб скористатися функцією перенесення, спочатку Зареєструйте словник перенесення.Наступний приклад коду показує, як завантажити словники переносу для зазначених мов із файлу:

{{< gist "aspose-words-gists" "d55d8631947d283b1f0da99afa06c492" "Examples-DocsExamples-source-Programming with Documents-Working with Hyphenation-HyphenateWordsOfLanguages.h" >}}

{{% alert color="primary" %}}

Ви можете завантажити файл шаблону для цього прикладу з сайту [Aspose.Words GitHub](https://github.com/aspose-words/Aspose.Words-for-C/tree/master/Examples)

{{% /alert %}}

Наступний приклад коду показує, як завантажити словники перенесення для вказаної мови з потоку:

{{< gist "aspose-words-gists" "d55d8631947d283b1f0da99afa06c492" "Examples-DocsExamples-source-Programming with Documents-Working with Hyphenation-LoadHyphenationDictionaryForLanguage.h" >}}

{{% alert color="primary" %}}

Ви можете завантажити файл шаблону для цього прикладу з сайту [Aspose.Words GitHub](https://github.com/aspose-words/Aspose.Words-for-C/tree/master/Examples)

{{% /alert %}}

В якості альтернативи попередньої реєстрації словників розстановки переносів можна зареєструвати тільки необхідні словники розстановки переносів "за запитом". Для досягнення цієї мети реалізуйте інтерфейс [IHyphenationCallback](https://reference.aspose.com/words/cpp/aspose.words/ihyphenationcallback/) і використовуйте статичний зворотний виклик [Callback](https://reference.aspose.com/words/cpp/aspose.words/hyphenation/get_callback/).

Наступний приклад коду показує, як реалізувати інтерфейс **IHyphenationCallback**:

{{< gist "aspose-words-gists" "d55d8631947d283b1f0da99afa06c492" "Examples-DocsExamples-source-Programming with Documents-Working with Hyphenation-CustomHyphenation.h" >}}

## Вплив розстановки переносів на макет

При розбитті тексту на рядки Aspose.Words перевіряє, чи повністю кожне слово поміщається в поточному рядку. Якщо інше слово занадто довге, щоб поміститися в кінці рядка, за замовчуванням Aspose.Words переміщує його на початок наступного рядка, а не переносить через дефіс.

Однак функцію перенесення можна використовувати в Aspose.Words для вставки дефісів у слова, щоб усунути пробіли в вирівняному тексті або зберегти однакову довжину рядка у вузьких стовпцях. Очевидно, що це може вплинути на кількість рядків і, отже, на кількість сторінок. Іншими словами, використання функції перенесення впливає на макет документа.

## Розстановка переносів і їх обгрунтування (H & J)

Microsoft Word має складну логіку вибору точки зупину, якщо текст вирівняний по ширині і включена Розстановка переносів. Коротше кажучи, Microsoft Word може віддати перевагу скороченню або розтягуванню пробілів, щоб уникнути перенесення рядків. Швидше за все, ця логіка заснована на статті [Knuth](https://www.eprg.org/G53DOC/pdfs/knuth-plass-breaking.pdf).

Aspose.Words реалізує власний алгоритм H&J, який дає той самий результат, що і Microsoft Word, і забезпечує ідентичну розбивку рядків у вихідному документі.

## Дивіться також

* [Дефіс-бібліотека розстановок переносів](https://github.com/hunspell/hyphen/blob/master/README)
* [Нестандартна Розстановка переносів](https://github.com/hunspell/hyphen/blob/master/README.nonstandard)
* [Автоматична нестандартна Розстановка переносів в Open Office](https://github.com/hunspell/hyphen/blob/master/doc/tb87nemeth.pdf)
