Работа с расстановкой переносов

Иногда бывает необходимо использовать расстановку переносов для более компактного размещения текста в документе. В то же время важно понимать, что особенности расстановки переносов слов могут отличаться для каждого языка.

В настоящее время расстановка переносов используется не так часто, как раньше, особенно в текстах на английском языке. Тем не менее, использование этой функции может оказать серьезное влияние на пользовательские документы – расстановка переносов влияет на оформление и, как следствие, на внешний вид выходных файлов, например, в формате 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 не реализует нестандартную расстановку переносов. Нестандартные шаблоны игнорируются.

Загрузка словарей расстановки переносов

Чтобы использовать функцию расстановки переносов, сначала зарегистрируйте словарь расстановки переносов. В следующем примере кода показано, как загрузить словари расстановки переносов для указанных языков из файла:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "German text.docx")
aw.Hyphenation.register_dictionary("en-US", docs_base.my_dir + "hyph_en_US.dic")
aw.Hyphenation.register_dictionary("de-CH", docs_base.my_dir + "hyph_de_CH.dic")
doc.save(docs_base.artifacts_dir + "WorkingWithHyphenation.hyphenate_words_of_languages.pdf")

В следующем примере кода показано, как загрузить словари переносов для указанного языка из потока:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "German text.docx")
stream = io.FileIO(docs_base.my_dir + "hyph_de_CH.dic")
aw.Hyphenation.register_dictionary("de-CH", stream)
doc.save(docs_base.artifacts_dir + "WorkingWithHyphenation.load_hyphenation_dictionary_for_language.pdf")
stream.close()

Влияние расстановки переносов на макет

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

Однако функция расстановки переносов может использоваться в Aspose.Words для вставки дефисов в слова, чтобы устранить пробелы в выровненном тексте или сохранить одинаковую длину строки в узких столбцах. Очевидно, что это может повлиять на количество строк и, следовательно, на количество страниц. Другими словами, использование функции расстановки переносов влияет на макет документа.

Расстановка переносов и их обоснование (H&J)

Microsoft Word имеет сложную логику выбора точки останова, если текст выровнен по ширине и включена расстановка переносов. Короче говоря, Microsoft Word может предпочесть сокращать или растягивать пробелы, чтобы избежать переноса строк. Скорее всего, эта логика основана на статье Knuth.

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

Смотрите также