Typst ทางเลือกที่เรียนรู้ง่ายสำหรับแทนที่ LaTeX
(github.com/typst)- Typst คือ ระบบจัดรูปเล่มแบบอิงมาร์กอัป ที่ตั้งเป้าให้ทรงพลังระดับ LaTeX แต่เรียนรู้และใช้งานได้ง่ายกว่า และรีโพซิทอรีนี้มีคอมไพเลอร์กับ CLI ที่จำเป็นสำหรับคอมไพล์เอกสารในเครื่อง
- มี มาร์กอัปในตัว สำหรับงานจัดรูปแบบพื้นฐาน ฟังก์ชันที่ยืดหยุ่น ระบบสคริปต์ที่ผสานรวม การจัดวางสมการ การจัดการบรรณานุกรม และข้อความผิดพลาดที่เป็นมิตร
- มุ่งให้คอมไพล์ได้รวดเร็วผ่าน incremental compilation โดย
typst watchจะเฝ้าดูการเปลี่ยนแปลงของซอร์สและคอมไพล์ใหม่ได้เร็วกว่าการคอมไพล์ตั้งแต่ต้นทุกครั้ง - CLI สามารถติดตั้งได้ผ่านไบนารีรีลีส, package manager,
cargo, Nix และ Docker; สร้าง PDF ด้วยtypst compile file.typและสามารถระบุพาธฟอนต์แบบกำหนดเองได้ - หลักการออกแบบคือทำให้เรียบง่ายด้วย ความสอดคล้อง, ทรงพลังด้วยการประกอบกันได้ และได้ประสิทธิภาพจาก incremental compilation โดยตั้งเป้าความเร็วที่แสดงตัวอย่างได้ทันที
สิ่งที่ Typst มอบให้
- Typst คือ ระบบจัดรูปเล่มแบบอิงมาร์กอัป ที่ออกแบบมาให้ทรงพลังเทียบเท่า LaTeX แต่เรียนรู้และใช้งานง่ายกว่า
- ฟีเจอร์หลักมีดังนี้
- มาร์กอัปในตัว สำหรับงานจัดรูปแบบที่ใช้บ่อย
- ฟังก์ชันที่ยืดหยุ่นสำหรับงานอื่น ๆ
- ระบบสคริปต์ที่ผสานรวมอย่างแนบแน่น
- การจัดวางสมการ การจัดการบรรณานุกรม และอื่น ๆ
- เวลาคอมไพล์ที่รวดเร็วบนพื้นฐาน incremental compilation
- ข้อความผิดพลาดที่เป็นมิตรเมื่อเกิดปัญหา
- รีโพซิทอรีนี้มี คอมไพเลอร์และ CLI ของ Typst ที่จำเป็นสำหรับคอมไพล์เอกสาร Typst ในเครื่อง
- หากต้องการประสบการณ์การเขียนที่ดีกว่า สามารถใช้ เอดิเตอร์ออนไลน์แบบทำงานร่วมกัน ฟรีได้
ไวยากรณ์และโมเดลการเขียน
- Typst ใช้ set rule อย่าง
#setเพื่อตั้งค่าคุณสมบัติขององค์ประกอบ เช่น ขนาดหน้า หรือการใส่เลขลำดับหัวข้อ- หากตั้งความสูงของ
pageเป็นautoขนาดจะปรับตามเนื้อหา - หากต้องการควบคุมอย่างสมบูรณ์ยิ่งขึ้น สามารถใช้ show rules เพื่อกำหนดรูปลักษณ์ขององค์ประกอบใหม่ทั้งหมดได้
- หากตั้งความสูงของ
- หัวข้อเขียนด้วยไวยากรณ์
= Heading=หนึ่งตัวสร้างหัวข้อระดับบนสุด ส่วน==สร้างหัวข้อย่อย- ดูรายการมาร์กอัปแบบเบาทั้งหมดได้ในเอกสาร syntax
- สมการ ครอบด้วยเครื่องหมายดอลลาร์
- หากเพิ่มช่องว่างรอบเนื้อหาสมการ จะจัดวางเป็นบล็อกแยกต่างหากได้
- ตัวระบุที่มีหลายตัวอักษรจะถูกตีความเป็นนิยามและฟังก์ชันของ Typst หากไม่ครอบด้วยเครื่องหมายคำพูด
- รายการอย่าง
floor,sqrtไม่ต้องใช้แบ็กสแลช phi.altใช้ modifieraltกับphiเพื่อเลือกสัญลักษณ์รูปแบบเฉพาะ
- สคริปต์ คือการเขียน expression ต่อท้ายแฮช (
#) เพื่อใส่โค้ดในเอกสาร- ตัวอย่างคำนวณเลข Fibonacci ลำดับที่ n ด้วยตัวแปร 2 ตัวและฟังก์ชันแบบ recursive
- ฟังก์ชัน
tableรับเซลล์เป็นรายแถว - ใช้ตัวดำเนินการ spread
..เพื่อส่งสมาชิกของอาร์เรย์เป็นอาร์กิวเมนต์แยกกัน
การติดตั้งและการใช้ CLI
- Typst CLI ติดตั้งได้หลายทาง
- ซอร์สและไบนารีที่ build ไว้ล่วงหน้าของรีลีสล่าสุดรับได้จาก releases page
- วางไบนารีไว้ในไดเรกทอรีที่อยู่ใน
PATHแล้วอัปเดตภายหลังได้ด้วยtypst update - เวอร์ชันจาก package manager อาจตามหลังรีลีสล่าสุด
- ตัวอย่างการติดตั้งผ่าน package manager มีดังนี้
- Linux: Typst on Repology, Typst's Snap
- macOS:
brew install typst - Windows:
winget install --id Typst.Typst
- หากมี Rust toolchain สามารถติดตั้งด้วย
cargoได้- รีลีสล่าสุด:
cargo install --locked typst-cli - เวอร์ชันพัฒนา:
cargo install --git https://github.com/typst/typst --locked typst-cli
- รีลีสล่าสุด:
- รองรับ Nix และ Docker ด้วย
- Nix:
nix-shell -p typst - Typst flake:
nix run github:typst/typst-flake -- --version - Docker:
docker run ghcr.io/typst/typst:latest --help
- Nix:
- คำสั่งคอมไพล์พื้นฐานมีดังนี้
typst compile file.typ: สร้างfile.pdfในไดเรกทอรีทำงานtypst compile path/to/source.typ path/to/output.pdf: สร้าง PDF ที่พาธที่ระบุ
- รันการเฝ้าดูการเปลี่ยนแปลงด้วย
typst watch file.typ- Typst ใช้ incremental compilation จึงเร็วกว่าการคอมไพล์ตั้งแต่ต้นทุกครั้ง
- มีคำสั่งที่เกี่ยวกับฟอนต์ให้ด้วย
typst compile --font-path path/to/fonts file.typ: ระบุไดเรกทอรีเพิ่มเติมสำหรับค้นหาฟอนต์typst fonts --font-path path/to/fonts: แสดงรายชื่อฟอนต์ที่พบจากระบบและไดเรกทอรีที่ระบุTYPST_FONT_PATHS=path/to/fonts typst fonts: วิธีใช้ environment variable ตามไวยากรณ์ Linux
- ดู subcommand และตัวเลือกอื่น ๆ ได้ด้วย
typst helpและดูวิธีใช้ของคำสั่งเฉพาะได้ด้วยtypst help watch
สภาพแวดล้อมการแก้ไขและคอมมูนิตี้
- หากต้องการประสบการณ์แบบ IDE, autocomplete และ preview ทันที สามารถใช้ เว็บแอป Typst ฟรีได้
- language server ที่คอมมูนิตี้สร้างขึ้นชื่อ Tinymist ถูกผสานเข้ากับส่วนขยายของหลายเอดิเตอร์
- พื้นที่คอมมูนิตี้มี Forum และ Discord server เป็นศูนย์กลาง
- Forum เหมาะกับการถามคำถาม ช่วยผู้ใช้คนอื่น และแชร์ผลงานที่สร้างด้วย Typst
- Discord เหมาะกับคำถามด่วน การคุยเรื่องการมีส่วนร่วม และแชตมากกว่า
- Typst Universe เป็นพื้นที่ที่คอมมูนิตี้แชร์เทมเพลตและแพ็กเกจ
- แพ็กเกจที่สร้างเองสามารถส่งไปยัง package repository ได้
การมีส่วนร่วมและการ build
- หากเจอบั๊กสามารถเปิด issue ได้ และหากต้องการพัฒนาฟีเจอร์ใหม่หรือแก้บั๊ก ให้ทำตาม contribution guide
- หากต้องการ build เอง ให้ติดตั้ง Rust stable เวอร์ชันล่าสุดแล้วรันคำสั่งต่อไปนี้
git clone https://github.com/typst/typstcd typstcargo build --release
- ไบนารีที่ optimize แล้วจะถูกเก็บไว้ใน
target/release/ - การแชร์แพ็กเกจกับคอมมูนิตี้ก็เป็นอีกวิธีหนึ่งในการมีส่วนร่วม
การออกเสียงและการเขียนชื่อ
- การออกเสียง IPA ของ Typst คือ
/taɪpst/ "Ty"ออกเสียงเหมือนTyใน Typesetting และ"pst"ออกเสียงเหมือนpstใน Hipster- เมื่อเขียน Typst ให้ถือเป็นชื่อเฉพาะและใช้ตัว
Tตัวพิมพ์ใหญ่
หลักการออกแบบ
- Typst ออกแบบโดยมีเป้าหมายหลักสามอย่างคือ Power, simplicity, performance
- เป้าหมายคือระบบที่ทรงพลังเทียบเท่า LaTeX เรียนรู้และใช้งานง่าย และเร็วพอสำหรับการ preview ทันที
-
เรียบง่ายด้วยความสอดคล้อง
- ใน Typst หากรู้วิธีทำสิ่งหนึ่งแล้ว ควรนำความรู้นั้นไปใช้กับงานอื่นได้
- หากมีหลายวิธีในการทำสิ่งเดียวกัน วิธีเหล่านั้นควรอยู่คนละระดับของ abstraction
= Introductionและ#heading[Introduction]เป็นตัวอย่างที่ยอมรับได้แม้ทำสิ่งเดียวกัน เพราะอย่างแรกเป็น syntax sugar ของอย่างหลัง
-
ทรงพลังด้วยการประกอบกันได้
- เลือกออกแบบโดยมีองค์ประกอบจำนวนน้อยที่ประกอบกันได้หลายแบบ แทนการมีค่าตั้งสำหรับทุกอย่าง
- TeX ก็เป็นระบบระดับต่ำที่ประกอบกันได้ แต่ผู้คนกลับใช้ LaTeX แทน
- มองว่าใน LaTeX หลายกรณีต้องพึ่งพาแพ็กเกจอย่าง
\usepackage{knob}
-
ประสิทธิภาพด้วย incremental compilation
- ฟีเจอร์ทุกอย่างของภาษา Typst ต้องเข้ากับ incremental compilation
comemoจัดการงานจำนวนมากที่เกี่ยวกับ incremental compilation อยู่เบื้องหลัง
ผู้สนับสนุนและการสนับสนุน
- การสนับสนุนหลักต่อผลงานโอเพนซอร์สของ Typst มีรายการต่อไปนี้
- Posit: สนับสนุนเงินทุนสำหรับวิศวกรคอมไพเลอร์แบบเต็มเวลา
- NLnet: สนับสนุนงานของ Typst ผ่านทุนหลายรายการจากกองทุน NGI Zero Core
- งาน HTML export
- งาน PDF accessibility
- Science & Startups: สนับสนุนเงินทุนสำหรับการพัฒนา Typst ตั้งแต่เดือนมกราคมถึงมิถุนายน 2023 ผ่าน Berlin Startup Scholarship
- Zerodha: ผู้สนับสนุนแบบครั้งเดียว
- รายการนี้รวมเฉพาะการมีส่วนร่วมต่องานโอเพนซอร์สที่มีมูลค่าเกิน €10K หรือคาดว่าจะเกินเท่านั้น
2 ความคิดเห็น
อ่าน LeTeX ว่า LaTeX เหรอ? น่าจะอ่านว่า Reitek มากกว่านะ
ความคิดเห็นจาก Hacker News
Typst ยอดเยี่ยมมาก และองค์กรของเราก็พอใจมากเช่นกัน
เราต้องสร้าง PDF มากกว่า 1.5 ล้านไฟล์ ทุกคืน จึงได้ลองมาหลายวิธี เช่น Puppeteer สำหรับแปลง HTML→PDF, pdflatex, lualatex และอื่น ๆ แต่ Typst เร็วกว่าอยู่หลายลำดับขั้นและใช้ทรัพยากรน้อยกว่ามาก
ประสบการณ์นักพัฒนากับการทำเทมเพลต PDF ด้วย LaTeX ไม่ค่อยดีนัก แต่เทมเพลตของ Typst นั้นค่อนข้างตรงไปตรงมาและเข้าใจง่าย
ได้เขียนรายละเอียดเพิ่มเติมเกี่ยวกับสแตกการสร้าง PDF ขนาดใหญ่นี้ไว้ในบล็อก: https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes
ผมกำลังทำผลิตภัณฑ์ รายงาน PDF ปริมาณมาก ที่ใช้ Puppeteer อยู่ และถ้าใช้ทั้งงานกลางคืน แคช และการประมวลผลแบบขนาน ประสิทธิภาพก็ถือว่าโอเค
https://www.cx-reports.com
เมื่อนานมาแล้วผมเคยต้องรับมือกับปัญหาคล้ายกัน และมันเป็นทางออกที่ดี
แม้สเกลจะไม่ถึงระดับนั้น แต่ก็ยังใช้งานได้ดี
ผมเขียนงานส่งด้วย Typst ไปเยอะพอสมควร และพบว่าการเขียนเชิงวิชาการกระชับขึ้น มีสมาธิมากขึ้น และพูดได้เลยว่าสนุกขึ้น
ด้วย ลักษณะเชิงฟังก์ชัน ของไวยากรณ์ Typst ทำให้ไม่ต้องเจอพฤติกรรมแปลก ๆ คาดเดาไม่ได้แบบที่เห็นใน Microsoft Word ทุกวันนี้ หรือบางทีก็ใน Google Docs ด้วย
ถ้าใช้ local IDE อย่าง VSCode ก็แทบจะมีฟีเจอร์ครบตามต้องการ
เมื่อเทียบกับ LaTeX การจัดหน้าทั้งเอกสารนั้นเข้าใจง่ายกว่ามาก แต่เวลาต้องเขียนวิธีทำสมการยาว ๆ หลายหน้า ผมรู้สึกว่า LaTeX พิมพ์ได้ง่ายกว่า
ไวยากรณ์ของ LaTeX ใกล้กับ Markdown มากกว่าจะเป็นภาษาโปรแกรมเชิงฟังก์ชัน จึงทำให้เวลาจัดสูตรที่มีฟังก์ชัน เลขยกกำลัง และเลขห้อยจำนวนมาก ไม่ต้องคิดล่วงหน้ามากนัก
ตอนนี้ผมคงยังไม่เขียนงานวิจัยด้วย Typst
พอออกนอกสถาบันแล้วแทบจะต้องแปลงแน่นอน และ arXiv ก็ยังต้องการซอร์ส LaTeX
ทุกวันนี้เครื่องมือรอบ ๆ LaTeX ก็ดีพอสมควรแล้ว และมี IDE ที่ช่วยงานอยู่มาก
ส่วนตัวผมใช้ Org-Mode ของ Emacs ที่คอมไพล์เป็น LaTeX
https://github.com/mitex-rs/mitex
มีทั้งการพูดคุยก่อนหน้าและข้อมูลที่เกี่ยวข้องหลายรายการ: https://hn.algolia.com/?q=typst
1 ปีก่อน ความคิดเห็น 146 รายการ: https://news.ycombinator.com/item?id=35250210
8 เดือนก่อน ความคิดเห็น 34 รายการ: https://news.ycombinator.com/item?id=38354422
2 ปีก่อน ความคิดเห็น 53 รายการ: https://news.ycombinator.com/item?id=34423590
2 ปีก่อน ความคิดเห็น 30 รายการ: https://news.ycombinator.com/item?id=32209794
น่าแปลกใจที่ การส่งออก HTML ไม่ได้เป็นฟีเจอร์หลักตั้งแต่แรก แต่ยังอยู่ระหว่างพัฒนาในตอนนี้
เพราะ LaTeX มีความสัมพันธ์ที่ไม่ค่อยลงรอยกับเว็บอยู่แล้ว ถ้าเป็นโปรเจกต์ใหม่ที่ตั้งใจมาแข่ง ก็น่าจะพยายามแก้เรื่องนี้ให้ดีตั้งแต่ต้น
[0] https://github.com/typst/typst/issues/721
ทั้งสองอย่างเจอปัญหาเดียวกันคือ เว็บกับกระดาษทำงานต่างกันโดยสิ้นเชิง และมีแนวคิดบางอย่างที่แปลข้ามกันไม่ได้
ดังนั้นจึงต้องนิยามวิธีที่ผลลัพธ์งานจัดพิมพ์จะไปลงในอีกสภาพแวดล้อมหนึ่งอย่างเป็นธรรมชาติ
ถ้า Typst ตั้งเป้า HTML มาตั้งแต่แรก การพัฒนาคงง่ายกว่านี้มาก แต่ก็คงไม่เกินกว่าตัวสร้างเว็บไซต์ที่ซับซ้อนเกินจำเป็น
การเลือกเป้าไปที่ PDF ก่อน แสดงให้เห็นว่าตั้งใจจะมาแข่งกับ LaTeX จริง ๆ
ถ้าเริ่มระบบมาร์กอัปใหม่โดย ไม่ได้วางแผนสร้างเอกสารที่เข้าถึงได้ ตั้งแต่ต้น ผมมองว่าเป็นการตัดสินใจที่แย่มาก
จนกว่า Typst จะสร้างเอกสารที่เข้าถึงได้ ผมก็จะยังไม่ใช้มัน
ผมไม่ชอบ PDF
ผมกำลังรอให้ LaTeX หายไปแล้วให้ Typst มาแทนที่
ประสบการณ์ใช้งานต่างกันลิบลับ และผลลัพธ์ก็น่าประทับใจมาก
ที่ผ่านมาผมใช้เทมเพลต Jinja2 เพื่อสร้างไฟล์ TeX แต่ Typst รับ JSON จากบรรทัดคำสั่งได้ ใช้งานง่าย และทรงพลังพอที่จะตัดขั้นตอน Python ออกไปได้เลย
ยังไม่ต้องพูดถึงเวลาคอมไพล์ที่อยู่ในระดับ มิลลิวินาที
ตอนแรกเพราะคุ้นกับวิธีทำแบบ LaTeX ผมเลยลองใช้ Go template สร้างเทมเพลต Typst
แต่พอรู้ว่า Typst สามารถ ใช้ JSON ได้โดยตรงอย่างง่ายดาย ในเอนจินสคริปต์ของตัวเอง ก็รู้สึกชอบมาก
ตอนทำงานเป็นอินเทิร์นในปี 1999 ฉันได้รับมอบหมายให้เขียนเอกสารมาตรฐานสำหรับคณะทำงานมาตรฐานโทรศัพท์ VoIP ของ TIA
ในองค์กรกำหนดมาตรฐานนั้นมีเทมเพลต Word ที่ทุกคนใช้กัน แต่ในฐานะนักศึกษาวิศวะ ฉันใช้ LaTeX มาพักใหญ่และชอบมันมาก เลยคิดว่า “สุดท้ายผลลัพธ์ก็ออกมาเป็น PDF อยู่ดี แถมการจัดรูปแบบก็น่าจะดีกว่า แล้วทำไมไม่ใช้ LaTeX ล่ะ?”
ในความเป็นจริง งานที่ออกจาก LaTeX ดูดีกว่า และหัวหน้าก็ชอบผลงานมากโดยไม่รู้เลยว่าฉันไม่ได้ใช้ Word
สมาชิกในคณะทำงานก็ตอบรับดีมาก บรรยากาศประมาณว่า “เด็กคนนี้มีพรสวรรค์จริงๆ”
สำหรับสตาร์ตอัป การสร้างความประทับใจที่ดีกับบริษัทใหญ่ที่เข้าร่วมคณะทำงานนั้นสำคัญมากต่ออนาคตของบริษัท หรืออาจถึงขั้นความอยู่รอด
แต่แล้ววันหนึ่งหัวหน้าก็บอกว่า “ส่งเอกสาร Word ฉบับนั้นให้ผู้บริหารระดับสูงของบริษัทใหญ่ที่อาจจะเข้าซื้อกิจการเราได้ไหม? เขาอยากเอาไปใช้เป็นเทมเพลตเอกสารใหม่” และฉันก็รู้สึกใจหายเหมือนตอนอายุสี่ขวบที่ลองฉี่ใส่ตู้เสื้อผ้ากับเพื่อนแล้วโดนแม่จับได้
สุดท้ายก็ต้องจ้างเพื่อนมานั่งพิมพ์ใหม่เป็น Word อย่างยากลำบากตลอดทั้งสุดสัปดาห์ แล้วหัวหน้าก็ได้รับเอกสารนั้น
บริษัทถูกซื้อกิจการในอีก 18 เดือนต่อมาด้วยมูลค่า 100 ล้านดอลลาร์
แต่ยังไงก็ตาม LaTeX ก็ดู ดีกว่า 1000 เท่า เมื่อเทียบกับ Word
นี่ดูเหมือนจะเป็นคู่แข่งของบริการอย่าง Overleaf หรือ CodiMD
แม้จะเป็นอีกไวยากรณ์หนึ่ง แต่ดูเหมือนว่า pandoc จะรองรับ
ช่วงนี้ฉันเขียนโปรแกรมด้วย R มากขึ้น ก็เลยใช้ Quarto มากขึ้นเรื่อยๆ และมันให้ผลลัพธ์ที่ดีพอสมควร โดยเฉพาะแบบ HTML
แต่เครื่องมือพวกนี้ก็ยังแก้ปัญหาสำคัญสองอย่างสำหรับงานวิชาการไม่ได้ คือการให้ การเปรียบเทียบความแตกต่าง ที่ดีสำหรับผู้รีวิว และการแชร์กับผู้ร่วมงานที่ไม่ใช่สายเทคนิคได้ง่ายพร้อมให้คอมเมนต์ได้
เพราะงั้น อย่างน้อยในงานเขียนวิทยาศาสตร์ในสายของฉัน Word ก็คงยังถูกแทนที่ได้ยากไปอีกหลายปี
[1] https://github.com/overleaf/overleaf
[2] https://github.com/hackmdio/codimd
[3] https://pandoc.org/typst-property-output.html
[4] https://quarto.org/
ตอนใช้ GT ฉันรู้สึกว่า ผลลัพธ์ PDF ของ Typst ยังหยาบกว่า PDF ของ LaTeX อยู่เล็กน้อย
หวังว่าจะได้รับการแก้ไข
เมื่อเทียบกับ LaTeX สิ่งที่คาใจที่สุดใน Typst คือมันยังจัดการ ฟีเจอร์ typography ละเอียดระดับพื้นฐาน ได้ไม่ดีนัก
ตัวอย่างเช่น ใน math mode ยังขาดความสามารถในการจัดการประเภทของระยะห่าง (mathop, mathbin, mathrel ฯลฯ) หรือขนาดของวงเล็บ/ตัวคั่น (big, bigg ฯลฯ)
ระยะห่างระหว่างสัญลักษณ์และตัวดำเนินการใน math mode ปรับได้ที่ https://typst.app/docs/reference/math/class/ และขนาดของตัวคั่นปรับหรือให้จัดการอัตโนมัติได้ที่ https://typst.app/docs/reference/math/lr#functions-lr
แต่ดูเหมือน LaTeX เองก็เป็นเหมือนกัน
ดูดีมากจริงๆ และฉันตั้งใจว่าจะลองใช้ดูสักครั้ง
แต่ก็อดคิดแบบนี้ไม่ได้
ความน่าจะเป็นที่อีก 15 ปีข้างหน้า LaTeX จะยังฟรีและยังมีการบำรุงรักษาอยู่: 99.9999%
ความน่าจะเป็นที่อีก 15 ปีข้างหน้าเครื่องมือใหม่อื่นๆ จะยังฟรีและยังมีการบำรุงรักษาอยู่: 5%
bash กับอีกหลายอย่างก็เป็นแบบเดียวกัน
ถึงจะมีทางเลือกที่ดีกว่าอยู่มาก แต่จุดเจ็บปวดยังไม่มากพอที่จะถูกแทนที่
ฉันชอบ Typst
โดยเฉพาะเวลาจัดการอินพุตที่สร้างจากการเขียนโปรแกรม และแฟลก
--inputก็รับ JSON ได้ภายในไฟล์ก็สามารถดึง JSON เข้ามาได้ง่ายด้วยฟังก์ชัน
json.decode()โดยเฉพาะมันทำให้สร้างผลลัพธ์ที่เสถียรได้ง่ายมาก จนฉันเปลี่ยนโปรเจกต์ของตัวเองจาก LaTeX มาเป็น Typst แล้ว
[0] https://typst.app/docs/reference/foundations/sys/
[1] https://resgen.app