การทำงานกับยัติภังค์

บางครั้งจำเป็นต้องใช้เครื่องหมายยัติภังค์เพื่อจัดเรียงข้อความในเอกสารให้กระชับยิ่งขึ้น ในขณะเดียวกัน สิ่งสำคัญคือต้องเข้าใจว่าลักษณะเฉพาะของการใส่ยัติภังค์อาจแตกต่างกันไปในแต่ละภาษา

ในปัจจุบัน การใส่ยัติภังค์ไม่ได้ใช้บ่อยเหมือนเมื่อก่อน โดยเฉพาะในข้อความภาษาอังกฤษ อย่างไรก็ตาม การใช้คุณสมบัตินี้อาจส่งผลกระทบร้ายแรงต่อเอกสารของผู้ใช้ การใส่ยัติภังค์ส่งผลต่อเค้าโครง และเป็นผลให้ลักษณะที่ปรากฏของไฟล์เอาต์พุต เช่น ในรูปแบบ 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-.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 อาจต้องการย่อหรือขยายช่องว่างเพื่อหลีกเลี่ยงการใส่ยัติภังค์บรรทัด ส่วนใหญ่แล้วตรรกะนี้จะขึ้นอยู่กับ บทความของ Knuth

Aspose.Words ใช้อัลกอริธึม H&J ของตัวเองซึ่งให้ผลลัพธ์เหมือนกับ Microsoft Word และจัดให้มีการแบ่งบรรทัดที่เหมือนกันในเอกสารเอาต์พุต

ดูสิ่งนี้ด้วย