Quiver - Trình chỉnh sửa sơ đồ giao hoán hiện đại
(github.com/varkor)- Quiver là trình chỉnh sửa để tạo sơ đồ giao hoán và sơ đồ dán bằng giao diện đồ họa, hỗ trợ kết xuất chất lượng cao để hiển thị trên màn hình và xuất sang LaTeX·Typst
- Việc tạo và chỉnh sửa sơ đồ nhanh hơn nhiều so với viết LaTeX hoặc Typst thủ công; khi đã quen, tốc độ thao tác có thể gần như dùng bút và giấy
- Có thể xử lý các sơ đồ phức tạp như pullback, pushout, adjunction, higher cell, đồng thời cung cấp lưới linh hoạt tự điều chỉnh theo kích thước nhãn và các kiểu mũi tên có thể kết hợp
- Có thể thao tác bằng cả kéo thả chuột lẫn phím tắt, hỗ trợ chọn nhiều mục, hoàn tác·làm lại, macro người dùng, xuất sơ đồ nhúng HTML, pan·zoom
- Khi xuất sang LaTeX hoặc Typst, liên kết tới sơ đồ cũng được chèn kèm để sau này có thể mở lại chỉnh sửa hoặc chia sẻ với người khác
Quiver làm gì
- Quiver là trình chỉnh sửa đồ họa hiện đại để tạo sơ đồ giao hoán và sơ đồ dán
- Kết xuất các sơ đồ chất lượng cao, đẹp khi xem trên màn hình; có thể xuất LaTeX thông qua tikz-cd, và xuất Typst thông qua fletcher
- Có thể dùng thử trực tiếp trên web tại q.uiver.app
- Cách sử dụng hiệu quả cũng như cách tạo và chỉnh sửa sơ đồ chỉ bằng bàn phím được tổng hợp trong hướng dẫn Quiver
Tính năng vẽ sơ đồ
- Cung cấp giao diện hiệu quả và trực quan để tạo các sơ đồ giao hoán phức tạp và sơ đồ dán
- Các ví dụ được hỗ trợ gồm
- sơ đồ có pullback và pushout
- adjunction
- higher cell
- Việc bố trí đối tượng dựa trên lưới linh hoạt điều chỉnh theo kích thước nhãn
- Mũi tên có thể kết hợp nhiều kiểu khác nhau
- Có thể dùng màu cho nhãn và mũi tên
- Được thiết kế để trông đẹp cả trong ảnh chụp màn hình, đồng thời kết quả xuất ra LaTeX·Typst cũng giống sơ đồ gốc nhất có thể
Cách nhập liệu và quy trình chỉnh sửa
- Có thể tạo và chỉnh sửa sơ đồ bằng cách nhấp·kéo chuột
- Cung cấp bộ phím tắt cho phép thực hiện mọi thao tác, nên cũng có thể chỉnh sửa chủ yếu bằng bàn phím
- Có thể chọn nhiều phần tử cùng lúc để thay đổi hàng loạt một cách dễ dàng và nhanh chóng
- Hệ thống lịch sử cho phép hoàn tác·làm lại thao tác
- Hỗ trợ pan và zoom để xử lý các sơ đồ lớn
- Cung cấp căn chỉnh nhãn thông minh và edge offset
Xuất và tái sử dụng
- Có thể xuất sơ đồ sang LaTeX hoặc Typst
- Kết quả xuất có chứa liên kết để quay lại sơ đồ đó
- Có thể mở lại khi cần chỉnh sửa về sau
- Có thể chia sẻ với người khác
- Cũng hỗ trợ xuất sơ đồ có thể nhúng vào HTML
- Macro tùy chỉnh của người dùng có thể được dùng bằng cách dán URL của tệp chứa
\newcommand - Tích hợp với trình chỉnh sửa có thể xem trong tài liệu Editor integration và Quiver wiki
Điều kiện build và chạy
- Sau khi chạy
maketrên dòng lệnh, có thể mởsrc/index.htmltrong trình duyệt để kiểm tra kết quả build - Nếu phiên bản Make hoặc Bash không phù hợp, có thể tải thủ công bản phát hành KaTeX mới nhất và đặt dưới
src/KaTeX/ - Nếu đường dẫn KaTeX không đúng, lỗi tải KaTeX sẽ xảy ra
- Quiver phải được chạy thông qua localhost
- Nếu đã cài Python, có thể chạy
make servetrong thư mục Quiver rồi mởlocalhost:8000trong trình duyệt - Nếu gặp vấn đề khi build, có thể mở GitHub issue kèm nội dung sự cố
1 bình luận
Ý kiến trên Hacker News
Công cụ này thật sự tuyệt vời. Tôi đã tạo được khối lập phương Fourier-Poisson [0] chỉ trong khoảng 10 phút, và UI cũng rất trực quan
Việc thiết kế tập trung vào biểu đồ giao hoán thay vì canvas tự do là một lựa chọn xuất sắc, giúp công cụ gọn gàng và dễ dùng. Giá mà hồi viết luận văn tôi có công cụ này thì chắc đã tiết kiệm được rất nhiều thời gian
[0] https://q.uiver.app/#q=WzAsOCxbMCwxLCJnIFxcdGV4dHsgb24gfVxcb...
Cùng mạch này, gần đây tôi thấy trình chỉnh sửa Petri net này khá ấn tượng: https://pes.vsb.cz/petrineteditor/#/model
Petri net rất thú vị. Nếu biến máy trạng thái hữu hạn thành đa luồng thì cảm giác sẽ gần như thế này
Lần đầu tôi biết đến Petri net là khi đọc bài viết của một tổ chức tên “statebox”. Statebox quan tâm đến Petri net, biểu đồ giao hoán và nhiều khái niệm trong lý thuyết phạm trù; sau khi đọc vài bài báo, tôi bị cuốn hút đến mức từng mơ được làm việc ở đó. Tiếc là hiện trang chủ chỉ còn dòng “imagine being a category theorist” cùng emoji cười ra nước mắt, nên tôi không biết đã xảy ra chuyện gì
Vài ngày trước, tôi đã dùng công cụ này để vẽ một biểu đồ đơn giản [0] đưa vào sách của mình [1]
Đáng tiếc là vì nó chuyên cho lý thuyết phạm trù nên không hỗ trợ nhiều việc trang trí node cho đẹp, nhưng dĩ nhiên vẫn có thể xử lý bằng LaTeX
[0] https://q.uiver.app/#q=WzAsNSxbMSw2LCJcXHRleHR7TmF0dXJhbCBEZ...
[1] http://abstractionlogic.com
Tối qua tôi đang dùng https://tikzcd.yichuanshen.de/; nó giống như một phiên bản ít tính năng hơn của công cụ này. Dù vậy, để tạo biểu đồ đơn giản thì vẫn khá ổn
Bạn có thể giải thích cho một nhà phát triển phần mềm khiêm tốn và trình độ cũng không mấy cao như tôi biết biểu đồ giao hoán và biểu đồ dán là gì không?
Bài Wikipedia quá trừu tượng để hiểu ở mức cơ bản [0]
[0]: https://en.wikipedia.org/wiki/Commutative_diagram
Nếu có
ftrênA → Bthì đó biểu thị hàm f nhận đầu vào từ A và tạo đầu ra thuộc BMột sơ đồ trong đó
A → Blàf, từ đóB → Clàg, vàA → Clàhcó nghĩa làg ∘ f = h, tức là làm f rồi làm g thì giống với làm h. Vì viết kèm miền xác định và đối miền của từng hàm, nên dễ thấy các hàm có thể hợp thành hay không, tức là có qua được kiểm tra kiểu hay khôngBản thân các đường đi trong sơ đồ cũng hợp thành như hàm, nên ký pháp này khớp một cách rất tự nhiên. Ví dụ, luật kết hợp được tích hợp sẵn vào chính ký pháp, nên
A→B→C→Dlà cách biểu diễn duy nhất của việc hợp thành ba hàm, và thậm chí không thể viết ra sự khác biệt giữa(f∘g)∘hvàf∘(g∘h)Nói chung, nếu một đa đồ thị có hướng được gắn kèm mô tả về những đường đi nào trong đó tương đương hay không tương đương với nhau, và quan hệ tương đương này thỏa một vài tính chất cơ bản, thì nó được gọi là một phạm trù. Khái niệm này xuất hiện rất thường xuyên trong toán học, logic trừu tượng, v.v. Trong bối cảnh đó, biểu đồ giao hoán hữu ích để suy luận nhanh bằng trực quan về tính tương đương của các đường đi
n(g(f(a))). Đó là sơ đồ; còn nói sơ đồ giao hoán nghĩa là nếu đi theo bất kỳ hai đường nào có cùng điểm bắt đầu và điểm kết thúc thì chúng bằng nhauVì vậy
n(g(f(•))),s(r(l(•))),s(m(f(•)))đều là các đường đi từ A đến C' và cũng là các lời gọi hàm; vì đã nói sơ đồ giao hoán nên tất cả các đường đi này đều bằng nhauĐơn cấu, toàn cấu, đẳng cấu đều là những tính chất quan trọng của hàm, cho phép “khử” một hạng nào đó ở hai vế của đẳng thức. Ví dụ, nói chung từ
f(g(x))=f(h(x))không thể kết luậng(x)=h(x). Nếu có thể khử f theo cách này thì gọi là đơn cấu. Tương tự, nếu trongg(f(x))=h(f(x))có thể khử f để thu đượcg(x)=h(x)thì f là toàn cấu. Đẳng cấu thỏa cả hai. Nhờ các tính chất này, trong một số tình huống có thể “đi ngược” một phần các đường đi trong sơ đồMột dạng định lý có thể thấy trong lý thuyết phạm trù là kiểu như five lemma[0]: “hãy nhìn sơ đồ này. Nếu g là toàn cấu và h là đơn cấu thì f là đẳng cấu”. Tức là nếu biết có thể khử ở phía này và phía kia, thì ta cũng biết có thể khử ở một phía khác
[0] https://en.wikipedia.org/wiki/Five_lemma
Nếu muốn nghĩ đơn giản, có thể xem đối tượng là kiểu, và mũi tên là hàm giữa các kiểu
Bắt đầu từ góc trên bên trái, đi theo hai đường và kiểm tra kiểu. Nếu sơ đồ kiểm tra kiểu đúng thì nói là giao hoán, và hai đường đi tương đương theo một nghĩa nào đó. Ý nghĩa cụ thể phụ thuộc vào nhiều chi tiết bị lược bỏ ở đây
Một ví dụ về phạm trù là phạm trù “tập hợp và hàm”. Trong phạm trù đó, mọi tập hợp có thể nghĩ tới đều là đối tượng, tức nút, và mọi hàm có thể nghĩ tới giữa hai tập hợp bất kỳ đều là mũi tên giữa hai tập hợp đó
Vì vậy nếu lấy một mũi tên từ A đến B và một mũi tên từ B đến C rồi hợp thành chúng như hàm, ta sẽ nhận được một hàm từ A đến C
Có thể xem biểu đồ giao hoán là một tập con của toàn bộ phạm trù, và đó là trường hợp khi đi theo mọi đường được vẽ giữa hai tập hợp X và Y rồi hợp thành các mũi tên trên từng đường thì đều cho ra cùng một hàm
Tôi chưa từng đọc về phạm trù bậc cao nên không chắc về biểu đồ dán, nhưng có lẽ rất có thể đó là một sự tổng quát hóa ý tưởng này theo cách nào đó
Có thể xuất ra định dạng thân thiện với web không? Có lẽ SVG là đúng. Nếu chạy quiver trên localhost thì chia sẻ bằng liên kết không phải là một lựa chọn
Khi học môn lý thuyết phạm trù vài năm trước, Quiver thực sự là thứ không thể thiếu. UI gọn gàng, trực quan và tính năng cũng đủ dùng. So với việc vật lộn với TikZ thì không có gì phải bàn
Đây là một sản phẩm rất tốt. Trước đây tôi thường viết tay mã TikZ và cũng khá nhanh, nhưng giờ đã quên nhiều rồi nên có vẻ công cụ này sẽ rất hữu ích cho biểu đồ giao hoán
Ở đây ẩn chứa một công cụ sinh mã đáng để làm
Tôi đã dùng Quiver nhiều lần và lần nào trải nghiệm cũng tốt. Những người tạo ra nó thật tuyệt