วันจันทร์ที่ 4 มิถุนายน พ.ศ. 2555

Enter รันโปรแกรมใน Mac ไม่ได้

เราใช้ Finder มากขึ้น, รู้สึกว่ามันสะดวกเหมือนกันที่ใช้คีย์ลูกศรกดขวา, ซ้าย, ขึ้นลงเลือกเเข้าโฟลเดอร์ที่ต้องการ. แต่ติดปัญหาอย่างเดียวคือพอถึงโปรแกรมที่ต้องการรัน, เราจะกดคีย์ Enter แล้วเปิดโปรแกรมเหมือนวินโดวส์ไม่ได้. ดูใน Forum พบว่าให้ใช้ Command + O คือ Open ในการเปิดโปรแกรมจากคีย์บอร์ดแทนการดับเบิ้ลคลิก. ก็สะดวกไปอีกแบบ.

วันเสาร์ที่ 26 พฤษภาคม พ.ศ. 2555

ใช้ฟอนต์สารบัญกับ XeTeX

ต่อจากตอนที่แล้วที่ใช้ XeTeX กับภาษาไทยไปแล้ว.  เลยคิดว่าจริงๆแล้วน่าจะใช้ฟอนต์อะไรดี. ทำให้นึกถึงฟอนต์สารบัญ.

ไปดาวน์โหลดฟอนต์ที่
เลือกฟอนต์ทั้งหมดแล้วคลิกขวาเลือก FontBook


เท่านี้ก็ติดตั้งฟอนต์สารบัญในระบบแล้ว. ดูที่ชื่อฟอนต์จาก FontBook จะเห็นว่ามันชื่อ "TH Sarabun New" (ไม่รู้ว่า New กับไม่ New ต่างกันแค่ license อย่างเดียวหรือเปล่า) ก็นำชื่อนี้มาใช้ใน XeTeX.


\documentclass{article}
\usepackage{fontspec}
\setmainfont{TH Sarabun New}
\XeTeXlinebreaklocale 'th_TH'

\begin{document}
วิญญูมุ่งรู้พิฆาตปื้นขี้ฝุ่นเลษฏุ
\end{document}


เหมือนเดิมคือต้องการรู้ว่าสระวรรณยุกต์วางตำแหน่งได้สวยหรือไม่. สรุปว่าลงตำแหน่งได้ถูกต้องและสวยงาม.


ถ้าจะเขียนหนังสือก็คงจะใช้ฟอนต์นี้เป็น default แล้วกัน.

วันศุกร์ที่ 25 พฤษภาคม พ.ศ. 2555

ลอง Drupal ใน Max OS X Tiger

สิ่งที่ต้องการทำ: ติดตั้ง Drupal ใน Mac OS X Tiger (10.7.3) โดยลงโปรแกรมอื่นๆที่ไม่ได้มากับ Mac ให้น้อยที่สุด

เริ่มต้นจากตอนนี้ใช้ Apache ได้แล้วเพราะมันมากับ Mac ตั้งแต่แรก. ก็เหลือก็เป็น PHP กับ Database ว่ามีอะไรบ้างที่มากับ Mac ด้วย.

ลองพิมพ์คำสั่งเช่น psql ก็เหมือนกับจะมี Postgres มาด้วย. แต่หา postmaster โปรเซสไม่เจอ. พยายามหาแล้วแต่หาไม่เจอ, เลยยอมแพ้ไป. ลองพิมพ์ sql แล้วกด Tab ก็เห็นว่ามี Sqlite3 ซึ่งเป็นฐานข้อมูลแบบไม่ต้องใช้เซิร์ฟเวอร์, เก็บข้อมูลลงไฟล์และใช้ SQL query ได้ซึ่ง Drupal ก็รองรับอันนี้ด้วยก็น่าจะลอง Sqlite3 ดู.

สำหรับ PHP. เท่าที่ดูใน config file ที่อยู่ที่ /etc/apache2 จะเห็นว่าน่าจะรองรับ PHP อยู่แล้ว.


