Theppitak's blog

My personal blog.

27 ตุลาคม 2554

ThaiLaTeX 0.4.6 Refactored

ผมโชคดีครับ ที่รอดพ้นจากภัยน้ำท่วม ก็ขอใช้โอกาสที่ได้นี้ทำงานให้มาก หวังว่าจะช่วยชดเชยผลิตภาพของประเทศชาติที่สูญเสียไปบ้าง แม้เพียงเล็กน้อย

จาก แผนงาน ThaiLaTeX ที่ได้วางไว้ ตอนนี้ก็ได้ดำเนินการสองขั้นแรกเสร็จแล้ว คือการออก ThaiFonts-Scalable 0.4.16 และ ThaiLaTeX 0.4.6 โดยได้ย้ายฟอนต์จาก ThaiLaTeX มาไว้ทางฝั่ง ThaiFonts-Scalable เรียบร้อยแล้ว

ใครที่ใช้ Debian sid ก็คงได้เห็นการเปลี่ยนแปลงแล้วเมื่อเช้านี้ ส่วน distro อื่น รวมถึงผู้ใช้ MikTeX ที่ติดตั้งแพกเกจผ่าน CTAN ก็อดใจรอสักนิด

การย้ายฟอนต์ในครั้งนี้ ปรากฏว่าเมื่อลงมือทำจริง มีบางส่วนที่ไม่เป็นไปตามคาด คือไม่ได้ทำ automake snippet ไว้ให้แพกเกจฟอนต์ดึงไปใช้ เนื่องจาก:

  • ไม่มีวิธีง่าย ๆ ในการพิจารณาตำแหน่งของ include file โดยถ้าเป็น make ธรรมดานั้น คำสั่ง include สามารถไปค้นหาไฟล์จากไดเรกทอรี /usr[/local]/include ได้เลย แต่ automake กลับมา override คำสั่งนี้ และสามารถ include ไฟล์ได้แค่จากภายใน source tree หรือระบุพาธเต็มเท่านั้น ซึ่งถ้าจะใช้ข้ามแพกเกจก็ต้องเพิ่มสคริปต์ configure มาตรวจสอบยุ่งยากอีก
  • เมื่อพิจารณาแพกเกจฟอนต์อื่นที่การใช้ฟอนต์ TrueType อาจจะเหมาะกว่า Type 1 เช่น ThaiFonts-Arundina สุดท้ายก็คงได้ไปปรับกฎใหม่อีกอยู่ดี

พิจารณาแล้ว ได้ไม่คุ้มเสีย จึงเลือกตัดความยุ่งยากทั้งหลาย ใช้วิธีตัดแปะกฎเอา คงมีแต่ซอร์สที่ใช้ build ส่วน LIGKERN เท่านั้นที่จะติดตั้งให้ใช้ร่วมกัน

ในการ refactor ครั้งนี้ มีจุดหนึ่งที่ถือเป็นก้าวกระโดดสำคัญ คือการปลดพันธนาการระหว่างฟอนต์กับข้อกำหนดภาษาใน babel จากเดิมที่ thai.ldf จะกำหนดฟอนต์หลักสามแบบ คือ roman, san-serif, teletype สำหรับภาษาไทยไว้ด้วย ทำให้ข้อกำหนดภาษาจำเป็นต้องมีฟอนต์ติดพ่วงไปด้วย สร้างความลำบากใจในการส่งโค้ดเข้ารวมใน babel แต่เมื่อได้สำรวจภาษาอื่น ก็ได้พบวิธีการที่เขาทำกัน คือจะกำหนดแค่ font encoding เท่านั้น ไม่ได้กำหนด family แล้ว LaTeX จะไปหาฟอนต์ตัวใดตัวหนึ่งที่มี encoding ตามที่กำหนดนี้มาใช้ให้เอง (ซึ่งวิธีเลือกนั้นผมยังไม่ได้ค้น) จากนั้น ถ้าผู้ใช้จะใช้ฟอนต์อะไร ถ้าไม่ใช้วิธีกำหนด \usefont ตรง ๆ ก็จะไป \usepacakge ของฟอนต์นั้น ๆ แล้วตัว style ของแพกเกจก็จะกำหนดฟอนต์หลักให้อีกที

