Showing posts with label LaTeX. Show all posts
Showing posts with label LaTeX. Show all posts

Jan 31, 2016

ขนาดฟอนต์ของเอกสารไทย

ถ้าเคยสังเกตและจำกันได้ เวลาสร้างเอกสารใน MS Word (โดยที่ยังไม่ได้กำหนดค่าปริยายใหม่) ฟอนต์เริ่มแรกที่โปรแกรมเลือกให้คือ Times New Roman ขนาด 11 พอยต์

เอามาพิมพ์ภาษาอังกฤษไม่มีปัญหา อ่านได้สบายตา แม้ว่ารูปร่างตัวอักษรจะเรียบๆ ตามขนบธรรมเนียมไปบ้าง

อย่างไรก็ตาม Times New Roman นี้เอามาพิมพ์ภาษาไทยไม่ได้ เพราะฟอนต์นี้ไม่มีภาพตัวอักษร (glyph) ภาษาไทยให้

ถึงตอนนี้ถ้าแก่พอ ก็คงจำได้ว่าต้องเปลี่ยนไปเลือกฟอนต์ Angsana UPC เพื่อพิมพ์คำไทย

แต่เนื่องจาก UPC มีแต่ภาพตัวอักษรไทยเท่านั้น เวลาเปลี่ยนก็ต้องเปลี่ยนแค่บริเวณที่เป็นภาษาไทย แถมยังต้องเพิ่มขนาดขึ้นมาเป็นอย่างต่ำ 14 พอยต์ด้วย ไม่ขนาดมันจะเล็กมากจนอ่านไม่ออก


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

โชคดีที่ยุคถัดมามี Angsana New ให้ใช้ ซึ่งฟอนต์ตัวนี้มันมีภาพตัวอักษรทั้งไทยและอังกฤษให้ในตัว เวลาใช้ก็สบายใจหายห่วง ไม่ต้องมากังวลเรื่องปรับขนาดฟอนต์เมื่อเปลี่ยนภาษาอีก

แต่อย่างไรเสีย ขนาดที่ใช้อ่านง่ายสบายตาคือ 16 พอยต์ (มาตรฐานราชการไทยเลยหละ)



ถ้าใครลืมเลือนประวัติศาสตร์ตรงนี้กันไปแล้ว เวลาไปอ่านคำแนะนำการจัดย่อหน้าหนังสือภาษาอังกฤษ ก็จะตกใจเล็กน้อยว่า เฮ้ย! ฝรั่งนี่เค้าสายตาดีขนาดกำหนดฟอนต์มาตรฐานไว้ที่ 11-12 พอยต์เลยเหรอ?

คำตอบคือ 11-12 พอยต์ตัวอักษรอังกฤษ มันเทียบเคียงได้กับ 14-16 พอยต์ตัวอักษรไทยนั่นเอง

สันนิษฐานว่าตอนที่ภาพตัวอักษรภาษาไทยเริ่มถูกนำไปทำเป็นฟอนต์ เวลานับขนาดภาพตัวอักษร เค้านับตามแนวตั้งซึ่งรวมพวกสระบนล่างและวรรณยุกต์เข้าไปด้วย

ทำให้ขนาดของภาพตัวอักษร ก-ฮ มันโดนบีบลงไปนั่นเอง เวลาจะใช้งานจริงๆ เลยต้องเพิ่มขนาดฟอนต์โดยรวมทั้งหมด เพื่อให้ขนาดเฉพาะของภาพตัวอักษร ก-ฮ มันกลับมามีขนาดใกล้เคียงกับภาพตัวอักษร a-z



แต่ปัจจุบันนี้ หากเปลี่ยนไปใช้ Google Docs หรือ LaTeX พิมพ์งาน จะพบว่าฟอนต์ไทยในขนาดที่อ่านได้ มันคือขนาด 11-12 พอยต์เหมือนฟอนต์อังกฤษมาตั้งแต่แรก ไม่ต้องไปเพิ่มขนาดมันเป็น 14-16 พอยต์แล้ว

ก็หวังว่าระบบมาตรฐานฟอนต์ไทยขนาด 16 พอยต์ใน MS Word จะล้มหายตายจากไปเสียที แล้วไปใช้มาตรฐานฟอนต์ไทย 12 พอยต์เหมือนสากลโลกเค้า (เช่น มีฟอนต์ใหม่ Angsana Normalize มาแทนที่ Angsana New ไรงี้)

ระหว่างนี้ก็ทำได้แต่ระวังสับสนกันต่อไป ...

หรือถ้าจะให้แน่ใจ ตอนพิมพ์ลงกระดาษแล้ว ลองเอาไม้บรรทัดมาวัดความสูงของภาพตัวอักษร ก-ฮ ให้ได้ราวๆ 4.5 มิลลิเมตร ก็จะได้ว่าภาพตัวอักษรนั้นมีขนาด 16 พอยต์แบบพิมพ์บน MS Word หรือเทียบได้กับขนาด 12 พอยต์แบบพิมพ์บน Google Docs นั่นเองครับ

Jul 25, 2013

ยินดียิ่งนัก LaTeX พิมพ์ไทยได้แล้ว