$ grep php httpd.conf
LoadModule php5_module libexec/apache2/libphp5.so

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.html index.php


เลยเข้าไปที่ /Library/WebServer/Documents แล้วลองสร้าง index.php ที่มี phpinfo() ดู, ก็ใช้ได้เลย. สรุปว่าติดตั้ง Drupal ได้.

ทีนี้ /Library/WebServer/Documents มันเข้าถึงไม่สะดวก. จำยากเลยสร้าง soft link ไว้ที่ home ดีกว่า.


$ ln -s /Library/WebServer/Documents ~/www


ดาวน์โหลด Drupal จาก http://ftp.drupal.org/files/projects/drupal-7.14.tar.gz โดยใช้บรรทัดคำสั่ง


$ wget -nd http://ftp.drupal.org/files/projects/drupal-7.14.tar.gz
-bash: wget: command not found


ได้รู้ว่าม่ี curl แทนจึงต้องมาใช้ curl ทั้งๆที่ไม่เคยใช้มาก่อน.


$ curl http://ftp.drupal.org/files/projects/drupal-7.14.tar.gz | tar xzvf -
$ mv drupal-7.14 drupal


แล้วเข้าไปที่ http://localhost/drupal ติดตั้ง drupal เลือก sqlite ก็เป็นอันเสร็จสิ้น. อาจจะติด permission ตอนสร้าง default/files กับ settings.php บ้างแต่เข้าไปแก้ permission แล้วก็ไม่เป็นไร.

วันอาทิตย์ที่ 29 เมษายน พ.ศ. 2555

ACL : Access Control Lists

หลังจากที่ทำความเข้าใจกับ Apache บน Mac (Lion) เรียบร้อยแล้ว. ปัญหาที่ค้างไว้คือ DocumentRoot ที่อยู่ที่ /Library/Webserver/Documents คือโฟลเดอร์นี้มันเป็นของ root ทำให้เวลาจะสร้างไฟล์ในโฟลเดอร์นี้ไม่สะดวก, มันสร้างไฟล์ใหม่ไม่ได้ด้วยยูสเซอร์ที่ทำงานอยู่. และผมก็ไม่อยากไปเปลี่ยนคอนฟิกไฟล์ด้วย.

toybox2:Documents poonlap$ pwd
/Library/WebServer/Documents
toybox2:Documents poonlap$ ls -la .
total 80
drwxr-xr-x+ 7 root  wheel    238 Apr 29 08:40 ./
drwxr-xr-x  5 root  wheel    170 Jul  8  2011 ../
-rw-r--r--  1 root  wheel   3726 Jun 26  2011 PoweredByMacOSX.gif
-rw-r--r--  1 root  wheel  31958 Jun 26  2011 PoweredByMacOSXLarge.gif
-rw-r--r--  1 root  wheel     13 Apr 29 01:03 index.html
-rw-r--r--  1 root  wheel     44 Jul  8  2011 index.html.en
drwxr-xr-x  3 root  wheel    102 Jun 25  2011 postgresql/


ในระบบยูนิกซ์ที่จัดการ permission ของไฟล์และโฟลเดอร์อย่างง่ายๆให้เขียนได้, อ่านได้ โดยแบ่งเป็นประเภท เจ้าของ (owner), กรุ๊ป (group) และอื่นๆ (other) ก็ใช้กับกรณีได้เหมือนกัน. ถ้าจะทำให้ยูสเซอร์ไปเขียนหรือสร้างไฟล์ต่างๆในโฟลเดอร์นี้ให้สะดวกมีหลายทาง

  1. ทำตัวเองให้เป็น root เช่น sudo -s แล้วไปเขียน (ไม่สะดวกและไม่ปลอดภัย)
  2. เปลี่ยน DocumentRoot ในคอนฟิกไฟล์ Apache (อันนี้อยากจะทิ้งคอนฟิกไว้อย่างนั้น, เลยไม่ทำ)
  3. ทำยูสเซอร์ตัวเองให้อยู่ในกลุ่ม wheel และไปแก้ chmod ให้กรุ๊ป wheel ทำอะไรกับโฟลเดอร์นั้นก็ได้ (ไม่อยาก assign ตัวเองในกลุ่ม wheel)
  4. ACL : Access Control Lists น่าจะเป็นทางออกที่ดีที่สุด.
