ปู่ in TeX

5 views
Skip to first unread message

Anon Sricharoenchai

unread,
Jan 14, 2008, 1:24:57 AM1/14/08
to thai-linux...@googlegroups.com, anon...@gmail.com
สวัสดีครับ,

เรื่อง "ปู่" ใน TeX ตอนนี้ไปถึงไหนแล้วครับ.
ล่าสุดหลังจากที่คุณ Chanop ลองใช้วิธีสร้าง glyph/font หลอกๆ
เมื่อนานมาแล้วนั้น, นอกจากนี้มีใครใช้วิธีอื่นอีกบ้างครับ.

เพิ่งนึกได้ว่า TeX มันก็คือ turing machine ดีๆ นี่เอง.
เราจะใช้ความสามารถของ turing machine อันนี้ มาแก้ปัญหา "ปู่" ได้รึเปล่าครับ?

Theppitak Karoonboonyanan

unread,
Jan 14, 2008, 8:23:49 AM1/14/08
to thai-linux...@googlegroups.com
2008/1/14 Anon Sricharoenchai <anon...@gmail.com>:

> เรื่อง "ปู่" ใน TeX ตอนนี้ไปถึงไหนแล้วครับ.
> ล่าสุดหลังจากที่คุณ Chanop ลองใช้วิธีสร้าง glyph/font หลอกๆ
> เมื่อนานมาแล้วนั้น, นอกจากนี้มีใครใช้วิธีอื่นอีกบ้างครับ.

ถ้าจำไม่ผิด จะเป็นวิธีของ Werner Lemberg ครับ
โดยใช้ ligkern.. ตั้งแต่ตอนนั้นก็ยังไม่ได้ commit เลย
ต้องกลับไปค้นข้อมูลเก่า ๆ

> เพิ่งนึกได้ว่า TeX มันก็คือ turing machine ดีๆ นี่เอง.
> เราจะใช้ความสามารถของ turing machine อันนี้ มาแก้ปัญหา "ปู่" ได้รึเปล่าครับ?

พอจะขยายความได้ไหมครับ?

ถ้าจะพูดถึงกรอบที่ทำกันมาทั้งหมด ligkern rule ก็อยู่ในระดับ
regular language อย่างง่ายเท่านั้น

เทพ.
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/

Anon Sricharoenchai

unread,
Jan 17, 2008, 10:53:01 PM1/17/08
to thai-linux...@googlegroups.com, anon...@gmail.com
On 1/14/08, Theppitak Karoonboonyanan <th...@linux.thai.net> wrote:
> 2008/1/14 Anon Sricharoenchai <anon...@gmail.com>:
>
> > เรื่อง "ปู่" ใน TeX ตอนนี้ไปถึงไหนแล้วครับ.
> > ล่าสุดหลังจากที่คุณ Chanop ลองใช้วิธีสร้าง glyph/font หลอกๆ
> > เมื่อนานมาแล้วนั้น, นอกจากนี้มีใครใช้วิธีอื่นอีกบ้างครับ.
>
> ถ้าจำไม่ผิด จะเป็นวิธีของ Werner Lemberg ครับ
> โดยใช้ ligkern.. ตั้งแต่ตอนนั้นก็ยังไม่ได้ commit เลย
> ต้องกลับไปค้นข้อมูลเก่า ๆ
>
> > เพิ่งนึกได้ว่า TeX มันก็คือ turing machine ดีๆ นี่เอง.
> > เราจะใช้ความสามารถของ turing machine อันนี้ มาแก้ปัญหา "ปู่" ได้รึเปล่าครับ?
>
> พอจะขยายความได้ไหมครับ?

ผมก็ลืมๆ, ออกจะมั่วๆ อยู่บ้างครับ.

เพิ่งได้ไปอ่านที่ http://en.wikipedia.org/wiki/TeX#The_typesetting_system
เขาบอกว่า TeX macro expansion เป็น turing-complete.
ทำให้จำได้ว่า TeX macro ก็คือ context-sensitive grammar นั่นเอง.
(เช่นนี้ ก็ไม่ได้เป็นอย่างที่คิดไว้แต่แรก. ฝันมากไปหน่อย)

Theppitak Karoonboonyanan

unread,
Jan 19, 2008, 7:48:09 PM1/19/08
to thai-linux...@googlegroups.com
2008/1/18 Anon Sricharoenchai <anon...@gmail.com>:

