- Mở rộng cú pháp Markdown hiện có để có thể dễ dàng tạo tài liệu ở nhiều định dạng như sách, bài báo học thuật, slide, bản trình bày với vai trò là một hệ thống typography hiện đại
- Tích hợp trực tiếp các tính năng nâng cao vào markdown như hỗ trợ hàm, sử dụng biến, câu lệnh điều kiện/vòng lặp, thư viện chuẩn, nhờ đó khác biệt với Markdown truyền thống hay LaTeX về khả năng mở rộng và tự động hóa
- Từ một tệp nguồn duy nhất có thể tạo ra nhiều đầu ra như HTML, PDF, slide (reveal.js), paged book (paged.js), phù hợp với quy trình tạo nội dung dựa trên mã
- Với tính năng scripting và cú pháp mở rộng giàu khả năng biểu đạt, có thể tự do hiện thực cả những nội dung phức tạp hoặc động
- Cung cấp môi trường REPL, xem trước trực tiếp, biên dịch nhanh, cho phép chỉnh sửa và gỡ lỗi tài liệu theo thời gian thực
- So với các công cụ hiện có, có ưu thế trước Markdown, LaTeX, Typst, AsciiDoc, MDX ở các mặt như tính năng scripting, khả năng kiểm soát tài liệu, đường cong học tập dễ tiếp cận
- Không cần môi trường phát triển riêng hay cấu hình phức tạp, chỉ cần Java 17 trở lên là có thể sử dụng trên các hệ điều hành chính
Giới thiệu
- Quarkdown là một hệ thống sắp chữ hiện đại được thiết kế để giúp người dùng dễ dàng tạo ra thành phẩm chất lượng cao ở nhiều định dạng, từ văn bản đơn giản đến sách, bài báo học thuật, slide, bằng cách bổ sung hàm và cú pháp mở rộng lên cấu trúc cơ bản của Markdown
- Được phát triển dựa trên CommonMark và GFM, đồng thời hỗ trợ đầy đủ cú pháp riêng, hàm, biến và cả thư viện do người dùng tự định nghĩa
- Cung cấp cú pháp riêng mang tên Quarkdown Flavor
- Thông qua cú pháp mở rộng hàm Turing-complete, bổ sung vào markdown các tính năng nâng cao như hàm, câu lệnh điều kiện, vòng lặp
- Có thể sử dụng nhiều tính năng như bố cục, nhập/xuất, toán học, câu lệnh điều kiện, vòng lặp... bằng thư viện .qmd
- Ngay cả khi cần cấu trúc tài liệu phức tạp hoặc nội dung động, vẫn có thể nâng cao khả năng mở rộng và năng suất
Tính năng chính và cách sử dụng
- Hỗ trợ nhiều định dạng đầu ra như HTML, slide, sách (Paged), PDF
- Có thể chỉ định loại tài liệu bằng lời gọi hàm như .doctype {slides}, .doctype {paged}
- Tích hợp với các engine mã nguồn mở như reveal.js, paged.js
- Scripting và nội dung động
- Đưa vào các yếu tố lập trình như hàm, biến, câu lệnh điều kiện, vòng lặp
- Ví dụ: .function {greet} ... .greet {world} from:{iamgio}
- Xem trước trực tiếp, biên dịch nhanh
- Cung cấp tính năng xem trước theo thời gian thực và theo dõi thay đổi tệp (Watch)
- Tăng hiệu quả làm việc với các tùy chọn -p --preview, -w --watch
- So sánh với các công cụ tài liệu khác
- Dễ học hơn LaTeX, và khả năng mở rộng tính năng tốt hơn Markdown
- So với Typst, AsciiDoc, MDX cũng có thế mạnh về scripting/khả năng biểu đạt
Mục tiêu hỗ trợ
- HTML
- Đầu ra thông thường (mặc định)
- Slide (sử dụng reveal.js)
- Dạng sách/bài báo (sử dụng paged.js, cần web server)
- PDF
- Có thể xuất ra PDF mọi loại tài liệu và tính năng mà HTML hỗ trợ
- Xem chi tiết về xuất PDF trong tài liệu wiki
- Điều khiển định dạng đầu ra bằng lời gọi hàm như
.doctype {slides}, .doctype {paged}
So sánh
|
Quarkdown |
Markdown |
LaTeX |
Typst |
AsciiDoc |
MDX |
| Tính ngắn gọn·khả năng đọc |
✔ |
✔ |
✗ |
✔ |
✔ |
✔ |
| Kiểm soát toàn bộ tài liệu |
✔ |
✗ |
✔ |
✔ |
✗ |
✗ |
| Tính năng scripting |
✔ |
✗ |
hỗ trợ một phần |
✔ |
✗ |
✔ |
| Xuất dạng sách/bài viết |
✔ |
✗ |
✔ |
✔ |
✔ |
3rd party |
| Xuất bản trình bày |
✔ |
✗ |
✔ |
✔ |
✔ |
3rd party |
| Đường cong học tập |
xanh lá |
xanh lá |
đỏ |
cam |
xanh lá |
xanh lá |
| Hỗ trợ đầu ra |
HTML, PDF |
HTML |
PDF, PostScript |
PDF |
HTML, PDF, ePub |
HTML |
5 bình luận
Có lẽ vì có bảng nên bố cục trên di động bị vỡ.
Đặt
min-width: 0cho.topic_contentslà sẽ sửa được.min-widthđúng là rất đau đầu...À, tôi đã giải quyết được bằng một cách khác rồi. Cảm ơn!
Cảm ơn bạn đã phản hồi nhanh~
Ý kiến trên Hacker News
Trình soạn thảo văn bản FOSS của tôi là KeenWrite dùng cách tiếp cận tương tự để chuyển đổi từ Markdown sang XHTML, TeX và PDF
Kiến trúc phần mềm cho thấy có thể thiết kế chuỗi bộ xử lý như thế nào
Lý do tôi tạo ra KeenWrite là để có thể dùng các biến như tên nhân vật hay địa danh khi viết tiểu thuyết khoa học viễn tưởng
Xem thêm trong hướng dẫn
Với những ai vẫn dùng pandoc và shell script, loạt bài Typesetting Markdown giải thích cách xây dựng hạ tầng dựa trên script để chuyển Markdown sang PDF
Có thể xem thêm thông tin về KeenWrite tại đây
Sơ đồ kiến trúc có thể xem tại đây
Sẽ thú vị nếu so sánh Typst, vốn gần đây nhận được rất nhiều chú ý, với dự án này, nên khá bất ngờ khi ma trận so sánh tính năng hoàn toàn không nhắc đến Typst
Nhìn chung hai dự án này có vẻ rất giống nhau
Tôi tự hỏi liệu bảng so sánh có chính xác không – liên kết
Tôi tin LaTeX rõ ràng có khả năng scripting hoàn chỉnh, dù đúng là dùng khá khổ
Tôi hoài nghi về nhận định rằng cú pháp khó hiểu của Quarkdown lại ngắn gọn và dễ đọc hơn Typst
Tôi cũng không nghĩ đường cong học tập của nó dễ hơn Typst, trông hai bên gần như tương đương
Tôi nghĩ LaTeX cũng có thể tạo HTML bằng tex4ht
Rào cản gia nhập khó mà thấp hơn thế được nữa
Tất nhiên đường cong học tập không hoàn toàn đồng nghĩa với rào cản gia nhập, nhưng hai khái niệm này chồng lấp khá nhiều
Và “đường cong học tập” là một đặc tính mang tính chủ quan
Đưa nó vào bảng so sánh thì ngay từ đầu đã khó tránh khỏi méo mó
Các tính năng cụ thể thì khách quan hơn, nhưng đôi khi do đặc tính sản phẩm mà có thể không cần một số tính năng nhất định
Bảng so sánh rõ ràng là không chính xác
Bản xuất mẫu trông rất đẹp
Nhưng tôi thường không thích khi ngôn ngữ template phình ra vì các lời gọi hàm hay độ phức tạp
Dĩ nhiên trong ngữ cảnh này có thể nó hợp lý
Nhưng nếu phải dùng cùng ngôn ngữ khác, chẳng hạn trong server-side rendering hay tạo tài liệu dựa trên dữ liệu, thì sẽ tốn quá nhiều thời gian qua lại giữa hai ngôn ngữ
Ngôn ngữ template không bao giờ mạnh bằng một ngôn ngữ “thật”
Vì vậy tôi thích kiểu JSX hoặc tagged template literal của JavaScript hơn
Tốt hơn là dùng ngôn ngữ lập trình thực sự mà vẫn hiểu ngữ cảnh tài liệu để bớt lo chuyện escape như XSS
Tôi thắc mắc dự án này khác gì Quarto
Tên cũng na ná, phần mở rộng cũng giống, định hướng cũng tương tự nhưng tính năng lại có vẻ ít hơn – Quarto
FAQ nói rõ là do cùng nhóm phát triển làm ra
Vài ngày trước một người bạn cho tôi xem cách họ viết lại toàn bộ kịch bản bài giảng bằng Quarto và còn nhúng cả phần trình chiếu, nhìn khá gọn gàng
Việc Quarto tích hợp tốt với R Studio và Jupyter Notebook là một ưu điểm lớn
Tôi nghĩ đây là hiện tượng kiểu tiến hóa hội tụ
Thật thú vị khi thứ có thể trông như “planet” thực ra lại là một quark, cụ thể là down quark
Dự án rất ngầu, nhưng vì QuarkXPress là một thương hiệu nổi tiếng trong ngành xuất bản nên việc dùng từ “Quark” làm tên hệ thống xuất bản hơi rủi ro
Có thể xem thông tin đăng ký nhãn hiệu liên quan tại đây, tại đây
(Tôi cũng thắc mắc vì sao lại có hai đăng ký nhãn hiệu cho cùng một từ)
Trong mọi thread thảo luận về lĩnh vực này lúc nào cũng có đến 70% bình luận kiểu “sao không dùng LaTeX?”, nên để tôi nói rõ trước
Tôi thực sự cần một hệ thống dàn trang hiện đại dựa trên Markdown
Tôi mong có nhiều nỗ lực thay thế LaTeX hơn
LaTeX thực sự rất bất tiện và cổ lỗ, và tôi muốn có một hệ thống cho phép markup linh hoạt hơn
Kể cả nếu cú pháp dài ra khi tính năng phong phú hơn thì vẫn rõ ràng là cần một vùng nằm giữa Markdown và thứ mạnh hơn một chút
Nhưng tôi có cảm giác dự án này không phải thứ tôi tìm kiếm
Nhìn ví dụ thì có vẻ nó chỉ nghiêng về phía mạnh hơn Markdown một chút, chứ chưa đủ để thay thế hẳn LaTeX (hay Typst)
Loại hệ thống tài liệu này phải dùng thật sự “mượt”, còn cái này không cho tôi cảm giác đó
Điều này không tốt cho khả năng lan truyền
Tôi muốn nó tương thích với Markdown thường càng nhiều càng tốt, nhưng việc bắt buộc thụt lề cho tham số hàm khiến có vẻ cả tài liệu sẽ bị thụt vào, trong khi điểm mở rộng của Markdown thông thường lại tự nhiên hơn ở dạng code block kiểu ```plugin-name`
Sự khác biệt cú pháp có thể buộc phải thay đổi cấu trúc của cả tài liệu
Nếu làm tài liệu để xuất bản thì cứ dùng LaTeX cũng được
Hữu ích nhất là khi nó tích hợp tốt vào ứng dụng ghi chú
Có thể vẫn có người làm trong Emacs hay Vim, nhưng tôi cũng phải thú nhận rằng một người hoài cổ như tôi cuối cùng vẫn chuyển sang Obsidian và các ứng dụng tương tự
Sẽ hay hơn nếu có phần giúp kiểm soát cấu trúc tài liệu tốt hơn trong ứng dụng ghi chú, hoặc kết nối thêm tính năng xuất bản
Nếu là ứng dụng độc lập thì tôi không rõ vì sao phải dùng nó
Ít ra Typst còn có editor online, mọi người đều dùng cái đó
Điều cốt lõi là không thêm những thứ vô ích vào tài liệu
Những hệ thống như thế này (bao gồm Typst) về cơ bản là để dàn trang văn bản dài như bài báo khoa học
Tôi muốn nó trở thành một lựa chọn thay thế cho HTML, nhưng dù đã thử Typst, tôi vẫn thấy các tác giả hầu như chỉ quan tâm đến “bài báo hay văn bản dài”
Tôi cũng muốn làm những thứ như biểu mẫu, hóa đơn, tờ rơi, danh thiếp, nhưng các yếu tố như vậy dường như nằm ngoài mối quan tâm của họ
(Thực ra tôi đang nghĩ đến Sile, nhưng Typst cũng tương tự)
Tôi chưa dùng sâu Typst vì nó mang tính thương mại
Đặc biệt là biểu mẫu tương tác thì tôi nghe nói đã được làm rồi (backend của pdf writer đã hỗ trợ một phần)
Có lẽ sau một thời gian nữa Typst sẽ có tính năng biểu mẫu – xem issue
Những thứ như hóa đơn, tờ quảng cáo, danh thiếp đòi hỏi đặt các phần tử nhỏ thật chính xác vào giữa trang hoặc sát mép, mà việc này thuận tiện hơn với công cụ WYSIWYG
Chỉ dàn trang dựa trên văn bản thì sẽ phải thử sai quá nhiều
Ví dụ báo lá cải có dòng chữ phải chảy và ôm quanh hình ảnh hay các khung cắt chứ không phải hình chữ nhật, nên làm việc đó chỉ bằng tọa độ mà không nhìn trực tiếp gần như là cực kỳ khó
Tôi cài qua cargo bằng Rust và dùng hoàn toàn ổn mà không cần editor online
Nó khá dễ để tạo nhiều loại tài liệu khác nhau
Tôi đã dùng nó như một lựa chọn thay thế để làm slide và handout
Dù vẫn còn thiếu vài tính năng như bọc ảnh hay text flow, nhưng ngay cả trong TeX đây cũng là việc khó và Typst dự kiến sẽ bổ sung sau
Ví dụ poster
Cái này trông gần như y hệt reStructuredText (rST)
Cú pháp hàm của Quarkdown (
.somefunction {đối số} {đối số} nội dung) và cú pháp hàm của rST (.. somefunction:: {đối số} {đối số} nội dung) rất giống nhauCó quá nhiều thứ như Markdown, Quarkdown, Typst mà lại không được chuẩn hóa, nên cuối cùng tôi quay về HTML+CSS
Tôi chưa trực tiếp dùng thử nhưng đang cân nhắc khá nghiêm túc
Các định dạng còn lại đều phức tạp và có đường cong học tập, làm cản trở chính việc viết lách
Với XML tôi có thể tự định nghĩa tag, rồi dùng parser để tạo ra nhiều cấu trúc khác nhau như tự động sinh chú thích cuối trang
Không biết có ai từng dùng cách tiếp cận như vậy chưa
Vấn đề là quá nhiều người cứ chất thêm hệ thống lên trên nó, trong khi ngay từ đầu họ đang cố giải quyết một thứ “phức tạp hơn”
Họ tưởng là đang cải tiến một hệ thống vốn dành cho mục đích đơn giản, nhưng thực ra lại không nhận ra giới hạn của nó, và chỉ làm tăng thêm sự lặp lại lẫn rối rắm không cần thiết
Không phải thiếu tính năng, mà là đang dùng vượt ra ngoài phạm vi mục tiêu thiết kế
Thậm chí nếu Windows Notepad có thêm định dạng văn bản thì về bản chất tôi cũng không cho đó là cải tiến
Vì Notepad vốn đã có vai trò nguyên bản của nó
Nếu bạn không ghét Emacs thì đây là một lựa chọn tốt
Không cần phải nhớ hàng trăm framework và cú pháp phức tạp đến thế
Chỉ cần ra lệnh cho AI tạo một bộ chuyển đổi markdown sang html cũng ổn
Ngay cả trong The Art of Unix Programming xuất bản năm 2003 cũng có nói rằng chỉnh XML trực tiếp là một nỗi đau, nên người ta phải tạo ra đủ loại định dạng và parser mới