หลังจากที่อ่าน man chmod แล้วก็เลยทำแบบนี้
toybox2:WebServer poonlap$ sudo chmod +a "poonlap allow delete_child,add_file" Documents/
toybox2:WebServer poonlap$ ls -eld Documents/
drwxr-xr-x+ 7 root  wheel  238 Apr 29 08:40 Documents//
 0: user:poonlap allow add_file,delete_child
toybox2:WebServer poonlap$ cd Documents/
toybox2:Documents poonlap$ touch testfile
toybox2:Documents poonlap$ rm testfile 

ทีนี้เฉพาะยูสเซอร์ poonlap ก็สามารถทำอะไรกับ /Library/Webserver/Document ได้แล้ว.

ทดสอบ Apache ที่มากับเครื่อง Macbook (Lion)

เครื่อง Macbook ทั้งหลายที่มี Darwin เป็นระบบปฏิบัติการมันก็เป็น UNIX ดีๆนี่เอง. แต่ก่อนผมมองพวก Mac เป็นแฟชั่น, พวกดีไซน์เนอร์ชอบใช้. เดี๋ยวนี้รู้สึกจะเปลี่ยนไปแล้วตั้งแต่มาเป็น Darwin ได้รับความสนใจจาก developer, โปรแกรเมอร์มากขึ้น. ใน Max OSX (Lion) จะมี infrastructure เครื่องมือต่างๆสำหรับพัฒนาเว็บมาด้วยพร้อมโดยไม่ต้องไปลงพวก Apache, php หรือ database server เองให้เสียเวลา. ไม่ต้องใช้ Macport หรือ fink.

วันนี้เลยอยากลอง Apache ก่อนว่าเป็นอย่างไรใน Mac. ลองผิดลองถูกเองจะได้รู้ว่ามันเป็นอย่างไร.

จาก terminal จะมีคำสั่ง apachectl ไว้เปิดปิดเซิร์ฟเวอร์. วิธีเช็คง่ายๆคือเปิดเบราเซอร์ แล้วใส่ที่อยู่เป็น localhost ถ้าเว็บเซิร์ฟเวอร์ในเครื่องไม่ได้รันอยู่ มันก็เปิดไม่ได้.

$ sudo apachectl start

แล้วลองไปที่ http://localhost ใหม่ควรจะเห็นเป็นแบบนี้.


เช็คจากโปรเซสประกอบด้วย จะเห็นว่ามีโปรเซสชื่อ httpd อยู่ด้วย.

toybox2:Documents poonlap$ ps -ef | grep http
    0  1562     1   0  7:49AM ??         0:00.09 /usr/sbin/httpd -D FOREGROUND
   70  1564  1562   0  7:49AM ??         0:00.00 /usr/sbin/httpd -D FOREGROUND
  501  1566   941   0  7:49AM ttys001    0:00.00 grep http

ต่อไปคงต้องหาว่า DocumentRoot มันอยู่ที่ไหน แต่คงต้องหาก่อนว่า config ไฟล์ของ Apache บน Mac มันอยู่ที่ไหน. โดยปกติ command line บนยูนิกซ์มันจะมี option ที่คล้ายๆกันเช่น -h หมายถึง help ก็เลยลอง -he ดูก่อนเผื่อจะมี hint อะไรบ้าง.

toybox2:sbin poonlap$ sudo apachectl -h
Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
                       [-C "directive"] [-c "directive"]
                       [-k start|restart|graceful|graceful-stop|stop]
                       [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S]