ผมไม่ใช่ผู้ใช้ LaTeX ตั้งแต่ยุคแรกๆ แม้ว่าจะสนใจคณิตศาสตร์ก็ตาม การเขียนแทนสมการของผมแทบทั้งหมดนั้นสำเร็จได้ด้วยปากกาและกระดาษ ถ้าต้องการแสดงสมการในคอมก็จะเป็น plain text เพียงอย่างเดียว

ประสบการณ์ใช้ LaTeX ครั้งแรกเกิดขึ้นเมื่อ 5 ปีก่อนในวิชา Mathematics Software ซึ่งนับได้ว่าไม่น่าประทับใจเท่าที่ควร (และทำให้เกิดโครงการ EzMath ตามมา) และยังเลวร้ายขึ้นไปอีกเมื่อผมย้ายมาใช้ Linux เต็มตัวเมื่อสองปีก่อน เพื่อพบว่าการทำให้ LaTeX พิมพ์งานภาษาไทยได้นั้นยุ่งยากมาก จนสุดท้ายต้องหนีไป XeLaTeX หรือกลับไปใช้ MS Word ที่มหาวิทยาลัยแทน

อย่างไรก็ตาม สถานการณ์ตอนนี้เริ่มดูดีขึ้น หลังจาก @theppitak สามารถส่ง ThaiLaTeX กลับเข้าไปยังต้นน้ำได้สำเร็จ ต่อไปนี้ถ้าต้องการพิมพ์ไทยก็แค่ลงโปรแกรม

$ apt-get install texlive-full

แล้วก็เริ่มพิมพ์งานได้เลย ไม่ต้อง config / download อะไรเพิ่มเติมอีกต่อไป

\documentclass{article}
\usepackage[english,thai]{babel}
\usepackage[utf8x]{inputenc}
\begin{document}
สวัสดีอีกครั้ง $ e^{\pi i} + 1 = 0 $
\end{document}

ขอบคุณอีกครั้งที่ช่วยผลักดันวงการซอฟท์แวร์ไทยครับ

Feb 25, 2013

ลำดับ Farey และ วงกลม Ford

ปีที่แล้วเล่น Project Euler ไปได้หลายข้อ แล้วก็สะดุดตากับข้อที่น่าสนใจ เลยเอามาขยายผลต่อจนได้เป็นเรื่องนี้ขึ้นมา

อธิบายสั้นๆ คือลำดับ Farey เป็นลำดับของเศษส่วนอย่างต่ำตั้งแต่ 0/1 ไปจนถึง 1/1 เพราะฉะนั้นตัวเลขอย่าง 2/4 จึงไม่นับ (หรือถ้าจะนับ ก็ทำให้มันเป็น 1/2 ก่อน)

อย่างไรก็ดี ถ้านิยามอย่างนี้เราจะมีปัญหาว่าลำดับ Farey มันดันเป็นลำดับอนันต์ซะหนิ ดังนั้นเลยเพิ่มข้อจำกัดไปว่า ลำดับ Farey อันดับ n จะบรรจุเศษส่วนอย่างต่ำ ที่ตัวส่วนมีค่าน้อยกว่าเท่ากับ n เท่านั้น

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

ส่วนวงกลม Ford ก็เป็นวงกลมที่นำเอาลำดับ Farey ไปวาดแสดงผลได้อย่างสวยงาม ;)

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

ปล. blog ตอนนี้ เขียนเป็นพิเศษให้ @flurrywong @FordAntiTrust ฮะ <3

Jan 2, 2013

ทำ Optional Argument แบบ LaTeX

command ใน LaTeX นั้นมีวิธีเรียกใช้ที่ต่างจากภาษาโดยทั่วไปอยู่บ้าง ลองดู
\sqrt{x}
\sqrt[3]{x}
อันด้านบนจะวาด √x (รากที่สองของ x -- โดยปรกติ รากที่สองไม่จำเป็นต้องมีเลข 2 กำกับ) ส่วนอันล่างจะวาด ∛x

รูปร่างของ syntax ที่น่าสนใจคือ ส่วนที่เป็น optional argument จะถูกเรียกขึ้นมาก่อน main argument แถมยังใช้วงเล็บแยกกันอีก นี่ทำให้การ currying เป็นไปได้อย่างง่ายดาย
\newcommand{\cbrt}{\sqrt[3]}
...
\cbrt{x}
จริงๆ แล้วทาง math ก็มีฟังก์ชันในแนวคิดนี้อยู่เยอะ อย่างเช่น σx(n) ซึ่งเขียนแบบนี้แล้วเข้าใจง่ายกว่า σ(n, x) และยังไม่สับสนอีกว่า argument ตัวไหนที่ควรเป็น n หรือ x กันแน่

แล้วถ้าอยากได้แบบนี้ใน Python บ้าง? ง่ายนิดเดียวเพราะใช้เทคนิคเดียวกับ Infinite List นั่นเอง
@singleton
class sigma:
    def __call__(self, n, x=1):
        if n == 1:
            return 1
        return product( sum((k**x)**i for i in range(v+1))
                            for k, v in Counter(factor(n)).items() )
    def __getitem__(self, x):
        def partial_sigma(n):
            return self(n, x)
        return partial_sigma
คราวนี้จะเขียน
6 == sigma[1](6) - 6
หรือกระทั่ง
tau = sigma[0]
...
[tau(i) for i in range(return 1, 10)]
ก็ย่อมได้