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