Options:
  -D name            : define a name for use in  directives
  -d directory       : specify an alternate initial ServerRoot
  -f file            : specify an alternate ServerConfigFile
  -C "directive"     : process directive before reading config files
  -c "directive"     : process directive after reading config files
  -e level           : show startup errors of level (see LogLevel)
  -E file            : log startup errors to file
  -v                 : show version number
  -V                 : show compile settings
  -h                 : list available command line options (this page)
  -l                 : list compiled in modules
  -L                 : list available configuration directives
  -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
  -S                 : a synonym for -t -D DUMP_VHOSTS
  -t -D DUMP_MODULES : show all loaded modules 
  -M                 : a synonym for -t -D DUMP_MODULES
  -t                 : run syntax check for config files
  -T                 : start without DocumentRoot(s) check

หลังจากอ่านแล้วก็คงต้องเดา(แบบมีเหตุผล)ว่าน่าจะลอง option -V ต่อ

toybox2:sbin poonlap$ sudo apachectl -V
Server version: Apache/2.2.21 (Unix)
Server built:   Nov 15 2011 15:12:57
Server's Module Magic Number: 20051115:30
Server loaded:  APR 1.4.2, APR-Util 1.3.10
Compiled using: APR 1.4.2, APR-Util 1.3.10
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/private/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

โอเค ตอนนี้เรารู้แล้วว่า config ไฟล์ของ Apache นี้อยู่ที่ /private/etc/apace2/httpd.conf และเข้าไปดูในไฟล์แล้ว, ดูเหมือน DocumentRoot ของเราจะเป็น /Library/WebServer/Documents. ทีนี้เลยลองเขียน index.html ง่ายๆในไดเรกทอรี่นั้น.

toybox2:Documents poonlap$ cat /Library/WebServer/Documents/index.html
Hello World!

แล้วลองเปิดเบราเซอร์ดูอีกครั้ง. ปรากฏว่ายังใช้ไม่ได้. ในเบราเซอร์บอกว่า 404 Not found เหมือนเดิม.
โอเค ไม่เป็นไรลองหาข้อมูลในเว็บเพิ่มเติมพบว่าการเปิดใช้ Apache ใน Mac ทำได้โดยไปที่ System Preference > Sharing แล้วเลือก Web sharing.


แล้วไปดูที่เบราเซอร์ใหม่อีกครั้ง. คราวนี้ใช้ได้แล้ว.


เลยสงสัยว่าทำไมตอนแรกใช้ไม่ได้. เลยลองดูโปรเซสอีกทีว่าเป็นอย่างไรหลังเปิด Web sharing.

toybox2:Documents poonlap$ ps -ef | grep http
    0  1588     1   0  8:03AM ??         0:00.08 /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON
   70  1590  1588   0  8:03AM ??         0:00.00 /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON
   70  1595  1588   0  8:05AM ??         0:00.00 /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON
  501  1605   941   0  8:13AM ttys001    0:00.00 grep http

ทำให้รู้ว่า, ถ้ารัน apachectl จากบรรทัดคำสั่ง โปรเซสมันจะเป็นแค่ httpd -D FOREGROUND แต่ถ้าเปิด Web sharing โปรเซสจะมี -D WEBSHARING_ON ต่อท้ายด้วย. เลยต้องกลับไปดูใหม่ว่า -D มันคืออะไร.

-D name            : define a name for use in  directives

มันเป็นคำที่ตั้งไว้ให้ใช้กับ ifdefine ใน config ไฟล์. ดังนั้นเลยต้องกลับดูใน config ไฟล์ใหม่


#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Library/WebServer/Documents"

ทำให้รู้ว่า DocumentRoot อยู่ที่ /Library/WebServer/Documents จริง, ก็ต่อเมื่อมีตั้ง WEBSHARING_ON เท่านั้น. ถ้ารัน apache จากบรรทัดคำสั่งเอง, มันจะเป็น -D FOREGROUND ซึ่งไม่มีกำหนดไว้ในไฟล์คอนฟิก, เลยทำให้ไม่มี DocumenetRoot.

