- Typst là một chương trình dàn trang tài liệu được phát triển bằng Rust, được nhắc đến như một giải pháp thay thế LaTeX tối ưu cho việc soạn tài liệu kỹ thuật như công thức toán, bảng và hình minh họa
- Nó giải quyết các vấn đề của LaTeX như cú pháp phức tạp, biên dịch chậm và thông báo lỗi khó hiểu, đồng thời cung cấp ngôn ngữ dựa trên hàm được tích hợp với cú pháp kiểu Markdown
- Với biên dịch gia tăng nhanh, hiển thị lỗi rõ ràng và cú pháp gọn gàng, ngay cả tài liệu lớn cũng có thể xem trước theo thời gian thực, và khả năng lập trình được tích hợp tự nhiên vào hệ thống
- Nhược điểm gồm thiếu hệ sinh thái gói chuyên dụng, hỗ trợ template tạp chí còn yếu, tài liệu hóa khó theo kịp và thiếu một số tính năng; tuy vậy số lượng package đang tăng nhanh và cũng có thể chuyển đổi qua Pandoc
- Typst vẫn đang ở giai đoạn đầu, nhưng nhờ đã được một số tạp chí học thuật chấp nhận, có hơn 800 package và cộng đồng sôi động, nó đang nổi lên như ứng viên sáng giá để thay thế LaTeX
Giới thiệu về Typst và tầm quan trọng
- Typst là một chương trình dàn trang tài liệu, có cấu trúc phù hợp cho tài liệu kỹ thuật như công thức, bảng và hình ảnh
- Nó cung cấp kết quả đầu ra chất lượng cao tương đương LaTeX với markup đơn giản hơn và biên dịch nhanh hơn
- Typst là phần mềm mã nguồn mở được phát triển bằng Rust và sử dụng giấy phép Apache-2.0
- Tốc độ xử lý tài liệu lớn, cú pháp được đơn giản hóa và khả năng tùy biến dễ dàng là các điểm mạnh lớn
Hạn chế của LaTeX và nhu cầu thay thế
- LaTeX là một hệ thống dựa trên TeX và đã trở thành công cụ tiêu chuẩn cho bài báo học thuật trong các lĩnh vực toán học và khoa học máy tính
- Tuy nhiên, dung lượng cài đặt lớn, tốc độ biên dịch chậm, thông báo lỗi khó hiểu và khả năng tùy biến khó khăn dựa trên ngôn ngữ macro liên tục bị chỉ ra là vấn đề
- Dù đã có nhiều cuộc thảo luận về giải pháp thay thế trong nhiều thập kỷ, vẫn không có lựa chọn thực tế nào do hệ sinh thái package đồ sộ và sự phụ thuộc của người dùng hiện có
Sự xuất hiện của Typst và bối cảnh phát triển
- Năm 2019, hai nhà phát triển người Đức Laurenz Mädje và Martin Haug bắt đầu dự án như một project cá nhân, sau đó tiếp tục phát triển qua luận văn thạc sĩ và bản beta
- Từ khi công bố v0.1.0 vào năm 2023, dự án đã phát triển đến v0.13.1 và hiện có hơn 365 người đóng góp trên GitHub
- Khi một số tạp chí học thuật bắt đầu chấp nhận bản thảo Typst làm định dạng nộp bài, khả năng ứng dụng thực tế cũng được mở rộng
Tính năng và ưu điểm của Typst
- Typst được cung cấp dưới dạng mã nguồn Rust và binary đã biên dịch, hỗ trợ Linux, macOS và Windows
- Nó hoạt động với một tệp thực thi duy nhất (
typst), không cần phân biệt nhiều engine như LaTeX
- Có thể kiểm tra và thêm font khả dụng bằng lệnh
typst fonts
typst compile xuất ra PDF/SVG/PNG, còn chế độ typst watch hỗ trợ xem trước theo thời gian thực, tự động cập nhật PDF khi mã nguồn thay đổi
- Nhờ biên dịch gia tăng nhanh, việc xem trước thời gian thực ngay cả với tài liệu lớn cũng rất nhanh
- Cú pháp kết hợp phong cách tương tự Markdown với cú pháp chuyên cho toán học, ngắn gọn và trực quan hơn LaTeX
- Trải nghiệm người dùng được cải thiện nhờ thông báo lỗi rõ ràng, biên dịch gia tăng và hỗ trợ ngôn ngữ hàm tương tự Rust
- Biểu diễn công thức toán học cho chất lượng gần như tương đương LaTeX, đồng thời có thể nhập trực tiếp các ký hiệu Unicode
Những cải tiến của Typst so với LaTeX
- Cung cấp cú pháp mã nguồn ngắn hơn và dễ đọc hơn LaTeX
- Typst sử dụng cùng thuật toán ngắt dòng như LaTeX và phương pháp dàn công thức tương tự để giữ chất lượng
- Thay vì macro phức tạp, nó dùng tùy biến dựa trên lời gọi hàm để đảm bảo tính ổn định và đơn giản
- Typst tích hợp ngôn ngữ lập trình sẵn theo phong cách Rust
- Phần lớn hàm là hàm thuần, cho kết quả dễ dự đoán và dễ debug
- Ngôn ngữ lập trình và dàn trang tài liệu được tích hợp hoàn toàn, giúp viết mã ngắn gọn hơn
- Tùy biến tài liệu, ví dụ thay đổi font hay kiểu section, cũng được thực hiện bằng cách gọi hàm
- Cấu trúc lập trình nhất quán và đơn giản hơn so với phần mở rộng Lua của LaTeX
- Các vấn đề của LaTeX như xử lý phần tử trôi nổi và chia bảng có thể được giải quyết bằng mô hình layout được cải tiến
Ví dụ markup và cấu trúc
- Heading: ký hiệu
=, danh sách đánh số tự động: +, danh sách bullet: - để viết đơn giản
- Các định dạng văn bản như Bold, Italic cũng được nhập một cách trực quan
- Một số tính năng được xử lý bằng lời gọi hàm: ví dụ
#underline[Good] gin
- Có 3 chế độ nhập: văn bản, mã và toán học
- Chế độ công thức được bọc bằng
$, có thể nhập trực tiếp ký hiệu Unicode và chữ cái Greek
Nhược điểm và giới hạn của Typst
- So với LaTeX, độ tinh vi của bố cục trang vẫn còn thiếu (như tránh orphan/widow)
- Hiện vẫn có ít package chuyên dụng hơn, nhưng đã mở rộng nhanh lên hơn 800 package
- Hỗ trợ template tạp chí còn thiếu nên cần chuyển đổi qua Pandoc
- Tài liệu chính thức còn thiếu và khó theo kịp tốc độ cập nhật nhanh
- Thiếu một số tính năng nâng cao như không thể chèn PDF, chưa hỗ trợ
parshape
- Do đặc trưng của dự án giai đoạn đầu, vẫn có rủi ro breaking changes
Kết luận và triển vọng
- Tác giả đã thực sự dùng Typst để viết bài báo vật lý, và sử dụng Pandoc để chuyển đổi sang LaTeX
- Kết hợp với Neovim + Tree-sitter, tác giả xây dựng được môi trường soạn thảo hiệu quả và hài lòng với tốc độ cũng như trải nghiệm hiển thị lỗi của Typst
- Các yếu tố như nhập công thức nhanh và trực quan, hỗ trợ editor/công cụ trực quan, phản hồi biên dịch nhanh mang lại hiệu quả làm việc thực tế
- Typst được đánh giá là ứng viên mạnh mẽ có khả năng thay thế LaTeX, đủ thực dụng ngay từ bây giờ và sẽ còn mở rộng hơn nữa trong tương lai
Các bình luận nổi bật trên LWN
- Khả năng tương thích và độ ổn định dài hạn
- Một trong những lý do TeX/LaTeX có thể thành công là duy trì khả năng tương thích với các phiên bản tương lai (spacefrogg)
- Tuy nhiên, cũng có nhiều phàn nàn rằng trong thực tế, tài liệu cũ bị hỏng trên môi trường mới hoặc phải viết lại vì package thay đổi (wtarreau, warrax)
- Một số người dùng chia sẻ trải nghiệm rằng các bài báo hay luận văn từ vài chục năm trước vẫn build tốt, và nhấn mạnh rằng sự khác biệt về độ ổn định của package đã dùng mới là yếu tố cốt lõi (dskoll, anton)
- Vấn đề template và package của nhà xuất bản
- Có ý kiến cho rằng khi xuất bản tạp chí học thuật, việc bị ép dùng template LaTeX và package lỗi thời do nhà xuất bản cung cấp làm suy yếu lợi thế tương thích thực tế (NYKevin, aragilar)
- Cuối cùng, điều quan trọng không phải là giữ nguyên định dạng tài liệu thật lâu, mà là có thể dễ dàng chuyển phần văn bản chính sang template mới hay không (anton)
- Thiết kế ngôn ngữ và ưu điểm của Typst
- Không giống LaTeX, Typst tách bạch rõ cú pháp mã và cú pháp dàn trang, giúp giảm tác dụng phụ của macro và mang lại các tính năng ngôn ngữ hiện đại (spacefrogg)
- Có thể viết nhanh các tài liệu đơn giản, và độ dễ đọc của thông báo lỗi cùng biên dịch gia tăng là các ưu điểm lớn (spacefrogg, notriddle)
- Tuy nhiên, cũng có ý kiến lo ngại rằng vì Typst vẫn có tính Turing-complete, về dài hạn nó có thể lặp lại các vấn đề tương thích tương tự (epa, smoogen, taladar)
- Hệ sinh thái và cộng đồng
- Việc phát triển package trong Typst rất sôi động, và đã có trường hợp tính năng được thêm nhanh sau khi có yêu cầu (leephillips, adnl)
- Trái với nhận xét rằng tài liệu chính thức còn thiếu, cũng có người chia sẻ trải nghiệm tích cực rằng diễn đàn cộng đồng thân thiện và hoạt động tích cực (al4711)
- Các dự án thay thế khác như SILE hay Lout trước đây cũng được nhắc đến, đồng thời nhấn mạnh lịch sử chúng không thể lan rộng do thiếu hiệu ứng mạng lưới (rogerwhittaker, ceplm, anton)
- Sự phát triển liên tục của LaTeX và so sánh
- Gần đây LaTeX cũng đang bổ sung các tính năng hiện đại như Tagged PDF (tăng cường khả năng truy cập), và các nhà nghiên cứu lẫn nhà phát triển vẫn đang tích cực cải tiến nó (jschrod)
- Nhiều công cụ như Overleaf, LyX cũng cải thiện tính dễ dùng của LaTeX và hữu ích cho cộng tác hoặc việc học của người mới bắt đầu (smitty_one_each, paulj, callegar)
- Dù Typst có ưu điểm là đơn giản và hiện đại hơn LaTeX, vẫn có góc nhìn hoài nghi rằng hệ sinh thái tích lũy hàng chục năm và các tính năng chuyên sâu thì nó chưa thể theo kịp (norbusan, callegar)
- Các thảo luận khác
- Tính năng nhúng PDF của Typst gần đây đã được bổ sung, và tính năng tương tự
parshape cũng đã xuất hiện dưới dạng package (Delio, yashi)
- Cũng có phê bình rằng sau nhiều thập kỷ, Typst rốt cuộc sẽ lặp lại các vấn đề tương thích và độ phức tạp giống LaTeX (norbusan)
- Một số người chỉ ra các vấn đề chi tiết như thiếu chỉnh italic correction trong Typst, nhấn mạnh rằng so với các tính năng truyền thống tinh vi của LaTeX thì nó vẫn còn thiếu (callegar)
3 bình luận
Có lẽ phải chờ thêm một chút cho đến khi hệ sinh thái được hình thành..
Tôi cho rằng Typora vượt trội hơn LaTeX ở nhiều mặt.
Tuy vậy, vẫn còn những lỗi vặt, và điều đáng tiếc là phải mất quá nhiều thời gian để có phiên bản mới.
Có vẻ như họ tự vận hành cộng đồng riêng, rồi thử thu phí editor + cloud nhưng không thành công, nên tốc độ phát triển không còn được như trước.
Ý kiến trên Hacker News
Thật vui khi thấy Typst ngày càng được chú ý hơn. Ở tổ chức của tôi là Zerodha, chúng tôi đã chuyển một quy trình công việc thực tế sang Typst từ 2 năm trước. Đó là tác vụ tạo hơn 1,5 triệu PDF mỗi ngày rồi gửi qua email. Trước đây chúng tôi dùng một pipeline dựa trên LaTeX (ban đầu là pdflatex, sau đó là lualatex), nhưng luôn gặp vấn đề lỗi bộ nhớ không rõ nguyên nhân với tài liệu dung lượng lớn, và Docker image quá to khiến thời gian khởi động của các worker tạm thời bị chậm. Khi chuyển sang Typst, chúng tôi có thể dùng image rất gọn với một static binary duy nhất, và tốc độ khởi động cải thiện rõ rệt. Hiệu năng cũng tăng cực mạnh. Tổng thời gian biên dịch nhanh hơn LaTeX khoảng 3–4 lần, còn với tài liệu lớn hơn 2000 trang thì Typst chỉ mất 1 phút trong khi lualatex mất tới 18 phút. Trải nghiệm cho lập trình viên cũng tốt hơn, và thông báo lỗi thân thiện hơn rất nhiều nên tôi rất hài lòng. Tôi đã viết chi tiết về toàn bộ kiến trúc và trải nghiệm migration sang Typst, ai quan tâm có thể xem tại đây
Tôi đang dùng pipeline LaTeX để tạo nhiều loại tài liệu như văn bản, hóa đơn, biểu mẫu... dựa trên các snippet từ cơ sở dữ liệu. Phần thiết lập khá phức tạp nhưng kết quả thì rất đáng hài lòng. Tôi cũng muốn dùng một ngôn ngữ markup dễ hơn, nhưng lại lo rằng sẽ chỉ tốn thời gian rồi cuối cùng đụng phải giới hạn. Những điều kiện tôi thực sự cần là: có thể chỉ định ngắt cột/ngắt trang hợp lý trong nhiều cột (ví dụ chỉ định số dòng tối thiểu ở cột/trang mới), tự động ngắt từ đáng tin cậy cho nhiều ngôn ngữ (Anh/Đức, sau này là Pháp/Ý/Tây Ban Nha), tự động bố trí ảnh trong cột, tự động ngắt trang cho bảng và biểu mẫu phức tạp, ảnh nền, và các vùng khác nhau được xử lý kiểu như mini page. Tôi tò mò không biết Typst có làm được tất cả những việc này không
Sẽ rất thú vị nếu có thể chia sẻ một vài mẫu hoặc ví dụ tài liệu mà bên bạn tạo ra
Các công ty tôi từng làm thường xuyên gửi PDF như tài liệu thống kê, báo cáo nhỏ và nhiều loại tài liệu kinh doanh khác theo định kỳ. Phần lớn họ tạo PDF bằng MJML, HTML tự viết hoặc Puppeteer. Tôi cũng tò mò liệu Typst có phù hợp trong những trường hợp như vậy không
Tôi tò mò vì sao trong use case của các bạn ban đầu lại dùng LaTeX. So với chuyện thay thế LaTeX, việc chọn LaTeX làm điểm xuất phát còn khiến tôi ngạc nhiên hơn
So với LaTeX thì Typst đúng là khác biệt một trời một vực. Tôi đang viết luận án tiến sĩ bằng Typst, và thành thật mà nói đó gần như là một lựa chọn mang tính phiêu lưu. Nó vẫn chưa có cộng đồng người dùng lớn và cũng chưa hoàn toàn ổn định. Nhưng một khi đã dùng thử thì tôi không quay lại được nữa. Tôi vẫn còn phải khớp template LaTeX mà trường yêu cầu đến từng pixel, nhưng tôi đã tin chắc rằng Typst phù hợp hơn hẳn. Dù đã dùng LaTeX hơn 10 năm, tôi cũng không thể nói mình thật sự hiểu TeX. Trong khi đó, với Typst chỉ sau vài ngày tôi đã có thể dùng rất hiệu quả. Nếu thiếu package cần thiết, tôi có thể tự làm rất nhanh, mà thực ra phần lớn nhu cầu cũng đã được hỗ trợ bởi các package rất tốt. Những việc mà với LaTeX tôi không dám mơ tới thì trong Typst lại làm rất dễ. Một trong những thứ làm giảm năng suất nhiều nhất với TeX là xung đột package, tương thích và vấn đề phiên bản, còn trong Typst thì hoàn toàn không có kiểu đó. Lý do là nó cung cấp một ngôn ngữ lập trình thực thụ cùng hệ thống module. Tốc độ biên dịch cũng nhanh, và trải nghiệm sử dụng tổng thể thực sự rất xuất sắc. Tuy nhiên nó không phải hoàn hảo 100%. Có một vài quyết định thiết kế hơi đáng tiếc, và một số phần vẫn đang được phát triển, ví dụ như tính năng chèn PDF như hình ảnh. Chất lượng dàn trang cũng có cảm giác chỉ đạt khoảng 95% so với TeX (mà TeX thì lúc nào cũng hoàn hảo). Đôi khi tôi còn phải chỉnh kerning thủ công. Nhưng tôi kỳ vọng tương lai nó sẽ tiếp tục cải thiện
Việc phải khớp template LaTeX của trường đến từng pixel có khi lại là may mắn. Phần lớn mọi người phải sao chép nguyên template MS Word của trường sang LaTeX cho khớp
Tôi nghĩ Typst cũng sẽ tiếp tục phát triển. Tuy vậy, đôi lúc đã có những thay đổi lớn làm vỡ tương thích. Sửa thì không quá khó, nhưng việc debug không hẳn trực quan. Có vẻ rất nhiều người muốn Typst thành công. TeX và LaTeX quá đồ sộ và phức tạp, nên tôi cảm thấy cần một kiểu “bản phân phối” LaTeX gọn gàng hơn. Sẽ hay nếu nó được đóng gói tốt theo đơn vị nguyên tử bằng container. Nhiều khi nhận một template rồi định build thì lúc nào cũng thiếu cái gì đó. Thật vui khi thấy đổi mới vẫn tiếp tục trong lĩnh vực này
Điều thú vị là bạn đã dùng LaTeX hơn 10 năm, nhưng chỉ vài ngày là đã thành thạo Typst. Vì sao vậy? Có phải do bạn có nền tảng CS không?
Tôi tò mò không biết câu “sao chép đến từng pixel” là theo nghĩa đen hay chỉ là nói quá. Trong LaTeX có khá nhiều package gần như không thể sao chép đến cấp độ pixel, đặc biệt là những thứ như microtype vốn hay dùng trong bài báo khoa học
Có thể xem thêm bài blog nói về trải nghiệm viết luận án bằng Typst
Tôi đã tổng hợp một số điều cảm nhận được khi dùng Typst so với LaTeX
\document{}, còn Typst thì có thể đặt ngay gần chỗ cần dùngjson("some_file.json")để nạp trực tiếp bảng kết quả. Khi viết bài báo, tôi tạo dữ liệu JSON bằng script benchmark rồi nạp thẳng vào Typst và biên dịch thành PDF để dùngKhông nhất thiết phải khai báo macro ở trên cùng; có thể khai báo ở bất cứ đâu. Trong LaTeX, package thì đúng là chỉ load được ở preamble, nhưng macro thì có thể khai báo ở bất kỳ đâu. Semantic line break cũng không có vấn đề gì trong LaTeX. Tôi đồng ý với ý kiến về tốc độ biên dịch và thông báo chẩn đoán. Đó là nhược điểm lớn nhất của LaTeX
Thực ra đúng như ý 5, macro có thể khai báo ở bất kỳ đâu. Chỉ là theo thói quen người ta để trong preamble thôi
Tôi tò mò không biết đã có ai thực sự dùng Typst để viết kiểu bài báo hoàn chỉnh chưa. Tôi chỉ thành công ở mức rất hạn chế, và vì chưa nhiều người dùng nên nhiều lúc phải tự mình xử lý vấn đề
Typst không chỉ là macro, mà là một ngôn ngữ lập trình thực sự với function, type, module (thậm chí có namespace) và nhiều tính năng khác. Nhờ đó mà mức độ đau khổ giảm khoảng 80% so với khi làm việc bằng TeX, nhất là với những thứ vượt ra ngoài báo cáo thí nghiệm đơn giản của sinh viên đại học. Nó chưa hoàn hảo, nhưng đúng là một khác biệt rất lớn theo hướng tốt hơn
Bản thân LaTeX thật ra lại đơn giản và trực tiếp hơn LaTeX rất nhiều. Nó thậm chí còn khiến người ta bối rối vì có quá nhiều quyền kiểm soát. Ví dụ đây là một tài liệu plain TeX hợp lệ: $$\aleph_0$$ \bye. Không cần dùng begin/end cũng được. Nếu dùng các bộ macro như extended plain thì có thể mở rộng thêm chức năng. Tôi cũng từng viết toàn bộ luận án bằng extended plain, nhưng khi nộp cho thư viện thì bị yêu cầu viết lại bằng file style LaTeX, nên cuối cùng phải sửa sang LaTeX
Để Typst thực sự trở thành đối thủ của LaTeX, các bài báo và hội nghị học thuật phải chính thức chấp nhận template Typst. Việc phổ biến trong đại học rốt cuộc vẫn phụ thuộc vào việc các nhà xuất bản có chấp nhận hay không. Hiện tại gần như chưa có hỗ trợ nào cho Typst trong cộng đồng nghiên cứu. Mọi người đã dùng template LaTeX cho bài báo/slide/báo cáo từ lâu rồi, nên chỉ khi template Typst được một giáo sư hoặc phòng lab chấp nhận trước, rồi lan ra toàn trường, xa hơn nữa là tới hội nghị/tạp chí thì mới thực sự có ý nghĩa. Quá trình này rất dài, rất chán và hiện vẫn đang diễn ra. Nhưng đó là bước bắt buộc
Có thể là vì tôi không rõ những vấn đề cụ thể của dàn trang chuyên nghiệp hơn như kiểu nộp cho journal, nhưng thật ra tôi cũng không chắc dàn trang trong bài báo nghiên cứu có quan trọng đến vậy không. Tôi nghĩ thực tế chỉ cần một định dạng đơn giản hơn và tập trung vào nội dung là đủ. Phía nhà xuất bản sách hoặc bài báo cứ tự dàn trang bản nộp theo style của họ là được. Từ góc nhìn của nhà nghiên cứu, sẽ tốt hơn nếu chỉ cần quan tâm tới một định dạng đơn giản, tập trung vào nội dung. Thực ra tôi còn muốn một dạng markdown cho nghiên cứu trở thành chuẩn hơn là LaTeX hay Typst
Từ góc nhìn của nhà nghiên cứu, LaTeX đã giải quyết vấn đề khá tốt rồi nên cũng không có nhiều lý do để đổi
Tôi đã viết nhiều ghi chú bài giảng và luận văn thạc sĩ toán bằng LaTeX. Nếu chỉ viết nội dung trên template do người khác làm sẵn thì LaTeX cũng khá ổn. Nhưng khi muốn tự làm package hoặc tìm hiểu cấu trúc bên trong thì đúng là cảm giác như ma thuật đen. Phải cực kỳ cẩn thận để các package không xung đột nhau, lại còn đầy những cách lách rất đặc thù nên lúc nào cũng phức tạp. Nếu Typst trở thành một giải pháp thay thế LaTeX giúp xử lý layout và thiết kế trực tiếp một cách dễ dàng thì sẽ rất tuyệt. Tôi mới chỉ dùng Typst ở mức thử nghiệm, nhưng bản thân ngôn ngữ thì tôi thích. Thật ra khi chỉ viết văn bản, tôi không nghĩ cú pháp là vấn đề quan trọng đến vậy. Nhân tiện, khi viết luận văn thạc sĩ thực tế, ban đầu tôi viết bằng reStructuredText rồi dùng Pandoc để tạo LaTeX và PDF; sau khi có cấu trúc tổng thể thì tôi chỉnh phần LaTeX và vẽ lại các hình cần thiết để hoàn thiện. Điểm hay là có thể bắt đầu ngay mà không cần một preamble dài. Tôi vẫn nghĩ vấn đề không nằm ở cú pháp, mà là nếu lo quá nhiều về thiết kế ở giai đoạn đầu thì sẽ không viết nổi phần nội dung chính
Tôi chưa dùng Typst quá nhiều, nhưng cảm giác của tôi là khi viết template bằng Typst thì yếu tố “ma thuật đen” ít hơn LaTeX rất nhiều. Thậm chí tôi còn thấy nó cho phép tạo cấu trúc tự do hơn cả LaTeX
Nếu bạn muốn khả năng kiểm soát trực tiếp và mạnh hơn với thiết kế/layout tài liệu thì tôi khuyên dùng ConTeXt chứ không phải LaTeX hay Typst. Là một graphic designer, tôi cực kỳ thích ConTeXt và không có ý định thay nó bằng công cụ khác. Còn nếu chỉ viết nội dung và không quan tâm đến thiết kế thì LaTeX hay Typst vẫn đều rất tuyệt
Tôi cũng từng viết luận văn bằng reStructuredText, tạo PDF bằng Pandoc và latexmk, rồi chèn lossless các biểu đồ PDF sinh từ matplotlib và Python. Tôi tò mò không biết có điều gì bạn không làm được với reStructuredText không. Vì có thể dùng cả template LaTeX, mà bản thân reStructuredText cũng mạnh hơn Markdown và các họ markdown khác, nên tôi nghĩ cứ tiếp tục dùng reStructuredText cũng hoàn toàn ổn
Chú thích của bạn thực ra cho thấy LaTeX không hẳn là một lựa chọn tốt cho lắm. Tôi cũng vừa viết một bài báo bằng Typst, trước đó thì dùng LaTeX. Với LaTeX tôi viết bằng Markdown rồi chuyển sang LaTeX sau, còn với Typst thì không cần làm vậy. Nếu sau này Typst vẫn duy trì được chất lượng dịch vụ mà không xuống cấp, tôi sẽ cứ tiếp tục dùng Typst
Dạo này tôi đang dùng Typst để thay Pandoc + LaTeX khi viết sách (liên kết GitHub). Cú pháp Typst dễ như Markdown, và việc lập trình với nó dễ hơn LaTeX rất nhiều (dù vẫn còn hơi thô ở vài chỗ). Với LaTeX, lúc nào tôi cũng phải dựa vào package và tránh các tương tác kỳ quặc giữa chúng, nên rất mất công. Với Typst thì tự triển khai phần cần thiết cũng dễ hơn. Nó rất nhanh, và cũng không bừa bãi để lại quá nhiều file trong filesystem. Nếu viết tài liệu kỹ thuật tập trung vào PDF thì tôi thực sự khuyên dùng
Ngoài ra còn có SILE như một hệ thống dàn trang thay thế. Nó hỗ trợ cả kiểu XML-based lẫn TeX-style, có thể script bằng lua. Khác với (La)TeX hay Typst, nó còn có một đặc tả gần mức tài liệu chính thức. Với công thức thì có thể dùng trực tiếp MathML. Tuy nhiên tôi chưa dùng thực tế Typst hay SILE, chỉ mới đọc tài liệu. HTML + MathML cũng ổn, và cũng có những trường hợp dùng XML source + XSLT để viết theo template, như giáo trình OpenStax (dựa trên CNXML). Ngoài ra còn có nhiều tổ hợp khác như troff (plus eqn), Texinfo, org-mode, nhúng LaTeX, Markdown + HTML/MathML...
Với người đã dùng LaTeX lâu năm như tôi, tôi đã đi qua và biết cách giải quyết vô số trường hợp đặc biệt trong LaTeX, nên việc chuyển sang một hệ thống mới là điều khá nặng nề. Dù Typst có tốt đến đâu, tôi vẫn sợ lại phải lặp lại cả quá trình đó từ đầu. Tôi cũng lo vì cộng đồng Typst chưa lớn, nên không biết liệu đã có ai từng gặp vấn đề của mình và chia sẻ cách giải quyết hay chưa. Nhìn các ví dụ chính thức thì mọi thứ rất đẹp, nhưng thế mạnh của LaTeX là khả năng tùy biến cực kỳ chi tiết (thụt đầu dòng, ký hiệu marker, khoảng cách...) đều có thể kiểm soát tinh vi, nên tôi tò mò không biết Typst có đạt đến mức đó không
Tôi cũng cùng băn khoăn như vậy. Đúng là nó là một ngôn ngữ layout rất tốt, và chất lượng production cũng cao hơn nhiều. Nhưng chắc chắn rồi ta vẫn sẽ lại gặp những case lạ và giới hạn mới. Tệp người dùng của Typst vẫn chưa đủ lớn. Thêm nữa, tôi đã thử kiểm tra năm ngoái thì AI như Claude Code vẫn chưa hiểu Typst đủ tốt
Typst đến giờ vẫn chưa hỗ trợ native việc đặt ảnh nổi tự nhiên trong phần thân bài (kiểu để văn bản bao quanh ảnh). Có thể đặt ảnh ở đầu hoặc cuối trang, nhưng kiểu “floating image” ở giữa nội dung thì chưa được hỗ trợ native
Nếu muốn biết mức độ kiểm soát tùy biến danh sách (thụt đầu dòng, khoảng cách, ký hiệu...) thì có thể xem tài liệu chính thức: tài liệu về mô hình list của Typst
Cũng cần nghĩ đến trường hợp luận văn hay bài báo của bạn bị cơ quan khác (thư viện, hội nghị...) yêu cầu chỉ nhận LaTeX thì sẽ làm sao
Typst thật sự đáng kinh ngạc. Dạo gần đây còn có cả câu đùa rằng sinh viên toán giờ không viết bài mà lại đi viết package Typst. Mười năm nữa nó sẽ tiến xa đến đâu thật đáng chờ xem. Ưu điểm: biên dịch gần như tức thì, nên chỉ cần lưu file
.typlà PDF được tạo ra ngay. Tôi cũng hay dùng nó như một lựa chọn thay Markdown, vì không cần chuẩn bị gì đặc biệt mà vẫn cho ra PDF đẹp ngay lập tức. Nhược điểm: thông báo lỗi đôi khi quá súc tích đến mức khó debug, và chỉ cần một lỗi cú pháp là PDF sẽ không được tạo ra luôn, nên khó dùng một số mẹo debug từng phần như với LaTeX. Khi dùng package bên ngoài cũng có lúc gặp rắc rối, nhưng với ai dùng LaTeX lâu năm thì đó cũng không phải điều gì quá bất ngờ