ก็เป็นวิธีที่ดี เพราะถ้าต่อไปเราเพิ่มฟอนต์ไทยชุดอื่น ถ้าผู้ใช้ต้องการเลือกใช้ฟอนต์ชุดไหน ก็ไป \usepackage ชุดที่ต้องการเอา ไม่ต้องมีอะไรผูกพ่วงกับข้อกำหนดภาษา

เมื่อแยกขาดออกจากกันได้อย่างนี้ ก็ทำให้ thai.ldf ของเราเบาสบายคล่องตัวขึ้นมาก ขอแค่มาตรวจทานให้ดีสักหน่อย ก็น่าจะส่งเข้ารวมใน babel ได้เลย (โดยอาจจะส่ง lthuni.enc เข้าไปอีกไฟล์หนึ่งด้วย แต่ต้องสำรวจอีกที) และเมื่อพิจารณาสิ่งที่เหลืออยู่นอกจากฟอนต์กับ babel แล้ว ก็เหลือเพียง Emacs macro เล็ก ๆ กับคำสั่งเชลล์เล็ก ๆ เท่านั้น จนทำให้ไม่ต้องมีแพกเกจ ThaiLaTeX อีกต่อไปก็ได้ และนั่นคือสิ่งที่ผมคิดจะทำในขั้นต่อไปหลังจากเสร็จงานครั้งนี้ ThaiLaTeX must die!

สำหรับผู้ใช้ เดิมจะมีแพกเกจ thswitch เพื่อใช้สลับชุดฟอนต์ระหว่างไทย-ละตินอยู่ นอกเหนือจากค่าปริยายในข้อกำหนดภาษา ซึ่งแพกเกจนี้จะยังคงมีผลอยู่ในรุ่นใหม่ที่ได้ตัดฟอนต์ออกไปแล้ว เพื่อเป็นการรักษาความเข้ากันได้กับเอกสารเดิมที่มีอยู่ โดยจะอ้างอิงไปถึงฟอนต์ชุดเดิมที่ได้แยกออกไปเหมือนเดิม ถ้าเอกสารของคุณใช้แพกเกจนี้อยู่แล้ว ก็ไม่มีปัญหา คุณสามารถสลับฟอนต์ในเอกสารด้วยคำสั่ง \rmfamily (หรือ \textrm{}), \sffamily (หรือ \textsf{}) และ \ttfamily (หรือ \texttt{}) ได้ตามปกติ แต่ถ้าไม่ได้ใช้ คำสั่งสลับฟอนต์เหล่านี้จะไม่มีผลในรุ่นใหม่ คือมันจะใช้ฟอนต์ปริยายที่ตรวจพบเพียงฟอนต์เดียวไปตลอดเอกสาร

ถ้าคุณต้องการสลับฟอนต์ในเอกสาร ขอแนะนำให้ใช้แพกเกจ fonts-tlwg ดังนี้:

\usepackage{fons-tlwg}

ซึ่งในขณะนี้ คำสั่งด้านบนมีผลเทียบเท่ากับ \usepackage{thswitch} ทุกประการ และขอแนะนำให้เอกสารใหม่ ๆ ใช้วิธีการนี้แทน thswitch ที่อาจจะถูกตัดออกในอนาคต

ขั้นต่อไป ผมคิดว่าจะทำแบบนี้กับฟอนต์ชุด Arundina เป็นรายต่อไป และผู้ใช้คงเริ่มเห็นภาพ ว่าทำไมต้อง deprecate แพกเกจ thswitch นี้

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

0 ความเห็น:

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

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

hacker emblem