สรุป​สั้น

  • เปิด Web sharing จาก System preferences
  • คอนฟิกไฟล์อยู่ที่ /private/etc/apache2/httpd.conf หรือ /etc/apache2/httpd.conf ก็ได้เพราะมี soft link จาก /etc ไปที่ /private/etc.
  • Apache ใน Mac Lion มีการใช้ -D ทำให้ต้องดูคอนฟิกไฟล์ดีๆ
  • ทางที่ดีควรไปเปลี่ยน Document ในคอนฟิกไฟล์ใหม่เลยเพราะรู้สึกว่าสถานที่ไม่ค่อยสะดวกเท่าไรนัก



วันจันทร์ที่ 19 มีนาคม พ.ศ. 2555

ทดสอบ XeTeX กับภาษาไทยบน Mac

หลังจากลอง MacTeX เมื่อวันก่อนแล้ว วันนี้พยายามเรียนรู้มากขึ้นโดยการทดสอบใช้ภาษาไทยกับ XeTeX บน Mac ดู.

ก่อนอื่นเริ่มจากเปิด TeXShop ขึ้นมาก่อนแล้วจัดการตั้งค่าต่างๆให้ใช้ภาษาไทยเท่าที่จำเป็น (minimal) ดังนี้


\documentclass{article}
\usepackage{fontspec}
\setmainfont{Thonburi}
\XeTeXlinebreaklocale 'th_TH'

\begin{document}
วิญญูมุ่งรู้พิฆาตปื้นขี้ฝุ่นเลษฏุ
\end{document}


เสร็จแล้ว save ชื่อไฟล์เป็นอะไรก็ได้ แต่ตรง Encoding ให้เลือกเป็น Unicode (UTF-8) ซึ่งจะได้เป็น Internationalization กับเขาหน่อย.



ตรงแถบตัวเลือกด้านบน เลือก XeLaTeX แล้วคลิกที่ Typeset หรือ command-T ก็ได้.


ถ้าไม่มีอะไรผิดพลาด เสร็จแล้วจะได้ PDF ตามตัวอย่างซึ่งเราระบุไว้ว่าใช้ฟอนต์ Thonburi.


จะสังเกตเห็นว่าผลออกมาโอเค แต่ยังไม่เปอร์เฟค คือสระยังลอย, สระอูใต้ ญ ฐานยังมีอยู่ ฯลฯ. อันนี้เป็นเรื่องของฟอนต์ที่ข้อมูลในฟอนต์ไม่มีข้อมูลที่บอกกับ XeTeX ว่าเวลาเจออักษรเรียงกันแบบไหนต้องทำอย่างไร. เดี๋ยวค่อยมาดูต่อ.

เผอิญพบว่า ถ้าปิดไฟล์ทดสอบภาษาไทยนี้แล้วเปิดใหม่ ตรงที่เขียนภาษาไทยไว้จะเพี้ยนหมด. ซึ่งประมาณได้ว่าเป็นเรื่องของ encoding ทั้งที่เราบันทึกเป็น UTF-8 แล้วแต่ตอนเปิดออกมามันไม่รู้. เลยคิดว่าต้องไปตั้งค่าที่ preference ของ TeXShop ตรง Encoding ให้เลือก Unicode (UTF-8) เป็น default ไปเลย. และอีกที่คือตรง Typesetting ก็เลือก XeLaTeX เป็นตัว type setting ไปเลยจะได้ไม่ต้องไปเปลี่ยนที่ตัวเลือก type setting ด้านหน้า.



กลับมาที่เรื่องฟอนต์. XeTeX สามารถใช้ฟอนต์จากระบบปฏิบัติการได้ผ่าน package ชื่อ fontspec ซึ่งฟอนต์ Thonburi ก็เป็นฟอนต์ TrueType ที่อยู่ใน Mac อยู่แล้ว. ลองดาวน์โหลด pre-compiled font จากโปรเจค font-tlwg มาใส่ใน Mac (ผ่าน FontBook ) ดู ก็ไม่ได้ผล. เดาว่า pre-complied font เหล่านี้ไม่ได้ OpenType และไม่มีข้อมูลจัดเรียงอักษรในตัวมัน.


