Работа с гипертонией
Иногда необходимо использовать дефис для более компактного расположения текста в документе. При этом важно понимать, что специфика дефисации слов может отличаться для каждого языка.
В настоящее время дефис используется не так часто, как раньше, особенно в английских текстах. Тем не менее, использование этой функции может оказать серьезное влияние на документы пользователя – дефис влияет на макет и, как следствие, внешний вид выходных файлов, например, в формате PDF.
Для правильного расщепления слов используются языковые словари дефисации. Aspose.Words использует передовые алгоритмы для работы с такими словарями и позволяет получить такое же дефисирование, как и в Microsoft Word.
Гифенационные словари
Поскольку в разных языках для дефисации слов используются разные нормы и правила, оптимальным решением для правильного дефисирования является использование специальных словарей. Aspose.Words Использует словари OpenOffice.
Для проверки орфографии OpenOffice использует Hunspell библиотека, Это обобщение алгоритма дефисации TeX. Этот алгоритм позволяет автоматическую нестандартную дефисацию с использованием конкурирующих стандартных и пользовательских шаблонов дефисации. Hunspell использует Дифен для дефисации.
Гифеновый алгоритм
Aspose.Words реализация Алгоритм дефисации TeX Может повторно использовать словари дефиса OpenOffice.
Следующие особенности Aspose.Words Следует учитывать алгоритмы:
- Параметры расстояния выпадения (LEFTHYPHENMIN, RIGHTHYPHENMIN, COMПУНДЛЕФТИФЕНМИН, 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 и обеспечивает идентичный разрыв линии в выходном документе.