# Thai Government Document with Typst (เขียนหนังสือราชการด้วยโปรแกรม Typst)

เพื่อเป็นการฝึกใช้งานระบบจัดหน้า [Typst](https://typst.app) ซึ่งเป็นซอฟต์แวร์ Open Source
จึงได้ทดลองจัดทำตามรูปแบบหนังสือราชการ และอัพโหลดไว้สำหรับผู้สนใจ

* [ตัวอย่างเอกสาร](govdoctest.pdf)

## คุณสมบัติ

สามารถจัดเนื้อหาในส่วนต่อไปนี้

* ชั้นความเร็ว
* ชั้นความลับ
* ตราครุฑ
* ที่
* ผู้ส่ง
* เรื่อง เรียน
* อ้างถึง
* สิ่งที่ส่งมาด้วย
* เนื้อความ
* ลงชื่อ
* ผู้ส่งแนบท้าย

ณ ขณะที่พิมพ์

* โปรแกรม Typst ยังไม่รองรับการตัดคำภาษาไทย (จะต้องแทรกเว้นวรรคเพื่อขึ้นบรรทัดใหม่ด้วยตนเอง)
* ไม่สามารถแทรกข้อความขึ้นหน้าใหม่ข้างท้ายได้อัตโนมัติ
* ไม่สามารถแปลงเลขไทยได้อัตโนมัติ (ต้องใช้คำสั่ง `thnum`)
* ไม่สามารถเว้นกั้นหน้าก่อนย่อหน้าแรกในเนื้อความอัตโนมัติ

## การใช้งาน

ณ ขณะนี้ยังไม่มีระบบมอดูลสำหรับ Typst จึงจะต้องคัดลอกไฟล์ไปเอง

1. คัดลอกไฟล์ <thai.typ>, <govdoc.typ>, <garuda.svg> ไปยังจุดที่ใช้งาน
2. เครื่องที่ใช้งานจะต้องติดตั้งโปรแกรม Typst และแบบอักษร TH Sarabun New (ขณะนี้ยังไม่สามารถติดตั้งบน Typst web application ได้ ต้องติดตั้งบนเครื่องคอมพิวเตอร์เท่านั้น)
3. สามารถดูตัวอย่างการใช้งานได้ที่ <govdoctest.typ>

### คำสั่ง
#### thnum
คำสั่ง `thnum` จะแปลงข้อมูลประเภทตัวเลขหรือ string ให้เป็นเลขไทย สามารถระบุข้อความอื่นๆ ที่ไม่ใช่ตัวเลขเข้ามาได้ แต่ไม่สามารถส่ง block เข้ามาได้

คำสั่งนี้จะไม่เติมเครื่องหมายจุลภาค (ลูกน้ำ) ในหลักพัน

**การใช้งาน**

```typst
เอกสารนี้มีจำนวน #thnum(1) หน้า

#thnum("วันที่ 1 มกราคม 2566")
```

#### gov
คำสั่ง `gov` เป็นการจัดหน้าเอกสารให้ตรงตามมาตรฐานของราชการ รวมถึงเรียกใช้คำสั่ง thai เพื่อเปลี่ยนแบบอักษร (ฟอนต์) อัตโนมัติ

**การใช้งาน**

```typst
#import "govdoc.typ": gov
#show: gov
```

#### govhead
คำสั่ง `govhead` จะแสดงส่วนขึ้นต้นของเอกสารตั้งแต่สิ่งที่ส่งมาด้วย ขึ้นไปจนถึงหัวเอกสาร

**การใช้งาน**

```typst
#import "govdoc.typ": thnum, govhead
#govhead(
  secrecy: "ลับ", // ชั้นความลับ
  urgency: "ด่วน", // ชั้นความเร็ว
  id: thnum("ตย 1234/  5678"),
  address: [
    หน่วยงาน \
	ที่ตั้ง \
	จังหวัด #thnum(10110)
  ],
  date: thnum("1 มกราคม 2566"),
  title: "ตัวอย่างเอกสาร", // เรื่อง
  attention: "ผู้อ่าน", // เรียน
  refer-to: "เอกสารก่อนหน้า", // อ้างถึง
  attachments: ( // สิ่งที่ส่งมาด้วย ระบุเป็น array
    "เอกสารแรก",
	thnum("เอกสารที่ 2"),
	// เพิ่มจำนวนได้ตามต้องการ
  ),
)
```

หากไม่ใช้งานในส่วนใด สามารถลบบรรทัดที่ส่งส่วนนั้นออกได้

#### govsign
คำสั่ง `govsign` จะแสดงส่วนลงท้ายของเอกสาร

**การใช้งาน**

```typst
#import "govdoc.typ": govsign
#govsign(
	signoff: "คำลงท้าย",
	name: "ชื่อ",
	position: "ตำแหน่ง",
)
```

หากไม่ระบุ signoff จะกำหนดเป็น "ขอแสดงความนับถือ" โดยอัตโนมัติ

#### govsender
คำสั่ง `govsender` จะแสดงเนื้อหาหลังจากเว้นช่องไฟสำหรับที่อยู่ผู้ส่ง

**การใช้งาน**

```typst
#import "govdoc.typ": govsender
#govsender([
	หน่วยงานผู้ส่ง \
	ที่อยู่ \
	โทร. #thnum("1111") \
	โทรสาร #thnum("02 111 1111")
])
```

## ลิขสิทธิ์
ไม่สงวนลิขสิทธิ์