ที่นี้ลองไปดาวน์โหลดฟอนต์สารบรรณ ปรับปรุงรุ่นใหม่ แล้วติดตั้งในระบบดู. ผลปรากฏว่าโอเค. ผมเดาว่าอาจจะต้องไป compile ฟอนต์ TLWG ใหม่เองให้มันรองรับ OTF แล้วลองเอามาใช้ดูครั้งต่อไป.




วันศุกร์ที่ 16 มีนาคม พ.ศ. 2555

ลองใช้ TeX บน Mac OS X

ไม่ได้ใช้ TeX มาหลายปีแล้วอะไรๆเปลี่ยนไปเยอะ เมื่อวานลองมาใช้ MacTeX ซึ่งติดตั้งไว้นานแล้วแต่ยังไม่ได้ลองซักที. ตอนแรกก็ไปรันจาก terminal ด้วยความเคยชินกับการใช้ LaTeX ในระบบยูนิกซ์. ไปดูอีกทีเห็นมี TeXShop มาพร้อมกับ MacTeX ด้วย. และได้เรียนรู้เพิ่มเติมว่าใน MacTeX นั้นจะมี XeTeX ซึ่งรองรับ Unicode หมายถึง
  • เราสามารถเขียนภาษามากกว่าหนึ่งภาษาได้ใน LaTeX
  • อย่างน้อยในระบบต้องมีการรองรับให้พิมพ์หลายภาษาได้ ซึ่งใน Mac โอเคเราสามารถตั้งค่าระบบให้พิมพ์หลายภาษาได้
  • ต้องมีบรรณาธกรณ์ (editor) ที่รองกรับการเขียนหลายภาษาและแสดงผลได้โอเค. อันนี้คือ TeXShop.
  • ไฟล์ต้นฉบับที่เขียนถ้าเขียนหลายภาษา ก็ควรจะบันทึกเป็น UTF-8 เป็นมาตรฐานได้. แต่ก่อนเวลาเขียน LaTeX ภาษาไทยเข้ารหัสเป็น TIS-620 แต่เข้าใจว่าก็มีวิธีเข้ารหัสเป็น unicode ได้เหมือนกัน (ไม่เคยลอง)
  • ฟอนต์ที่จะใช้ต้องแสดงภาษาต่างๆที่ต้องการใช้ได้. ซึ่ง XeTeX สามารถใช้ฟอนต์ TTF, OTF ที่มีอยู่ในระบบได้เลย. ซึ่งตัดความยุ่งยากต่างๆนานาไป.
  • ถ้าเป็นภาษาที่ไม่ช่องไฟ เช่นภาษาไทย ต้องตัดคำขึ้นบรรทัดใหม่ได้ถูกต้อง. ซึ่งตรงนี้ XeTeX ใช้ library ICU ช่วย. แต่ก่อนถ้าใช้ Thai LaTeX ไฟล์ต้นฉบับต้องไปตัดคำก่อนด้วย swatch หรือ cttex. แต่ถ้าใช้ XeTeX ไม่ต้องผ่านโปรแกรมตัดคำเหล่านี้แล้ว. สามารถใช้ไฟล์ต้นฉบับเป็น input ตรงๆได้เลย.
  • สำหรับภาษาไทย ยังไม่ได้ลอง แต่เข้าใจว่าเรื่องสระวรรณยุกต์กระโดด, ลอย ขึ้นอยู่กับฟอนต์ (ข้อมูลในฟอนต์) ที่ใช้ว่าจะแสดงได้สวยหรือไม่.