> On 1/14/08, Theppitak Karoonboonyanan <th...@linux.thai.net> wrote:
> > 2008/1/14 Anon Sricharoenchai <anon...@gmail.com>:
> >
> > > เรื่อง "ปู่" ใน TeX ตอนนี้ไปถึงไหนแล้วครับ.
> > > ล่าสุดหลังจากที่คุณ Chanop ลองใช้วิธีสร้าง glyph/font หลอกๆ
> > > เมื่อนานมาแล้วนั้น, นอกจากนี้มีใครใช้วิธีอื่นอีกบ้างครับ.
> >
> > ถ้าจำไม่ผิด จะเป็นวิธีของ Werner Lemberg ครับ
> > โดยใช้ ligkern.. ตั้งแต่ตอนนั้นก็ยังไม่ได้ commit เลย
> > ต้องกลับไปค้นข้อมูลเก่า ๆ

ค้นเจอละ อยู่ใน TUGboat Volume 21, Number 2, June 2000
ดาวน์โหลดได้ที่นี่:

http://www.tug.org/TUGboat/Articles/tb21-2/tb67lemb.pdf

เขาใช้ trick ของ afm2tfm ซึ่งผมก็ยังไม่เข้าใจดีนัก ว่าจะแปลงเป็น
implementation ยังไง

จำได้ว่าตอนนั้นเขาส่งไฟล์มาให้ด้วย แต่ไม่รู้อยู่ตรงไหนในเครื่องเก่าผม
ขอเวลาค้นอีกแป๊บ.. ^_^'

> > > เพิ่งนึกได้ว่า TeX มันก็คือ turing machine ดีๆ นี่เอง.
> > > เราจะใช้ความสามารถของ turing machine อันนี้ มาแก้ปัญหา "ปู่" ได้รึเปล่าครับ?
> >
> > พอจะขยายความได้ไหมครับ?
>
> ผมก็ลืมๆ, ออกจะมั่วๆ อยู่บ้างครับ.
>
> เพิ่งได้ไปอ่านที่ http://en.wikipedia.org/wiki/TeX#The_typesetting_system
> เขาบอกว่า TeX macro expansion เป็น turing-complete.
> ทำให้จำได้ว่า TeX macro ก็คือ context-sensitive grammar นั่นเอง.
> (เช่นนี้ ก็ไม่ได้เป็นอย่างที่คิดไว้แต่แรก. ฝันมากไปหน่อย)

ก็คือ เป็นการจัดการด้วย TeX macro ก่อนการ typeset ซึ่งต่างจาก
การจัดการในระดับฟอนต์อย่างที่ทำกันมา

อืม ก็น่าสนใจครับ แต่ถ้าจัดการที่ระดับฟอนต์ได้ ก็จะลดขั้นตอนการปรับแก้

เทพ.
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d(+) s:- a C++ UL P-@ L+++ E--- W+++ N o? K? w-- !O !M V? PS(+)
PE-- Y(-) PGP>+ t? 5? X+ R- tv+ b++ DI D-- G e++ h-- r? y?
------END GEEK CODE BLOCK------

Theppitak Karoonboonyanan

unread,
Jan 22, 2008, 1:08:55 AM1/22/08
to thai-linux...@googlegroups.com
2008/1/20 Theppitak Karoonboonyanan <th...@linux.thai.net>:

> ค้นเจอละ อยู่ใน TUGboat Volume 21, Number 2, June 2000
> ดาวน์โหลดได้ที่นี่:
>
> http://www.tug.org/TUGboat/Articles/tb21-2/tb67lemb.pdf
>
> เขาใช้ trick ของ afm2tfm ซึ่งผมก็ยังไม่เข้าใจดีนัก ว่าจะแปลงเป็น
> implementation ยังไง
>
> จำได้ว่าตอนนั้นเขาส่งไฟล์มาให้ด้วย แต่ไม่รู้อยู่ตรงไหนในเครื่องเก่าผม
> ขอเวลาค้นอีกแป๊บ.. ^_^'

ขุดเจอละครับ วิธีการดูจะ tricky พอสมควร ต้องอาศัยการ merge
ด้วยมือด้วย..

สรุปขั้นตอนคร่าว ๆ คือ

- เตรียม encoding vector พร้อม LIGKERN rule ไว้ โดยเพิ่ม
.left variant ให้กับสระล่างไว้ในช่อง encoding ที่ไม่ได้ใช้
(เขาใช้ 0x80, 0x81, 0x82) ซึ่งจะทำให้สามารถเขียน
LIGKERN สำหรับสระล่างใต้ ป ฝ ฟ (ฬ) แยกจากกรณีทั่วไปได้
ไฟล์นี้เป็นนามสกุล .enc (เช่น thai.enc ..ซึ่งของเราใช้ชื่อว่า
lthuni.enc)
- เตรียม thai-dummy.afm ไว้ โดยให้มี glyph ของ .left variant
ของสระล่างในช่อง encoding ด้วย (เอาของฟอนต์ไหนก็ได้ แค่
copy ค่าของสระล่างแล้วเติม .left ต่อท้ายชื่อ พร้อมทั้งบวกจำนวน
glyph เพิ่มที่บรรทัด "StartCharMetrics" เพราะสิ่งที่เราต้องการ
คือ AFM ที่มีชื่อของ glyph พิเศษเท่านั้น)
- ใช้ afm2tfm แปลง thai-dummy.afm นี้เป็น thai.vpl เตรียมไว้
โดยใช้ thai.enc ประกอบ (ความจริง จุดประสงค์ของขั้นตอนนี้คือ
แปลง thai.enc เป็นข้อมูล LIGTABLE ใน vpl แต่อาศัย
thai-dummy.afm ช่วย เพราะ afm2tfm จะเขียนเฉพาะข้อมูล
ของ glyph ที่มีชื่อใน afm เท่านั้น)

