Работа с тире

Понякога е необходимо да се използва тире за по-компактно подреждане на текста в документ. В същото време е важно да се разбере, че спецификата на думата с тире може да се различава за всеки език.

В днешно време с тире не се използва толкова често, колкото преди, особено в английските текстове. Въпреки това, използването на тази функция може да има сериозно въздействие върху потребителските документи – сричането засяга оформлението и в резултат на това появата на изходните файлове, например във формат PDF.

За правилното разделяне на думите се използват речници, специфични за езика с тире. Aspose.Words използва усъвършенствани алгоритми за работа с такива речници и ви позволява да получите същото тире, както в Microsoft Word.

Речници С Тире

Тъй като различните езици използват различни норми и правила за тире, оптималното решение за правилно тире е да се използват специални речници. Aspose.Words използва речници OpenOffice.

За проверка на правописа OpenOffice използва Hunspell библиотека което е обобщение на алгоритъма на Текс за тиреоид. Този алгоритъм позволява автоматично нестандартно тире, използвайки конкурентни стандартни и персонализирани модели на тире. Hunspell използва Тире за тире.

Алгоритъм За Тиреоид

Aspose.Words изпълнява алгоритъмът Текс и може да използва повторно 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-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 за вмъкване на тирета в думи, за да се премахнат празнините в оправдания текст или да се поддържа равномерна дължина на реда в тесни колони. Това очевидно може да повлияе на броя на редовете и следователно на броя на страниците. С други думи, използването на функцията за тире засяга оформлението на документа.

Тиреоид и обосновка (з&й)

Microsoft Word има сложна логика за избор на точка на прекъсване, ако текстът е оправдан и е разрешено тире. С една дума, Microsoft Word може да предпочете да се свие или разтегне пространства, за да се избегне линия с тире. Най-вероятно тази логика се основава на Статия на Кнут.

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

Вижте Също