เอกสารที่ไปเจอมาที่สรุปได้ดีเกี่ยวกับการใช้ภาษาไทยกับ TeX เขียนโดยคุณ Hin-Tak Leung (ไม่แน่ใจว่าชาติอะไร) เรื่อง Type setting Thai with LaTeX. สรุปแยกแยะไว้เป็นขั้นเป็นตอนดี คงจะหาเวลามาสรุปเป็นภาษาไทยอีกครั้ง. ลองใช้ XeTeX โดยเปิด TeXShop ขึ้นมาก่อน, แล้วเลือกตรง template เป็น XeTeX template. จะเป็นประมาณแบบนี้.

% XeLaTeX can use any Mac OS X font. See the setromanfont command below.
% Input to XeLaTeX is full Unicode, so Unicode characters can be typed directly into the source.

% The next lines tell TeXShop to typeset with xelatex, and to open and save the source with Unicode encoding.

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass[12pt]{article}
\usepackage{geometry}                % See geometry.pdf to learn the layout options. There are lots.
\geometry{letterpaper}                   % ... or a4paper or a5paper or ... 
%\geometry{landscape}                % Activate for for rotated page geometry
%\usepackage[parfill]{parskip}    % Activate to begin paragraphs with an empty line rather than an indent
\usepackage{graphicx}
\usepackage{amssymb}

% Will Robertson's fontspec.sty can be used to simplify font choices.
% To experiment, open /Applications/Font Book to examine the fonts provided on Mac OS X,
% and change "Hoefler Text" to any of these choices.

\usepackage{fontspec,xltxtra,xunicode}
\defaultfontfeatures{Mapping=tex-text}
\setromanfont[Mapping=tex-text]{Hoefler Text}
\setsansfont[Scale=MatchLowercase,Mapping=tex-text]{Gill Sans}
\setmonofont[Scale=MatchLowercase]{Andale Mono}
\setmainfont{Thonburi}
\XeTeXlinebreaklocale 'th_TH'
\title{Brief Article}
\author{The Author}
%\date{}                                           % Activate to display a given date or no date

\begin{document}
\maketitle

% For many users, the previous commands will be enough.
% If you want to directly input Unicode, add an Input Menu or Keyboard to the menu bar 
% using the International Panel in System Preferences.
% Unicode must be typeset using a font containing the appropriate characters.
% Remove the comment signs below for examples.

% \newfontfamily{\A}{Geeza Pro}
% \newfontfamily{\H}[Scale=0.9]{Lucida Grande}
\newfontfamily{\J}[Scale=0.85]{Osaka}

% Here are some multilingual Unicode fonts: this is Arabic text: {\A السلام عليكم}, this is Hebrew: {\H שלום}, 
and here's some Japanese: {\J 今日は}.

สวัสดีครับ \XeTeX
ที่อยู่ปู่ป้า
\end{document}  

ตรงบรรทัด \setmainfont{Thonburi} \XeTeXlinebreaklocale 'th_TH' ใส่เพิ่มเข้าไปเอง. ให้เซ็ตฟอนต์หลักที่จะใช้เป็นฟอนต์ Thongburi ที่อยู่ในเครื่อง Mac อยู่แล้ว. และตรงที่จะทำให้ XeTeX ตัดคำภาษาไทยขึ้นบรรทัดได้ถูกต้องคือ \XeTeXlinebreaklocale 'th_TH' กดตรงปุ่ม Typeset หรือ Command T ก็จะไปรัน XeTeX ให้ได้ผลดังนี้.

สำหรับตัวอย่างผลการตัดคำขึ้นบรรทัดใหม่เป็นดังนี้


ถือว่าใช้ได้ดีทีเดียว. เดี๋ยววันหลังมีเวลาค่อยมาดูรายละเอียดกันใหม่.

สำหรับคนที่ไม่ได้ใช้ Mac. ใน Windows ก็จะมี MikTeX และ XeTeX สำหรับลินุกซ์ก็มีแล้วด้วย. บล็อก Thai LaTeX and MATLAB เขียนเรื่องกับกับ LaTeX บนวินโดวส์ไว้เยอะดี.