- สำหรับฟอนต์ ก็เตรียม font.enc เอาไว้ โดยกำหนด encoding
vector ให้ map อักขระในตำแหน่งที่เราใส่ใน thai.enc ไว้ว่าเป็น
.left variant ให้ map ไปยังชื่อ glyph ของตัวปกติ (กล่าวคือ
ใน font.enc นี้ จะไม่มี .left variant แต่จะ map อักขระตรง
index พิเศษให้ชี้ไปที่อักขระปกติ)
- ใช้ afm2tfm แปลง font.afm + font.enc ให้เป็น font.vpl

- merge ส่วน LIGTABLE จาก thai.vpl เข้ามาใน font.vpl
(*** ตรงนี้แหละ ที่ต้องทำมือ ***)
ซึ่งหลังจาก merge แล้ว จะได้ vpl ที่มี LIGTABLE ที่สั่ง render
สระล่างใต้ ป ฝ ฟ ด้วย .left variant (จาก thai.enc) บวกกับ
ข้อมูล metrics ของ glyph ที่มีการ map จากช่อง .left variant
ไปหา glyph สระล่างปกติ (จาก font.enc)

- แปลง font.vpl เป็น font.vf ด้วย vptovf ตามปกติ

ใน font map นั้น ต้อง reencode font ด้วย font.enc
ไม่ใช่ thai.enc (เพราะ thai.enc ชี้ไปยัง glyph ที่ไม่มีอยู่จริง)

ผมทดลองทำตามแล้ว ได้ผลจริง แต่จะให้แปลงเข้าระบบ build นี่
ยังคิดหนักอยู่ (โดยเฉพาะช่วงทำมือ)

ต้องขอเวลาคิดต่ออีกหน่อยครับผม :P

ปล. ผม update font จาก thaifonts-scalable ตัวใหม่
เข้ามาใน thailatex CVS แล้ว โดยเพิ่มฟอนต์ใหม่ด้วย
ใครอยากช่วยทดสอบเชิญได้ครับ (ใครใช้ debian/ubuntu
จะมี trick นิดหน่อยให้ install จาก source ผ่าน [ที่ไม่ใช่
การกำหนด texmfdir ให้เป็น /usr/share/texmf-texlive]
ไว้ค่อยพูดถึงทีหลัง ถ้ามีผู้สนใจจริง ๆ เพราะเมลชักยาว)

ถ้าทำเรื่อง "ปู่" เสร็จด้วย ก็น่าจะได้เวลาออก thailatex
รุ่นใหม่ละครับ แต่ถ้ามันยากเกินไป ก็อาจข้ามไปก่อน :P

Theppitak Karoonboonyanan

unread,
Jan 22, 2008, 6:46:08 AM1/22/08
to thai-linux...@googlegroups.com
2008/1/22 Theppitak Karoonboonyanan <th...@linux.thai.net>:

> ผมทดลองทำตามแล้ว ได้ผลจริง แต่จะให้แปลงเข้าระบบ build นี่
> ยังคิดหนักอยู่ (โดยเฉพาะช่วงทำมือ)
>
> ต้องขอเวลาคิดต่ออีกหน่อยครับผม :P

ได้เป็น patch (against CVS) ตามแนบครับ (พยายามใช้ sed
ตอน merge แล้ว เขียนกฎไม่ได้ซะที เลยเล่น awk ซะ :P
หรือใครมีวิธีที่ดีกว่านี้ไหม?)

ทดสอบแล้วได้ผลครับ อาจจะตรวจความเรียบร้อยนิดหน่อยก่อน
commit

thailatex-poo.patch

Anon Sricharoenchai

unread,
Sep 17, 2009, 6:10:14 AM9/17/09
to thai-linux...@googlegroups.com
http://thep.blogspot.com/2008/01/bug-fixed-for-thailatex.html
สรุปว่า ตอนนี้ใช้ สระล่าง 2 ชุด ใช่ไหมครับ?
แล้วมี ข้อเสีย ของการใช้ สระล่าง 2 ชุดไหมครับ?

Theppitak Karoonboonyanan

unread,
Sep 18, 2009, 12:23:53 AM9/18/09
to thai-linux...@googlegroups.com
2009/9/17 Anon Sricharoenchai <anon...@gmail.com>:

> http://thep.blogspot.com/2008/01/bug-fixed-for-thailatex.html
> สรุปว่า ตอนนี้ใช้ สระล่าง 2 ชุด ใช่ไหมครับ?
> แล้วมี ข้อเสีย ของการใช้ สระล่าง 2 ชุดไหมครับ?

ขุดเมลเก่าขึ้นมา เล่นเอาต้องระลึกชาติอยู่นาน..

ใช้สระล่าง 2 ชุดแค่เพียงหลอก ๆ ครับ แค่ให้แยกความแตกต่าง
ในขั้น ligkern เท่านั้น แล้วก็ render ด้วย glyph ชุดเดียวกัน
สรุปว่าในฟอนต์จริงก็มีแค่ชุดเดียว (ถ้าไม่นับชุดล่างอีกชุด
ที่ใช้กับ ฎ ฏ)

ข้อเสีย?.. แค่ระลึกชาติได้นี่ก็ยากโขอยู่ครับ ยังไม่อาจคิดไปถึง
ขั้นนั้น

Anon Sricharoenchai

unread,
Sep 18, 2009, 12:39:15 AM9/18/09
to thai-linux...@googlegroups.com
On 9/18/09, Theppitak Karoonboonyanan <th...@linux.thai.net> wrote:
> 2009/9/17 Anon Sricharoenchai <anon...@gmail.com>:
>
> > http://thep.blogspot.com/2008/01/bug-fixed-for-thailatex.html
> > สรุปว่า ตอนนี้ใช้ สระล่าง 2 ชุด ใช่ไหมครับ?
> > แล้วมี ข้อเสีย ของการใช้ สระล่าง 2 ชุดไหมครับ?
>
>
> ขุดเมลเก่าขึ้นมา เล่นเอาต้องระลึกชาติอยู่นาน..
>
> ใช้สระล่าง 2 ชุดแค่เพียงหลอก ๆ ครับ แค่ให้แยกความแตกต่าง
> ในขั้น ligkern เท่านั้น แล้วก็ render ด้วย glyph ชุดเดียวกัน
> สรุปว่าในฟอนต์จริงก็มีแค่ชุดเดียว (ถ้าไม่นับชุดล่างอีกชุด
> ที่ใช้กับ ฎ ฏ)
>
> ข้อเสีย?.. แค่ระลึกชาติได้นี่ก็ยากโขอยู่ครับ ยังไม่อาจคิดไปถึง
> ขั้นนั้น
>

สระล่างอีกชุดนี่เพิ่มเข้าไปใน font หรือเปล่าครับ?

สามารถใช้กับ font อื่นๆ ได้ทันที โดยไม่ต้อง เพิ่มสระล่างอีกชุดในทุกๆ
font ที่ใช้ หรือเปล่าครับ?

Theppitak Karoonboonyanan

unread,
Sep 18, 2009, 1:03:48 AM9/18/09
to thai-linux...@googlegroups.com
2009/9/18 Anon Sricharoenchai <anon...@gmail.com>:

> On 9/18/09, Theppitak Karoonboonyanan <th...@linux.thai.net> wrote:
>> 2009/9/17 Anon Sricharoenchai <anon...@gmail.com>:
>>
>> > http://thep.blogspot.com/2008/01/bug-fixed-for-thailatex.html
>>  > สรุปว่า ตอนนี้ใช้ สระล่าง 2 ชุด ใช่ไหมครับ?
>>  > แล้วมี ข้อเสีย ของการใช้ สระล่าง 2 ชุดไหมครับ?
>>
>>
>> ขุดเมลเก่าขึ้นมา เล่นเอาต้องระลึกชาติอยู่นาน..
>>
>>  ใช้สระล่าง 2 ชุดแค่เพียงหลอก ๆ ครับ แค่ให้แยกความแตกต่าง
>>  ในขั้น ligkern เท่านั้น แล้วก็ render ด้วย glyph ชุดเดียวกัน
>>  สรุปว่าในฟอนต์จริงก็มีแค่ชุดเดียว (ถ้าไม่นับชุดล่างอีกชุด
>>  ที่ใช้กับ ฎ ฏ)
>>
>>  ข้อเสีย?.. แค่ระลึกชาติได้นี่ก็ยากโขอยู่ครับ ยังไม่อาจคิดไปถึง
>>  ขั้นนั้น
>>
>
> สระล่างอีกชุดนี่เพิ่มเข้าไปใน font หรือเปล่าครับ?

ไม่ครับ

> สามารถใช้กับ font อื่นๆ ได้ทันที โดยไม่ต้อง เพิ่มสระล่างอีกชุดในทุกๆ
> font ที่ใช้ หรือเปล่าครับ?

ได้ครับ

Reply all
Reply to author
Forward
0 new messages