Theppitak's blog

My personal blog.

13 ตุลาคม 2554

ThaiLaTeX and Fonts Work Plan

มีรายการใน TODO list อย่างหนึ่งที่พยายามจะเคลียร์ แต่ก็ดองเอาไว้เพราะขาดสมาธิทำงาน จนกระทั่งได้โอกาสปลีกวิเวกเข้ากรุงแบบไร้เน็ต จึงมีเวลาใช้ความคิดบ้าง ปรากฏว่าได้กระตุ้นให้เกิดความคิดอย่างอื่นตามมาเป็นพรวน

รายการนั้นคือ การเปลี่ยนชื่อแพกเกจฟอนต์ใน Debian ตาม naming convention ใหม่ (ซึ่ง เอาเข้าจริงใช้แค่บางส่วน) ตามข้อกำหนดใหม่ (ที่ใช้จริงแค่บางส่วน) นี้ ชื่อแพกเกจจะไม่ใช่ ttf-* หรือ t1-* หรือ otf-* อีกต่อไป แต่จะชื่อ fonts-* อย่างเดียวโดยไม่แยกชนิด ซึ่งหมายความว่า แพกเกจ thaifonts-scalable ที่เคยแยก binary เป็น ttf-thai-tlwg, otf-thai-tlwg และ t1-thai-tlwg จะต้องยุบรวมเป็น fonts-tlwg หรืออาจจะแตกเป็นแพกเกจย่อย ๆ รายฟอนต์ เป็น fonts-kinnari, fonts-garuda ฯลฯ ก็ได้ แต่สุดท้ายคือมีฟอนต์แค่แบบเดียวเท่านั้น ซึ่งถ้าต้องเลือกก็คงเป็น TTF ถึงแม้ Christian จะแนะว่ายังสามารถทำแพกเกจฟอนต์หลายชนิดโดยตั้งชื่อแยกชนิดกันได้อยู่ แต่เมื่อพิจารณา สถิติ popcon แล้ว ผมคิดว่าอีกสองแบบที่เหลือคงไม่มีความต้องการใช้สักเท่าไร

อีกเรื่องหนึ่งที่เกี่ยวข้องกัน คือ lintian report ที่มีมานานแล้วในแพกเกจ thailatex คือ duplicate-font-file และ font-in-non-font-package โดยรายการแรกเป็นเพราะตัวแพกเกจมีฟอนต์ชุดที่ซ้ำกับในแพกเกจ t1-thai-tlwg ซึ่งถ้าตัด t1-thai-tlwg ออกก็คงหาย แต่รายการหลังนี่แหละที่น่าคิด เพราะแพกเกจ thailatex ไม่ใช่แพกเกจสำหรับฟอนต์ แต่กลับมีฟอนต์รวมมาด้วย เพื่อใช้กับ LaTeX ซึ่งมีระบบฟอนต์แยกต่างหากจากของเดสก์ท็อป

ซึ่งปัญหาการรวมฟอนต์มาใน thailatex นี้ ถ้าเราจะละเลย lintian report นี้ไปเสียก็ไม่มีปัญหา แต่ความจริงแล้ว มันก็มีปัญหาในทางปฏิบัติบ้างในช่วงที่ผ่านมา กล่าวคือ:

  • ทุกครั้งที่ออกฟอนต์ thaifonts-scalable รุ่นใหม่ ก็จะต้อง generate ฟอนต์ Type 1 แล้วนำมาอัปเดตใน thailatex เพื่อออก thailatex รุ่นใหม่ตามมาเสมอ ซึ่งจะมีหลายรุ่นที่เป็นแค่การอัปเดตฟอนต์เท่านั้น ถ้าย้ายฟอนต์ LaTeX ไปรวมใน thaifonts-scalable เสีย การอัปเดตฟอนต์ก็จะเป็นไปอย่างอัตโนมัติ แล้ว thailatex ก็จะออกรุ่นใหม่เฉพาะเมื่อมีการเปลี่ยนแปลงในส่วน LaTeX class จริง ๆ เท่านั้น
  • การเพิ่มฟอนต์ใน thailatex ด้วยวิธีปัจจุบัน จะต้องนำมาเพิ่มในแพกเกจ thailatex โดยตรง ยังมีแพกเกจฟอนต์อื่น ๆ ที่อาจนำมาเพิ่มได้ เช่น thaifonts-arundina หรือแม้กระทั่ง ฟอนต์ชุดสารบรรณ ที่กำลังจะผลักดันกันต่อไป ซึ่งการใช้วิธีเดิมจะไม่สะดวกอีกต่อไปแล้ว สมควรที่จะแยกส่วนของฟอนต์ออกมาจาก thailatex จริง ๆ เสียที