วันศุกร์ที่ 9 มีนาคม พ.ศ. 2555

หนังสือลินุกซ์ภาษาไทย

วันนี้ตัดสินใจเอาหนังสือที่เขียนเมื่อ 10 ปีที่แล้วมาแจกทางอินเทอร์เน็ต. ถ้าจำไม่ผิดน่าจะเริ่มเขียนหลังจากผมลาออกจาก Sun Microsystems K.K. (ชื่อเป็นทางการของ Sun Microsystems ที่ญี่ปุ่น) ระยะนั้นว่างงานพักใหญ่เลยคิดว่าอยากจะเขียนหนังสือเกี่ยวกับลินุกซ์ด้วยลินุกซ์. คือใช้เครื่องมือในลินุกซ์เขียนได้แก่ LaTeX, emacs, Dia, Xfig มีอะไรใช้ได้ใช้หมด.

แนวทางหนังสือที่ตั้งใจคือเป็นหนังสือที่เป็นความรู้จริงๆ คือไม่ใช่เอา screen capture ลินุกซ์ดิสโทรต่างๆ มาลงในหนังสือ สอนวิธีติดตั้ง, สอนใช้ซอฟต์แวร์ที่ดิสโทรต่างๆมีมาให้. อยากจะเน้นความรู้จริงๆเช่น shell, ประวัติ วิธีการใช้ ให้ต่อยอดได้. เคยอ่านหนังสือ Unix Programming Environment ของ Kernighan กับ Rob Pike แล้วอยากให้เป็นอย่างนั้น (แต่ไม่ดีเท่าแน่นอน). ไม่ต้องมีรูปมาก อ่านได้เรื่อยๆ อ่านแล้วเข้าใจ.

เริ่มเขียนได้สักพักก็รู้สึกว่างานเขียนแบบนี้ไม่ง่าย. ต้องค้นคว้า. เรื่องบางเรื่องค้นไปค้นมากว่าจะเขียนได้ เหมือนกับ detour ออกนอกทางไปก็มี. บางครั้งก็ไปสนใจกับเครื่องมือที่ใช้เขียนหนังสือมากเกินไป เช่นลองเข้าเจาะ LaTeX ภาษาไทยให้มากขึ้น, ดู emacs ให้มากขึ้น, ดูเรื่องฟอนต์ ก็เป็นผลพลอยได้ไป. แต่จริงๆแล้วผมรู้ตัวว่าผมไม่ใช่ developer, แค่อยากเขียนหนังสือดีๆเล่มหนึ่งเท่านั้น.

หลังจากที่ออกจาก Sun Microsystems ก็ได้พี่ฮุ้ยแนะนำให้ไปทำงานที่ UNU. มีเวลามากขึ้น, เขียนได้มากขึ้น. กลับมาเมืองไทย, เวลาหายไปไหนไม่รู้ เขียนได้น้อยลง. จนกลายเป็นว่าไม่ได้เขียนอีกต่อไป. ทำให้หนังสือเล่มนี้ไม่จบและไม่เคยเผยแพร่ที่ไหน.

เคยติดต่อ Se-ed แต่เขาบอกว่าไม่ใช่หนังสือตลาดขายยาก. เคยส่งต้นฉบับให้ SIPA แต่ก็ไม่ได้เป็นหนังสือจริงๆ.

วันนี้ผ่านไปนานแล้ว. เนื้อหาบางอย่างอาจจะโบราณ แต่เนื้อหาบางอย่างก็ไม่ตาย เหมือนกับ UNIX ที่ไม่ตาย. เหมือนกับหนังสือ UNIX Programming Environment ที่วันนี้ยังอ่านแล้วก็ยังใช้ได้. วันนี้เลยสร้าง Facebook page มาแจกหนังสือที่เขียนไม่เสร็จนี้ดู.  หวังว่าจะเป็นประโยชน์ให้กับผู้อื่นที่สนใจ.

ดาวน์โหลดและแสดงความคิดเห็นได้ที่ Poonlap Linux Book