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