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
นี้
ป้ายกำกับ: latex, thaifonts-scalable, typography