เขียน LaTeX ด้วย VSCode และ TeX Live Docker Image — EP2
Tags: tlwg, latex, thai, vscode
Published: 2021-03-25 23:02:09

---
title: เขียน LaTeX ด้วย VSCode และ TeX Live Docker Image — EP2
published: true
date: 2021-03-25 22:54:05 UTC
tags: tlwg,latex,thai,vscode
canonical_url: 
---

### เขียน LaTeX ด้วย VSCode และ TeX Live Docker Image — EP2

หลังจากสามารถจัดการและใช้งาน Docker Container ได้แล้วคราวนี้ลองมาเขียน LaTeX กับ VSCode กันดูครับ ถ้าใครไม่เคยเขียนมาก่อนก็คงต้องทำการบ้านมาบ้าง เพราะผมไม่ได้ลงรายละเอียดทั้งหมด

[เขียน LaTeX ด้วย VSCode และ TeX Live Docker Image — EP1](https://dev.to/mrchoke/latex-vscode-tex-live-docker-image-ep1-18aj)

### Attach Container

![](https://cdn-images-1.medium.com/max/934/1*IjHZcRbiKZXsK-f0PirBCw.png)<figcaption>Attach to New Window</figcaption>

เลือกรูป Computer บน Side Bar ด้านซ้าย แล้วก็ Click ขวาบนชื่อ Container ที่เราต้องการใช้งาน (สั่ง run ไว้ก่อนหน้านี้แล้ว) แล้วเลือก `Attach in New Window` ก็จะปรากฎหน้าต่างใหม่ขึ้นมาดังรูปถัดไป

![](https://cdn-images-1.medium.com/max/1024/1*AP240OqZUZaye7l67ow5-Q.png)<figcaption>Workspace ใหม่</figcaption>

ซึ่งจะมี Terminal ของ Container มาให้ด้วยให้เราสร้าง Folder สำหรับทำเขียน LaTeX ด้วยคำสั่งดังนี้

![](https://cdn-images-1.medium.com/max/1024/1*aIGthVEtrPkNPmqN10FEzg.png)<figcaption>สร้าง Folder</figcaption>

เนื่องจากตอนเราสร้าง container ได้มีการ mount volume ไว้ใน /root/data ดังนั้นให้เราเข้าไปใน /root/data แล้วสร้าง folder ขึ้นมา 1 folder

```shell
mkdir /root/data/latex1
```

จะสั่งแบบในรูปหรือสั่งตามตัวอย่างก็ได้

### เปิด Folder ใน Workspace

เปิดจาก terminal ง่ายๆ ด้วยคำสั่ง

```bash
code /root/data/latex1
```

หรือจะใช้ mouse click ที่รูป icon files บน Side Bar ด้านซ้าย และ Click ที่ปุ่ม Open Folder

![](https://cdn-images-1.medium.com/max/1024/1*cSEPrOV_f5HarrkVv6uoGQ.png)<figcaption>Click Open Folder</figcaption>

ใส่ path หรือจะ Click เลือกไปเรื่อยๆ ก็ได้ดังรูปด้านล่าง

![](https://cdn-images-1.medium.com/max/1024/1*wFiGwYY5I-Gfe6IspkOB3g.png)<figcaption>เลือก Folder ที่เราสร้างไว้</figcaption>

![](https://cdn-images-1.medium.com/max/1012/1*AgUFH0RwTc2Ub8E53YbwTw.png)<figcaption>สร้าง File ใหม่</figcaption>

เมื่อเปิด Folder เรียบร้อยให้ Click ที่ icon new file หรือ Click ขวาบนพื้นที่ว่างในช่อง แล้วเลือก New File จาก Menu ดังรูปด้านบน

ตั้งชื่อ file1.tex

![](https://cdn-images-1.medium.com/max/1024/1*brW_sT4WeTPnSo6Tsymsqg.png)<figcaption>New File</figcaption>

ใส่คำสั่ง LaTeX แรกดังตัวอย่าง

```latex
\documentclass{article}
\title{My First \LaTeX{} Document}
\author{MrChoke}
\date{\today}
\begin{document}
   \maketitle
   Hello \LaTeX{} world!
\end{document}
```

อ่านเกี่ยวกับ LaTeX เพิ่มเติมได้ที่

<iframe src="https://drive.google.com/viewerng/viewer?url=https%3A//linux.thai.net/%7Ethep/docs/latex/latex-1.pdf&amp;embedded=true" width="600" height="780" frameborder="0" scrolling="no"><a href="https://medium.com/media/ff54de4b800cb059c6627c3b4733d06d/href">https://medium.com/media/ff54de4b800cb059c6627c3b4733d06d/href</a></iframe>

![](https://cdn-images-1.medium.com/max/1024/1*aiTwdtXIbhBIG98zhmyhSA.png)<figcaption>คำสั่ง LaTeX</figcaption>

หลังจากนี้เราสามารถสั่งให้ Build คำสั่งนี้ได้แล้วโดยการ Click ที่ปุ่มสีเขียวด้านบนขวา

![](https://cdn-images-1.medium.com/max/278/1*7n11aG_uvz9FWUufbo2c5w.png)<figcaption>ปุ่มคำสั่งของ LaTeX Workshop Extension</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*7i3WJ7ct04M7eJrm-YLlug.png)<figcaption>หลังจาก Build</figcaption>

ถ้าหาก Build สำเร็จจะมี files ต่างๆ เกิดขึ้นทางด้านซ้ายมือ โดยเฉพาะ PDF File คือเป้าหมายของเราถ้ามี Error ตัว Extension ก็จะแจ้งเตือนเรามา ก็ต้องไล่อ่านว่าเกิดจากอะไร

![](https://cdn-images-1.medium.com/max/1024/1*FM46W1RCzKfcOzmN9sYOeQ.png)<figcaption>PDF View</figcaption>

ถ้าเราต้องการแสดงผล PDF ก็ให้ Click ที่ปุ่มถัดจากปุ่ม Build สีเขียว ที่มีรูปแว่นขยาย ก็จะได้เหมือนรูปด้านบน หลังจากนี้ถ้าเราแก้ไขคำสั่ง LaTeX แล้ว save มันก็จะทำการ Build ให้อัตโนมัติและแสดงผล PDF ให้ทันทีด้วยเช่นกัน

สำหรับค่า defualt จากตัวอย่างด้านบนตอนสั่ง build จะใช้ engine pdfLaTeX นะครับ

### ภาษาไทย

ถ้าเราเขียนเอกสารภาษาอังกฤษก็สบายหน่อยเพราะตัวอย่างข้างบนก็เพียงพอแล้วแต่ถ้าเราจะใช้ภาษาไทยใน LaTeX ละเราต้องทำอย่างไร และ ต้องรู้อะไรบ้าง

#### เลือก Engine

การใช้ LaTeX Engine ที่นิยมหลักๆ ก็จะมี

- pdfLaTeX
- XeLaTeX
- LuaLaTeX

#### pdfLaTeX

โครงการภาษาไทยสำหรับ LaTeX หรือ ThaiLaTeX เป็นโครงการแรกๆ ที่ Contribute สภาวะแวดล้อมการใช้งานภาษาไทยเข้าไป อ่านรายละเอียดได้ที่

[https://linux.thai.net/projects/thailatex](https://linux.thai.net/projects/thailatex)

ซึ่งหลัก ๆ เป็นการกำหนดสภาวะแวดล้อมภาษาไทยให้ pdfLaTeX เนื่องจาก pdfLaTeX ค่อนข้างล้าสมัยการใช้ fonts ก็มีข้อจำกัดไม่สามารถใช้ fonts ใหม่ๆ อย่าง OpenType ได้การตัดคำก็ต้องทำเองก่อนจะทำการ Build Project การ shapping สระ และ วรรณยุกต์ก็ยังต้องใช้แบบเก่า

มาดูตัวอย่างการใช้ภาษาไทยด้วย pdfLaTeX กันครับ

#### pdfLaTeX — Thai LaTeX

ตัวอย่างคำสั่ง

```latex
\documentclass{article}
\usepackage[thai]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{fonts-tlwg}
\begin{document}
สวัสดีชาวโลก
\end{document}
```

![](https://cdn-images-1.medium.com/max/1024/1*N_MJMmew89kKe-mJc52RjA.png)<figcaption>ตัวอย่าง Thai LaTeX กับ pdfLaTeX</figcaption>

ตั้งแต่บรรทัดที่ 2–4 เป็นสิ่งจำเป็นที่ต้องประกาศเสมอไม่งั้นจะใช้งานภาษาไทยไม่ถูกต้อง

#### FONTS TLWG

Fonts ภาษาไทยหลักที่ bundle ไปกับ TeX Live ก็จะมีชุดของ TLWG (Thai Linux Working Group) ดังนี้

```latex
\documentclass{article}
\usepackage[thai]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{fonts-tlwg}
\begin{document}

\begin{itemize}
  \item \fontfamily{kinnari} \selectfont Kinnari สวัสดีชาวโลก
  \item \fontfamily{garuda} \selectfont Garuda สวัสดีชาวโลก
  \item \fontfamily{norasi} \selectfont Norasi สวัสดีชาวโลก
  \item \fontfamily{laksaman} \selectfont Laksaman สวัสดีชาวโลก
  \item \fontfamily{purisa} \selectfont Purisa สวัสดีชาวโลก
  \item \fontfamily{loma} \selectfont Loma สวัสดีชาวโลก
  \item \fontfamily{sawasdee} \selectfont Sawasdee สวัสดีชาวโลก
  \item \fontfamily{ttype} \selectfont Ttype สวัสดีชาวโลก
  \item \fontfamily{ttypist} \selectfont TTypist สวัสดีชาวโลก
  \item \fontfamily{umpush} \selectfont Umpush สวัสดีชาวโลก
  \item \fontfamily{waree} \selectfont Waree สวัสดีชาวโลก
\end{itemize}

\end{document}
```

![](https://cdn-images-1.medium.com/max/1024/1*lBc1s3KNPRbj2qtyHM4j7Q.png)<figcaption>fonts-tlwg</figcaption>

#### การเลือก Default Font

ปกติถ้าเราใช้ Thai LaTeX font ที่ถูกใช้คือ

- Norasi สำหรับ Roman Font
- Garuda สำหรับ Sans Serif Font
- TlwgTypist สำหรับ Type Writer

แต่ถ้าเราจะเลือก font ตัวอื่นในรายการด้านบนให้เราประกาศใน

```latex
\usepackage{fonts-tlwg}
```

โดยการกำหนด option ดังนี้

```latex
\usepackage[fontname]{fonts-tlwg}
```

เช่น

```latex
\documentclass{article}
\usepackage[thai]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[purisa]{fonts-tlwg}
\begin{document}
เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน
จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย
ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋า น่าฟังเอยฯ

ธรรมคุณหนุนความดีฑีฆรัตน์ สรรพสัตว์วัฏวจรถอนวิถี
อริยสัจตรัสสังโยคโลกโมฬี ดังกุมภีร์ผลาญชิวหาบีฑาทนต์
ฟังฉัตรทองของประเสริฐเลิศวิเศษ ฝ่ายต้นเหตุฎรงกรณ์อุดรผล
ยินสถานฌานสมาอารยะชน พึงซ่อนกลปรนนิบัตินิวัฒน์แฮฯ
\end{document}
```

![](https://cdn-images-1.medium.com/max/1024/1*CcoIWinyVJE-eSWDa8z_Qw.png)<figcaption>Purisa</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*TOMiHgDeXRxSIpyDtrlnzw.png)<figcaption>Laksaman</figcaption>

อ่านเพิ่มเติมได้ที่

[https://raw.githubusercontent.com/tlwg/fonts-tlwg/master/latex/README.latex](https://raw.githubusercontent.com/tlwg/fonts-tlwg/master/latex/README.latex)

#### การตัดคำ

![](https://cdn-images-1.medium.com/max/1024/1*6FnegsMxUHjt3Imsglqkxg.png)<figcaption>without word/line break</figcaption>

สังเกตว่าการตัดคำและบรรทัดยังแปลกๆ มีการใส่ hyphen ยังไม่ถูกต้องนัก ใน TeX Live Docker image ผมใส่ swath ไปให้แล้วเราสามารถสั่งตัดคำได้เลยโดยสั่งดังนี้

```bash
swath -f latex -u u,u < original.tex > processed.tex
```

จากคำสั่งด้านบน

- -f latex กำหนด format เป็น LaTeX
- -u u,u encoding แบบ utf-8 to utf-8 ถ้าสมัยก่อนอาจจะต้องใข้ TIS-620 แต่ปัจจุบันเรา process เป็น UTF-8 ได้เลย
- < original.tex คือ file ต้นฉบับที่นำเข้า
- > processed.tex คือ นำออก file จากผลที่ประมวลผลเรียบร้อยแล้ว

หลังจากนั้นเราก็นำ file ที่ตัดคำแล้วไป build ต่อ

![](https://cdn-images-1.medium.com/max/1024/1*5wPPbS6HDznhu7QiVNfnMg.png)<figcaption>LaTeX Source ที่ถูกตัดคำเรียบร้อยแล้ว</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*lNAnIuJDCj8KLop_xn8fmQ.png)<figcaption>ผลของการตัดบรรทัด และใส่ Hyphen ได้ถูกต้องขึ้น</figcaption>

จากตัวอย่าง pdfLaTeX จะเห็นว่าวิธีการยังค่อนข้างซับซ้อนยังต้องมีการตัดคำก่อนที่จะ process และ fonts ที่ใช้ยังเป็นแบบ Type1 การนำ fonts ของระบบหรือ fonts ภายนอกมาใช้ยากมาก

#### XeLaTeX, LuaLaTeX

ทางเลือกที่คนนิยมใช้กันในปัจจุบันคือ XeLaTeX ส่วน LuaLaTeX ผมยังไม่เคยได้ลองแต่เห็นหลายคนบอกว่าคล้ายๆ กัน คือใช้ FontSpec เหมือนกัน และ เกิดมาเพื่อประมวลผลแบบ UTF-8 และที่สำคัญคือมีการใช้ ICU ในการตัดคำซึ่งสนับสนุนหลากหลายภาษารวมทั้งภาษาไทยด้วย

#### สร้าง Workspace ใหม่

สร้าง Folder ใหม่ใน /root/data ชื่อ latex2 ทำใน terminal

```bash
mkdir /root/data/latex2
```

เปิด หน้าต่างใหม่ด้วยคำสั่ง

```bash
code /root/data/latex2
```

#### สร้าง Build Tools และ Recipes

ค่าปกติในการ Build LaTeX ของ VSCode LaTeX Workshop Extension คือ pdfLaTeX ส่วน XeLaTeX ไม่ได้จัดเตรียมไว้ให้ การตั้งค่า Extension ทำได้หลายระดับมีตั้งแต่

- เฉพาะ Workspace
- เฉพาะใน Container หรือ SSH
- ตั้งเป็นค่าของเราระดับ USER ก็ได้

ถ้าเราเขียนหลายแบบก็อาจจะแยกเฉพาะ Workspace ก็ได้ให้เปิด

```
VSCode Setting → Workspace
```

แล้วค้นหาคำว่า

```
latex tools
```

![](https://cdn-images-1.medium.com/max/1024/1*2xyLPCZ0PaAxHDMcOaShJg.png)<figcaption>Recipes &amp; Tools</figcaption>

ให้ Click ที่ Edit in settings.json ของ

```
Latex-workshop -> Latex: Tools
```

แล้วเพิ่ม Block ใหม่โดย Copy จาก lualatex

```json
{
      "name": "xelatexmk",
      "command": "latexmk",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-xelatex",
        "-outdir=%OUTDIR%",
        "%DOC%"
      ],
      "env": {}
  }
```

ให้เปลี่ยนชื่อ เป็น xelatexmk และ เปลี่ยน args จาก -lualatex เป็น -xelatex

save แล้วปิดหน้าต่าง settings.json ไป

แล้วกลับไป Click ที่ Edit in settings.json ของ

```
Latex-workshop -> Latex: Recipes
```

ให้ Copy ฺBlock ของ latexmk (lualatex) แล้วเปลี่ยนให้ตรงกับที่เรากำหนดไว้ใน Tools

```json
{
      "name": "latexmk (xelatex)",
      "tools": [
        "xelatexmk"
      ]
 }
```

ตั้งให้ใช้ Recipe ล่าสุดในการ Build Project

ให้ค้นหา Setting

```
latex recipe
```

เปลี่ยนจาก first เป็น lastUsed

![](https://cdn-images-1.medium.com/max/1024/1*xdAtnXEJ1XvEk-BPgG92_w.png)<figcaption>ให้ใช้ Recipe ล่าสุดเสมอ</figcaption>

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

#### Reload Window

ให้เปิด Command Palette จากเมนู หรือจะกด Shotcut ก็

```
View --> Command Palette
```

แล้วค้นหาคำว่า

```
restart
```

![](https://cdn-images-1.medium.com/max/1024/1*D3PW7XVX7Lf9cKtwCEbaQg.png)

เลือก Restart Extension Host แล้วกด Reload Window หรือจะปิด-เปิด VSCode ใหม่ก็ได้

อย่าลืมว่าถ้าเราตั้งค่าในระดับ Workspace ถ้าเราสร้าง Workspace ใหม่เราก็ต้องตั้งค่าเหล่านี้ใหม่ทุกครั้ง หรืออาจจะ copy .vscode ใน folder ไปก็ได้

![](https://cdn-images-1.medium.com/max/806/1*uaaE9lDLlWfRpUeSwqKOsA.png)<figcaption>Config ของ VSCode ในระดับ Workspace</figcaption>

#### First XeLaTeX

มาลองเขียน XeLaTeX แรกกัน

สร้าง file1.tex โดย Copy คำสั่งมาจากตัวอย่างแรกของ pdfLaTeX

```latex
\documentclass{article}
\title{My First \LaTeX{} Document}
\author{MrChoke}
\date{\today}
\begin{document}
   \maketitle
   Hello \LaTeX{} world!
\end{document}
```

หลังจากนั้นให้ Click ที่ Icon TeX บน Side Bar ด้านซ้าย

![](https://cdn-images-1.medium.com/max/1024/1*KvNTrf3ldPMcJD20xFPPdA.png)<figcaption>LaTeX WorkShop Extension</figcaption>

ให้ขยายคำสั่ง Build LaTeX project คำสั่งแรกปุ่ม play สีเขียว

![](https://cdn-images-1.medium.com/max/1024/1*ziyM_tqMALwsmWR4mX9WBg.png)<figcaption>Recipe ต่างๆ สำหรับการ Build Project</figcaption>

เราจะเห็นคำสั่งต่างๆ สำหรับการ Build Project ให้สังเกตตรง Recipe โดยปกติเวลาเราสั่งให้ Build มันจะเลือกคำสั่งแรกซึ่งเป็น Recipe: latexmk หรือ pdfLaTeX นั่นเองก่อนหน้านี้เราได้จัดเตรียม latexmk ให้ Build XeLaTeX ไว้แล้วจะเห็นใน Recipe ที่ 4 หรือถ้าใครจะ Build LuaLaTeX ก็เลือกจากตรงนี้เหมือนกันครับ ตรงนี้ให้ Click เลือก XeLaTeX ต้องระวังนิดหนึ่งคือก่อน Click ต้องให้ file ที่เราจะ Build ถูก Focus เสมอนั่นคือให้ Click file ก่อนแล้ว Click Build

#### Check

รู้ได้ยังไงว่า Build สำเร็จ ?

ให้กลับไปที่หน้า Explorer แล้วดูว่ามี file pdf ถูกสร้างขึ้นมาหรือไม่

![](https://cdn-images-1.medium.com/max/1024/1*1leEe7MTkSSj3ekoWHmhpw.png)

หลังจากนั้นก็ลอง Click แสดง pdf ตรง icon มุมขวาบนข้างปุ่ม Build สีเขียว

![](https://cdn-images-1.medium.com/max/278/1*7n11aG_uvz9FWUufbo2c5w.png)<figcaption>ปุ่มคำสั่งของ LaTeX Workshop Extension</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*b1OQlxMBjiigUuF3xvTj4A.png)<figcaption>PDF ที่ได้จาก XeTeX</figcaption>

เรารู้ได้อย่างไรว่า Extension ใช้ Engine อะไร Build ให้เรา ?

หลายคนคงสงสัยว่าที่ Build มานั้นใช้ XeLaTeX จริงหรือเปล่า ผมแนะนำอีกอย่างคือการดู Output ของ Extension ให้เลือกเมนู

```
View --> Output
```

แล้วเลือกดู LaTeX Workshop หรือ จะดู LaTeX Compiler ก็แล้วแต่เราจะสนใจนะครับ

![](https://cdn-images-1.medium.com/max/472/1*oS25IHXbjXxF-3Xw-2weHw.png)<figcaption>Output ต่างๆ</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*lfcrcL4kBKVKtUftJC3C1w.png)<figcaption>Output</figcaption>

ถ้าเราสังเกตก็จะเห็นบรรทัดคำสั่ง หรือ Recipe ที่เราสั่งรูปด้านบนก็จะบอกว่าเป็น XeLaTeX

นอกจากนั้นการวิเคราะห์ log ของ LaTeX เองก็จะช่วยแก้ปัญหาต่างๆ ได้ดูโดยเลือกเปิด file นามสกุล log ที่มีชื่อเดียวกับ LaTeX ของเรา

![](https://cdn-images-1.medium.com/max/1024/1*6zD2Vvwuge61KlB_cj8CPA.png)<figcaption>file log</figcaption>

#### XeLaTeX กับภาษาไทย

อย่างที่เคยเกริ่นไปก่อนหน้านี้ว่า XeLaTeX นั้นเกิดมาหลังและสนับสนุน UTF-8 , OpenType และ TrueType Font ตั้งแต่แรกอยู่แล้วการใช้งานพวกนี้ก็ถือว่าง่าย

#### ข้อดี

- สนับสนุน UTF-8,Unicode
- TrueType , OpenType
- สามารถใช้ Fonts นอกเหนือจากที่มีใน TeX Live ได้ คือสามารถใช้ fonts ของระบบได้เลย และ สามารถ copy fonts มาวางไว้กับ source code ได้ด้วย

#### ข้อเสีย

- จากข้อดีข้างบนถ้าคุยกับคนใช้ LaTeX จริงๆ จังๆ เขาอาจจะมองว่าเป็นสิ่งที่อาจจะทำให้เสียความเป็น LaTeX ได้เพราะตอนส่ง source code ให้กันอาจจะลืม Copy Font ให้ไปด้วยเพราะไม่รู้ว่า Font ที่ใช้ ไม่ได้อยู่ใน TeX Live ก็จะเป็นปัญหาคล้ายๆ Microsoft Word ที่แสดงผลผิดพลาดถ้าต้นทางและปลายทางใช้ font ไม่เหมือนกันเป็นต้น
- ณ ปัจจุบัน TeX Live 2021 มี fonts ไทยไปด้วยทั้ง Type1 และ OpenType Font แต่การตั้งค่าให้ Fontspec ใช้งานได้ผู้ใช้ยังต้องออกแรงเองอยู่ คือต้องประกาศเพิ่มเติมถึงจะใช้ได้ หลายคนจึงนิยมใช้ font ที่หามาเอง หรือ font ที่อยู่ในระบบปฎิบัติการ ก็อาจจะเกิดปัญหาตามมาเมื่อส่งมอบ source code ไปให้คนอื่น

### Fonts ไทย

#### fonts-tlwg

fonts-tlwg มีอยู่แล้วใน TeX Live ที่ติดตั้งแบบทั้งหมด หรือ จะเลือกติดตั้งเพิ่มเติมภายหลังก็ได้การใช้งาน font ใน XeLaTeX จะใช้ package fontspec ซึ่งจะต้องมีการประกาศ font เสียก่อนทำได้หลายแบบ ก่อนอื่นให้ copy file2.tex จากตัวอย่างแรกมาก่อน แล้วแก้ดังนี้

```latex
\documentclass{article}
\usepackage{fontspec}
\begin{document}
สวัสดีชาวโลก
\end{document}
```

แล้วลองสั่ง build ด้วย XeLaTeX Recipes จะไม่มีอะไร error แต่เมื่อสั่ง preview pdf จะไม่เห็นข้อความใด ๆ เลย

![](https://cdn-images-1.medium.com/max/1024/1*rKtL3Z8y0jHzBNtDj3oEmQ.png)<figcaption>ไม่มี output</figcaption>

ทีนี้เราลองสั่งเพิ่มเข้าไปหนึ่งบรรทัดคือ

```latex
\setmainfont{Laksaman.otf}
```

แล้วลอง Build ใหม่อีกรอบก็จะมีข้อความขึ้นมา

![](https://cdn-images-1.medium.com/max/1024/1*TQ8ZSAPRcA7dTHnCvnRTdw.png)<figcaption>Output ภาษาไทย</figcaption>

ข้างบนเป็นตัวอย่างหนึ่งที่ง่ายๆ ในการใช้ font แต่เราต้องรู้ชื่อ file font ด้วยนะไม่งั้นมันจะหาไม่ถูก แล้ว fonts-tlwg มี font อะไรบ้างละ ?

fonts-tlwg ที่มากับ TeX Live จะเก็บใน

```
texmf-dist/fonts/opentype/public/fonts-tlwg/
```

ถ้า Docker Image ของผมจะอยู่ที่

```
/usr/local/texlive/2021/texmf-dist/fonts/opentype/public/fonts-tlwg/
```

รายชื่อ Files

```latex
Garuda-BoldOblique.otf
Garuda-Bold.otf
Garuda-Oblique.otf
Garuda.otf
Kinnari-BoldItalic.otf
Kinnari-BoldOblique.otf
Kinnari-Bold.otf
Kinnari-Italic.otf
Kinnari-Oblique.otf
Kinnari.otf
Laksaman-BoldItalic.otf
Laksaman-Bold.otf
Laksaman-Italic.otf
Laksaman.otf
Loma-BoldOblique.otf
Loma-Bold.otf
Loma-Oblique.otf
Loma.otf
Norasi-BoldItalic.otf
Norasi-BoldOblique.otf
Norasi-Bold.otf
Norasi-Italic.otf
Norasi-Oblique.otf
Norasi.otf
Purisa-BoldOblique.otf
Purisa-Bold.otf
Purisa-Oblique.otf
Purisa.otf
Sawasdee-BoldOblique.otf
Sawasdee-Bold.otf
Sawasdee-Oblique.otf
Sawasdee.otf
TlwgMono-BoldOblique.otf
TlwgMono-Bold.otf
TlwgMono-Oblique.otf
TlwgMono.otf
TlwgTypewriter-BoldOblique.otf
TlwgTypewriter-Bold.otf
TlwgTypewriter-Oblique.otf
TlwgTypewriter.otf
TlwgTypist-BoldOblique.otf
TlwgTypist-Bold.otf
TlwgTypist-Oblique.otf
TlwgTypist.otf
TlwgTypo-BoldOblique.otf
TlwgTypo-Bold.otf
TlwgTypo-Oblique.otf
TlwgTypo.otf
Umpush-BoldOblique.otf
Umpush-Bold.otf
Umpush-LightOblique.otf
Umpush-Light.otf
Umpush-Oblique.otf
Umpush.otf
Waree-BoldOblique.otf
Waree-Bold.otf
Waree-Oblique.otf
Waree.otf
```

ถ้าสังเกตในตัวอย่างเราจะใช้ font Laksaman.otf ซึ่งเป็น font แบบ Nomal แบบเดียวไม่มีตัวหน้า ตัวเอียงให้ใช้ ลองสั่งดูครับ

![](https://cdn-images-1.medium.com/max/1024/1*CtFCoXU8jl2l8-eo13AzXA.png)<figcaption>จะแสดงเป็นตัวธรรมดาทั้งหมด</figcaption>

fontspec จะมี Options สำหรับการกำหนดค่า font ให้ง่ายขึ้นมาดูตัวอย่าง เพิ่มเติมให้กับ \setmainfont กัน

```latex
\setmainfont[
  Extension = .otf ,
  ItalicFont = *-Italic ,
  BoldFont = *-Bold ,
  BoldItalicFont = *-BoldItalic 
]{Laksaman}
```

![](https://cdn-images-1.medium.com/max/1024/1*OXd8BJDALunXxOmsmnKNog.png)

การกำหนด Font Shape Options นี้ยังสามารถใช้กับ font ที่เรานำมาใช้เอง โดยการ Copy ชุด fonts มาใส่ใน folder project ของเราแล้วประกาศให้ครบตามนี้แต่อย่าลืมว่าแต่ละ font จะมีไม่เหมือนกันบางตัวไม่มีตัวหนา ไม่มีตัวเอียง หรือ จะมีแบบอื่นเพิ่มขึ้นมาเช่น -Oblique , -Regular, -Light เป็นต้นก็ต้องกำหนดให้ถูกต้อง

ตัวอย่าง Font Shape

```latex
BoldFont = ⟨font name⟩
ItalicFont = ⟨font name⟩
BoldItalicFont = ⟨font name⟩
SlantedFont = ⟨font name⟩
BoldSlantedFont = ⟨font name⟩
SmallCapsFont = ⟨font name⟩
UprightFont = ⟨font name⟩
```

#### Shaping

ตอนนี้ดูเหมือนจะแสดงภาษาไทยได้แล้วแต่สิ่งที่สำคัญของภาษาไทยอีกอย่างที่เราควรรู้และใส่ใจคือการจัดระดับสระวรรณยุกต์ หรือ Shaping ลองดูตัวอย่าง

```latex
\documentclass{article}
\usepackage{fontspec}

\setmainfont[
  Extension = .otf ,
  ItalicFont = *-Italic ,
  BoldFont = *-Bold ,
  BoldItalicFont = *-BoldItalic 
]{Laksaman}

\begin{document}

ป่า ป้า ป๊ะ ป๋า ญู ฐู ฏู ญ ฐ - -- --- `fi' ``ff"

\textbf{ป่า ป้า ป๊ะ ป๋า ญู ฐู ฏู ญ ฐ - -- --- `fi' ``ff"}

\textit{ป่า ป้า ป๊ะ ป๋า ญู ฐู ฏู ญ ฐ - -- --- `fi' ``ff" }

\textbf{\textit{ป่า ป้า ป๊ะ ป๋า ญู ฐู ฏู ญ ฐ - -- --- `fi' ``ff"}}
\end{document}
```

![](https://cdn-images-1.medium.com/max/1024/1*lXC3NHpOa9UScU35C0QM6w.png)<figcaption>สระวรรณยุกต์ภาษาไทยไม่สวย</figcaption>

จากตัวอย่างเมื่อเราพิมพ์ข้อความภาษาไทยที่มีสระและวรรณยุกต์หลายระดับจะแสดงผลไม่สวยงามอย่าเพิ่งตกใจเมื่อเราใช้ OpenType หรือ TrueType Fonts จะมี Option Script ให้เราเลือกว่าจะใช้ Script แบบไหนใน Fonts-Tlwg ที่เป็น OpenType มี Script Thai ให้เลือกได้เลย วิธีตรวจสอบว่า fonts ที่เราใช้มี Script อะไรบ้างจะใช้คำสั่ง

```
otfinfo -s fontname.[ttf,otf]
```

![](https://cdn-images-1.medium.com/max/1024/1*QGQCWApIkxWrZCMkdYpWEQ.png)

ลองกำหนด Script

```
Script = Thai
```

![](https://cdn-images-1.medium.com/max/1024/1*GvkAb0T9A8VAWxGqi3IN1w.png)<figcaption>Script = Thai</figcaption>

ผลที่ได้คือภาษาไทยจัดระดับสระวรรณยุกต์ได้สวยงาม แต่!!! สิ่งที่ต้องสังเกตุอีกอย่างหนึ่งคือ การแสดง Ligatures ของภาษาอังกฤษจะไม่สวยงามแทนเพราะมันต้องใช้ Script = Latin นั่นเองวิธีแก้แบบบัวไม่ให้ช้ำน้ำไม่ให้ขุ่น ให้แสดงสวยงามทั้งสองภาษาคือให้ใช้

```
Script = Default
```

![](https://cdn-images-1.medium.com/max/1024/1*kLHBoCEEgfb4GdARv8N-Lg.png)<figcaption>Script = Default</figcaption>

มาดูผลเปรียบเทียบกันแบบชัดๆ

![](https://cdn-images-1.medium.com/max/1024/1*__xbLOlYYyrETO91qUMuJg.png)<figcaption>ไม่กำหนด Script จะเท่ากับ Script = Latin</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*WAWwr106-YpTQs0HklsgWQ.png)<figcaption>Script = Thai</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*5epVutnyY_8GGEw2JUaaKQ.png)<figcaption>Script = Default</figcaption>

ผู้เชี่ยวชาญหลายท่านยังแนะนำอีก Option คือ

```latex
Ligatures=TeX
```

หรือ จะใช้

```latex
Mapping=tex-text
```

สอง options นี้เลือกตัวใดตัวหนึ่งก็ได้จะทำให้การแสดงผลเกี่ยวกับพวก -, — , — เป็นไปตามแบบของ TeX ทำให้สวยงามขึ้น

### การตัดคำ

XeLaTeX จะใช้ lib ของ ICU ในการตัดคำลองมาดูกันว่าเมื่อเทียบกับ pdfLaTeX ที่ใช้ swath ในการตัดคำจะเป็นยังไงบ้าง

Copy จาก file4.tex จากตัวอย่าง pdfLaTeX มาแล้วแก้ไขดังนี้

```latex
\documentclass{article}
\usepackage{fontspec}

\setmainfont[
  Extension = .otf ,
  ItalicFont = *-Italic ,
  BoldFont = *-Bold ,
  BoldItalicFont = *-BoldItalic ,
  Script = Default,
  Mapping=tex-text
]{Laksaman}

\begin{document}
เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน
จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย
ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋า น่าฟังเอยฯ

ธรรมคุณหนุนความดีฑีฆรัตน์ สรรพสัตว์วัฏวจรถอนวิถี
อริยสัจตรัสสังโยคโลกโมฬี ดังกุมภีร์ผลาญชิวหาบีฑาทนต์
ฟังฉัตรทองของประเสริฐเลิศวิเศษ ฝ่ายต้นเหตุฎรงกรณ์อุดรผล
ยินสถานฌานสมาอารยะชน พึงซ่อนกลปรนนิบัตินิวัฒน์แฮฯ
\end{document}
```

เมื่อลอง Build ดู

![](https://cdn-images-1.medium.com/max/1024/1*iAOX9kH1NCQ9b3fW1Kn6Vg.png)<figcaption>ข้อความภาษาไทยยาวๆ</figcaption>

จะเห็นว่าตอนนี้ยังไม่มีการตัดคำและบรรทัดที่ถูกต้อง XeLaTeX มีคำสั่งกำหนดภาษาสำหรับการตัดบรรทัดไว้ให้คือ

```latex
\XeTeXlinebreaklocale "th"
```

ค่า “th” คือบอกว่าจะใช้ Locale ของ Thai นั่นเอง อาจจะใช้ “th\_TH” หรือ “thai” ก็ได้

![](https://cdn-images-1.medium.com/max/1024/1*PLg-HHqzX76FDu53uh-eEQ.png)<figcaption>เพิ่มคำสั่งในการตัดคำ</figcaption>

เมื่อเรากำหนดคำสั่งให้ตัดบรรทัด (โดยดูจากการตัดคำ) ก็จะดูดีขึ้นแต่ถ้าสังเกตขอบทั้งซ้ายขวายังไม่มีการจัดให้พอดี หรือที่เรียกว่า Justify จริงๆ มันก็ Justify นะแหละแต่มันไม่กล้าแบ่งคำ และ การกระจายช่องว่างที่เหมาะสมนั่นเอง จึงมีคำสั่งอีกคำสั่งที่ช่วยจัดให้การกระจายได้สวยงามขึ้นคือ

```latex
\XeTeXlinebreakskip = 0pt plus 1pt\relax
```

![](https://cdn-images-1.medium.com/max/1024/1*P_J04Gf0TSQvKHsN4ohypg.png)<figcaption>การ Tune การตัดบรรทัดเพิ่มเติม</figcaption>

เมื่อเราทำการ tune การตัดบรรทัดพบว่าดูดีขึ้นมาก ขอบซ้ายขวาตรงดิ่งสวยงาม แต่ถ้าสังเกตดีๆ จะพบว่ามีการแทรกช่องว่างระหว่างคำเล็กน้อยถ้าเทียบกับ pdfLaTeX ก่อนหน้านี้ จากการทดลองพบว่าถ้าจะให้เหมือนกับ pdfLaTeX แป่ะ ๆ ต้องใช้ package polyglossia ช่วยอันนี้ผมเองไม่แน่ใจเรื่องกลไกว่ามันไปทำยังไงถึงทำให้การจัดหน้า ตัดบรรทัดออกมาได้เหมือนกันขนาดนี้

![](https://cdn-images-1.medium.com/max/1024/1*ijPfASXc8QUX7MZ0Oav4-Q.png)<figcaption>ใช้ polyglossia</figcaption>

ลองเทียบกันแบบจะๆ ดู

![](https://cdn-images-1.medium.com/max/1024/1*ecct4L3P9-zXO2_1MuOixw.png)<figcaption>pdfLaTeX + swath</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*KF1S4w4jigdziGBj85ZzqA.png)<figcaption>XeLaTeX + Polyglossia + thai locale</figcaption>

### การใช้ Font นอก

ปกติถ้าเราใช้ font จากในระบบของ TeX Live ก็เพียงพอสำหรับการเขียนตำรา เขียนบทความต่างๆ นอกเสียจากมีการกำหนดชนิด font ของผู้รับตีพิมพ์ ผมจะลองเอา font จาก Windows และ Fonts จาก Internet มาใช้ดูว่าจะแสดงผลได้สวยงามครบถ้วนเหมือนชุด Fonts-Tlwg หรือไม่

#### Angsana New (TTF)

ตัวแรกผมลอง Angsana New แบบ TrueType Font เท่าที่ดูค่อนข้างเก่ามากมี font script Thai ตัวเดียวด้วย

ผมสร้าง folder ชื่อ fonts ไว้ใน ที่เดียวกับ source code มี Angsana New มี files ทั้งหมด 4 แบบคือ

```
angsa.ttf angsab.ttf angsai.ttf angsaz.ttf
```

fontspec ผมกำหนดดังนี้

```latex
\setmainfont[
  Path = fonts/,
  Extension = .ttf ,
  UprightFont = angsa,
  ItalicFont = angsai ,
  BoldFont = angsab ,
  BoldItalicFont = angsaz ,
  Script = Thai,
  Mapping=tex-text
]{Angsana New}
```

![](https://cdn-images-1.medium.com/max/1024/1*d8JVoiMW8Kk9KVmJmLb-lg.png)<figcaption>Angsana NEW</figcaption>

เนื่องจาก fonts ภาษาไทยส่วนมากขนาดจะเล็กเมื่อเทียบกับ fonts ภาษาอังกฤษ และ fonts-tlwg ที่ถูก scale ให้เท่ากับ fonts ภาษาอังกฤษแล้ว ใน option ผมจะ scale ขึ้นไปให้เท่าๆ กับ Laksaman ตามแบบด้านล่าง

```latex
Scale=1.45
```

![](https://cdn-images-1.medium.com/max/1024/1*3d0m8Tod_9PpAVSYC-vJVA.png)<figcaption>Angsana New + Scaled</figcaption>

ผลที่ได้น่าพอใจคือใกล้เคียงกับ Laksaman

#### Tahoma (TTF)

สำหรับ Tahoma จะเป็น font ที่มี scale เท่ากับ fonts ภาษาอังกฤษอื่นๆ จึงไม่จำเป็นต้อง scale และ มี Script หลายภาษา แต่จะไม่มีค่า Default ดังนั้นตอนเรียกใช้อาจจะต้องแยกว่าจะเรียกแบบ Thai หรือ Latin

```latex
\setmainfont[
  Scale=1,
  Path = fonts/,
  Extension = .ttf ,
  UprightFont = tahoma,
  BoldFont = tahomabd ,
  Script = Thai,
  Mapping=tex-text
]{Tahoma}
```

![](https://cdn-images-1.medium.com/max/1024/1*6sUzg6hc6dQ1FN13WoVB-g.png)

#### Angsana New (TTC)

นอกจาก font ที่มีนามสกุลเป็น ttf แล้ว windows ยังใช้ fonts ที่มีนามสกุลว่า ttc หรือ TrueType Collections คือ font เดียวมีครบทุก face นั่นเองแต่ info ยังคงเหมือน Angsana New ที่แยกเป็น ttf ครับคือมี script เดียวคือ Thai

```latex
\setmainfont[
  Scale=1.45,
  Path = fonts/,
  UprightFeatures = {FontIndex=0} ,
  BoldFeatures = {FontIndex=1} ,
  ItalicFeatures = {FontIndex=2} ,
  BoldItalicFeatures = {FontIndex=3} ,
  Script = Thai,
  Mapping=tex-text
]{angsana.ttc}
```

![](https://cdn-images-1.medium.com/max/1024/1*GbyqeaySAPVGhtlGwxOItA.png)<figcaption>Angsana New TTC</figcaption>

#### Browallia New (TTC)

อีกตัวอย่างแบบ TTC ของ font Browallia ซึ่งก็เหมือนกับ Angsana New

```latex
\setmainfont[
  Scale=1.45,
  Path = fonts/,
  UprightFeatures = {FontIndex=0} ,
  BoldFeatures = {FontIndex=1} ,
  ItalicFeatures = {FontIndex=2} ,
  BoldItalicFeatures = {FontIndex=3} ,
  Script = Thai,
  Mapping=tex-text
]{browalia.ttc}
```

![](https://cdn-images-1.medium.com/max/1024/1*mTkBPWpB0Ts0U0jKdTl0rw.png)<figcaption>Browalloa New TTC</figcaption>

#### Trirong (Google Font TTF)

ลอง Download Font ไทยจาก Google มาลองดูบ้าง ผมสุ่มเอา Font Trirong มาทดสอบดูพบว่ามันมี Face ให้เลือกใช้เยอะมากซึ่งเราสามารถตั้งค่าเอามาใช้แบบละเอียดได้เช่น Black, Light ExtraBold เป็นต้น (ต้องขออ่านคู่มือเพิ่มเติม)

```latex
\setmainfont[
  Path = fonts/Trirong/ ,
  Extension = .ttf ,
  UprightFont = *-Light,
  ItalicFont = *-Italic ,
  BoldFont = *-Bold ,
  BoldItalicFont = *-BoldItalic ,
  Script = Default,
  Mapping=tex-text
]{Trirong}
```

![](https://cdn-images-1.medium.com/max/1024/1*Y4Y7tK0H4g1dCj25Nb1X_w.png)<figcaption>Google Trirong</figcaption>

การเลือกว่าจะจัดชุด font face ก็ขึ้นอยู่กับที่เราเลือกนะ เช่น เราอยากได้แค่เบาๆ ก็อาจจะใช้ UprightFont แบบ Light หรือ เพิ่มขึ้นหน่อยก็ Regular , Nornal หรือ Medium เป็นต้นลองเล่นกันดูครับ ส่วน font นี้มี script แบบ Default ให้ด้วยก็ตั้งค่าง่ายหน่อย

### การใช้ Fonts หลาย ๆ แบบในเอกสาร

ใน Fonts-Tlwg มีหลาย Fonts ให้เลือกใช้ถ้าเราต้องการใช้หลายๆ แบบวิธี set แบบด้านบนอาจจะยุ่งอยากและไม่สามารถ Reuse ได้มีผู้เชี่ยวชาญท่านหนึ่งได้ทำตัวอย่างไว้ให้ผมเลยขอนำมาแนะนำต่อละกัน

\*\* ต้นฉบับ ([https://github.com/abhabongse/fonts-tlwg/blob/067c1e4f2625604fe31337c9bd2203f634c98560/latex/fonts-tlwg.sty](https://github.com/abhabongse/fonts-tlwg/blob/067c1e4f2625604fe31337c9bd2203f634c98560/latex/fonts-tlwg.sty))

Fontspec สามารถประกาศ Features ต่างๆ ไว้ก่อนได้แล้วนำไป Reuse และ ปรับค่า เพิ่มค่าได้ตามต้องการเช่น fonts ในชุด fonts-tlwg เราสามารถประกาศสั้นๆ แบบรวมทุก fonts ดังนี้

```latex
\defaultfontfeatures{
  Extension = .otf ,
  Mapping = tex-text,
  Script = Default
  }

% Font families with regular, oblique, bold, and bold-oblique.
\defaultfontfeatures[Garuda,Loma,Purisa,Sawasdee,TlwgMono,TlwgTypewriter,%
TlwgTypist,TlwgTypo,Umpush,Waree]{
ItalicFont = *-Oblique ,
BoldFont = *-Bold ,
BoldItalicFont = *-BoldOblique ,
}

% TlwgMono don't has Script Default
\defaultfontfeatures+[TlwgMono]{Script=Thai}

% Font families with regular, italic, bold, and bold-italic.
\defaultfontfeatures[Laksaman]{
ItalicFont = *-Italic ,
BoldFont = *-Bold ,
BoldItalicFont = *-BoldItalic ,
}
% Font families with regular, italic, oblique, bold, 
% bold-italic, and bold-oblique.
\defaultfontfeatures[Kinnari,Norasi]{
ItalicFont = *-Italic ,
SlantedFont = *-Oblique ,
BoldFont = *-Bold ,
BoldItalicFont = *-BoldItalic ,
BoldSlantedFont = *-BoldOblique ,
}

\setdefaultlanguage{thai}
\XeTeXlinebreaklocale "th"
\XeTeXlinebreakskip = 0pt plus 1pt \relax

\newfontfamily\thaifont{Norasi}
\newfontfamily\thaifontsf{Garuda}
\newfontfamily\thaifonttt{TlwgTypist}
```

จากตัวอย่างข้างบนเป็นการกำหนด fonts หลักของเอกสาร 3 แบบโดยเราจะใช้ Polyglossia เป็นตัวช่วยในการจัดการให้โดยจะมี

- Roman font \textrm \rmfamily →  **Norasi**
- SanSerif font \textsf \sffamily →  **Garuda**
- TypeWriter font \texttt \ttfamily → **Tlwg Typist**

ตัวอย่างการแสดงผล

```latex
\begin{description}
  \item[Roman] การพิมพ์ภาษาไทย -- English
  \item[\sffamily{}Sans] \sffamily การพิมพ์ภาษาไทย -- English
  \item[\ttfamily{}Typewriter] \ttfamily การพิมพ์ภาษาไทย -- English
\end{description}
```

![](https://cdn-images-1.medium.com/max/1024/1*RBOseaNg0_lq8-oTjzCUOw.png)<figcaption>Fonts Roman, Sans และ TypeWriter</figcaption>

การแสดง fonts อื่นๆ ที่ไม่ใช่สามแบบนี้จะเราสามารถเรียกใช้ได้หลายแบบ แบบที่แนะนำคือการใช้คำสั่ง

```latex
\newfontfamily
```

เช่นประกาศ fonts ต่างๆ

```latex
\newfontfamily\garuda{Garuda}
\newfontfamily\norasi{Norasi}
\newfontfamily\kinnari{Kinnari}
\newfontfamily\laksaman{Laksaman}
\newfontfamily\loma{Loma}
\newfontfamily\purisa{Purisa}
\newfontfamily\sawasdee{Sawasdee}
\newfontfamily\tlwgtypist{TlwgTypist}
\newfontfamily\tlwgtypo{TlwgTypo}
\newfontfamily\tlwgmono{TlwgMono}
\newfontfamily\tlwgtypewriter{TlwgTypewriter}
\newfontfamily\umpush{Umpush}[
  FontFace = {l}{n}{ Font = *-Light },
  FontFace = {l}{it}{ Font = *-LightOblique }
]
\newfontfamily\waree{Waree}
```

เรียกใช้งาน

```latex
\begin{itemize}
  \item \kinnari Kinnari สวัสดีชาวโลก
  \item \garuda Garuda สวัสดีชาวโลก
  \item \norasi Norasi สวัสดีชาวโลก
  \item \laksaman Laksaman สวัสดีชาวโลก
  \item \purisa Purisa สวัสดีชาวโลก
  \item \loma Loma สวัสดีชาวโลก
  \item \sawasdee Sawasdee สวัสดีชาวโลก
  \item \tlwgtypewriter TlwgTypewriter สวัสดีชาวโลก
  \item \tlwgtypist TlwgtTypist สวัสดีชาวโลก
  \item \umpush Umpush สวัสดีชาวโลก
  \item \waree Waree สวัสดีชาวโลก
\end{itemize}
```

ผล

![](https://cdn-images-1.medium.com/max/1024/1*Oyw4kPj62ZaXStmw4bzPfw.png)<figcaption>Fonts ต่างๆของ TLWG</figcaption>

ถ้าสังเกตจะเห็นว่า font Umpush จะมีการกำหนดค่าพิเศษกว่าแบบอื่น คือจะมี fontseries Light และ Light Oblique เพิ่มเข้ามาซึ่งไม่สามารถกำหนดได้ใน \defaultfontfeatures แต่สามารถใช้วิธีในตัวอย่าง หรือ จะใช้วิธีก่อนหน้านี้คือ \setmainfont \setsansfont \setmonofont ก็ได้ถ้าไม่ใช้ PolyGlossia จัดการ fonts ให้

#### วิธีเรียกใช้ fontsereis และ fontshape

ปกติเราจะใช้ macro เช่น

```latex
\begin{description}
  \item[\textbf{ตัวหนา}] \bfseries ปาป่าป้าป๊าป๋า
  \item[\textit{ตัวเอียง}] \itshape ปาป่าป้าป๊าป๋า
\end{description}
```

![](https://cdn-images-1.medium.com/max/606/1*PKrtDOrK3WQZl8e_4EUmXQ.png)<figcaption>ตัวหนา ตัวเอียง</figcaption>

หรือจะใช้ \fontseries{}\fontshape{}\selectfont ก็ได้เช่น

```latex
\begin{itemize}
  \item \fontseries{m}\fontshape{n}\selectfont ปาป่าป้าป๊าป๋า
  \item \fontseries{m}\fontshape{it}\selectfont ปาป่าป้าป๊าป๋า
  \item \fontseries{b}\fontshape{n}\selectfont ปาป่าป้าป๊าป๋า
  \item \fontseries{b}\fontshape{it}\selectfont ปาป่าป้าป๊าป๋า
\end{itemize}
```

![](https://cdn-images-1.medium.com/max/726/1*WvXzaQ7IMT3JeAlb0hbT6Q.png)<figcaption>รูปแบบหนาเอียงธรรมดา</figcaption>

ส่วน Umpush จะมีเพิ่มมาคือ \fontseries{l}\fontshape{n} และ \fontseries{l}\fontshape{it}

```latex
\begin{itemize}
  \item \umpush\fontseries{l}\fontshape{n}\selectfont ปาป่าป้าป๊าป๋า
  \item \umpush\fontseries{m}\fontshape{n}\selectfont ปาป่าป้าป๊าป๋า
  \item \umpush\fontseries{l}\fontshape{it}\selectfont ปาป่าป้าป๊าป๋า
  \item \umpush\fontseries{m}\fontshape{it}\selectfont ปาป่าป้าป๊าป๋า
  \item \umpush\fontseries{b}\fontshape{n}\selectfont ปาป่าป้าป๊าป๋า
  \item \umpush\fontseries{b}\fontshape{it}\selectfont ปาป่าป้าป๊าป๋า
\end{itemize}
```

![](https://cdn-images-1.medium.com/max/956/1*EVNyu9pmeFESqxOLumIpdg.png)<figcaption>Umpush</figcaption>

ปิดท้ายด้วยตัวอย่างการใช้งาน Fonts รูปแบบต่างๆ ซึ่งต้นฉบับมาจากของพี่เทพพิทักษ์

![](https://cdn-images-1.medium.com/max/1024/1*bz8pePxiSqGhV5rEYE-8fw.png)

PDF ตัวอย่าง

[https://github.com/mrchoke/latex-workshop-medium/raw/main/latex2/file11.pdf](https://github.com/mrchoke/latex-workshop-medium/raw/main/latex2/file11.pdf)

ต้นฉบับ

[tlwg/fonts-tlwg](https://github.com/tlwg/fonts-tlwg/blob/master/latex/examples/teststd.tex)

### Source Code ที่ใช้ประกอบทั้งหมด

[mrchoke/latex-workshop-medium](https://github.com/mrchoke/latex-workshop-medium)

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