ด้วยเหตุนี้ การเปลี่ยนแปลงครั้งนี้จึงควรรวมการย้ายฟอนต์ออกจาก thailatex เสียด้วย

แต่การย้ายฟอนต์ออกจาก thailatex ไม่ใช่แค่ย้ายตัวฟอนต์ออกมา แต่ยังมีกรรมวิธีการ build TFM และ virtual font ที่ใช้ LIGKERN ในการจัดเรียงสระและวรรณยุกต์อีกด้วย จึงต้องแยกกระบวนการเหล่านี้ออกมา ทำให้อยู่ในรูปทั่วไปเพื่อใช้กับฟอนต์ทั่วไป (ที่มีลักษณะตามข้อกำหนดบางอย่าง เช่น ใช้ glyph naming convention แบบ uniXXXX) แล้วก็ต้องวางแผน transition สำหรับ Debian และการจัดการแพกเกจใน CTAN ควบคู่กันไปด้วย

หลังจากคิดออกมาหลาย ๆ แบบแล้ว ก็เลือกเอาแบบที่คิดว่าง่ายที่สุด ดังนี้:

  1. thaifonts-scalable:
    • เพิ่ม configure option --enable-texfonts
    • คัดลอกกฎต่าง ๆ จาก thailatex มาใช้ชั่วคราวเพื่อ build ฟอนต์
    • New upstream release (0.4.16)
    • สร้าง deb โดยเปลี่ยนชื่อฟอนต์ตามข้อกำหนดใหม่
    • เพิ่มแพกเกจ fonts-latex-* โดย Conflicts/Breaks thailatex (<< 0.4.5-3)
  2. thailatex:
    • แยกเอาส่วนกระบวนการ build ฟอนต์ออกมา คือ:
      • make rule สำหรับ build และติดตั้งฟอนต์ ซึ่งทางที่สะดวกที่สุดคือทำเป็น snippet สำหรับ include ใน Makefile.am แล้วก็เขียนแมโคร m4 เพื่อใช้กำหนดตัวแปรต่าง ๆ ให้กับกฎ แล้วให้แพกเกจฟอนต์นำไปใช้ใน configure.ac
      • กฎ LIGKERN โดยติดตั้งลงในระบบเพื่อให้ make rule ดึงไปใช้
      • lthuni.enc อาจติดตั้งรวมกับ make rule หรือกฎ LIGKERN หรือจะใช้จากในไดเรกทอรี TEXMF เลยก็ได้
    • ตัดฟอนต์ออก
    • New upstream release (0.4.6)
    • สร้าง deb โดย Depends fonts-latex-*
  3. thaifonts-scalable:
    • เปลี่ยนกฎการ build ให้ไปใช้รูปทั่วไปที่ thailatex ติดตั้งไว้
    • New upstream release (0.4.17)
    • สร้าง deb โดย Build-Depends thailatex (>= 0.4.6)
  4. CTAN upload: thailatex + thaifonts-scalable
  5. แพกเกจฟอนต์อื่น:
    • เพิ่ม configure option --enable-tex-fonts เหมือน thaifonts-scalable
    • New upstream release
    • สร้าง deb โดย Build-Depends thailatex (>= 0.4.6)
    • CTAN upload

บันทึกแผนงานไว้ก่อนครับ เดี๋ยวทยอยทำ

ป้ายกำกับ: , ,

1 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem