Giữ nguyên cách gõ.
Thêm QR và phiếu tô.
Đề vẫn viết bằng #tn, #ds, #tln, #tl. Bản 1.1 tập trung tạo QR đáp án và tám phiếu OMR có thể in/tô sẵn số báo danh, mã đề. Không cần học cú pháp ngân hàng hay trộn đề.
Trạng thái: mã nguồn ở PR #3; bản gửi Typst Universe ở PR #5987. Khi PR phát hành chưa được hợp nhất, dùng @local/sang-math:1.1.0 trong ZIP; bản công khai vẫn là @preview/sang-math:1.0.6.
QR đáp án từ câu đã viết
#sang-omr-qr đọc đáp án của đề gõ bằng bốn lệnh cũ. Đặt QR ở trang dành cho giáo viên.
#import "@local/sang-math:1.1.0": *
#show: sang-setup
#tn([Tính $2+3$.], ([$4$], True([$5$]), [$6$], [$7$]))
#pagebreak()
= QR đáp án giáo viên
#sang-omr-qr(ma-de: "0101")
Khi dùng phiếu cụ thể
Với đề đủ 12 TN, 4 Đ/S, 6 TLN, gọi #sang-omr-qr(ma-de: "0101", profile: "12-4-6ngang"). Tùy chọn profile kiểm số câu có khớp phiếu và tự chọn khổ giấy. Bỏ tùy chọn này thì QR giữ hành vi 1.0.6.
Hai QR có nhiệm vụ khác nhau
SMKEY được tạo từ đáp án của đề để giáo viên nạp key. SMOMR trên phiếu nhận dạng bố cục ô tô; nó không chứa đáp án. Giữ QR đáp án riêng khỏi bản phát học sinh.
QR mã hóa đúng dấu nháy, gạch chéo và xuống dòng trong đáp án ngắn. Gói không tự giải toán hoặc tự kiểm đáp án đúng; giáo viên cần rà soát nội dung đề.
Đặt SBD và mã đề trước khi include
Nếu không gọi state, các ô để trống cho học sinh tự tô. Mã ngắn được đệm số 0 ở đầu.
#let ma-de = "0101"
#state("sbd").update("1001")
#state("made").update(ma-de)
#include "12-4-6ngang.typ"
Đặt file 12-4-6ngang.typ cạnh file đang biên dịch. SBD tối đa sáu chữ số; mã đề tối đa bốn chữ số, chỉ dùng chữ số. Xem file 02 để có đề, QR và phiếu trong một tài liệu hoàn chỉnh.
| File phiếu | TN | Đ/S | TLN | Khổ |
|---|---|---|---|---|
12-4-6ngang.typ | 12 | 4 | 6 | A5 ngang |
thptqg-toan-2025.typ | 12 | 4 | 6 | A4 |
ds-12.typ | 0 | 12 | 0 | A4 |
hybrid-28tn-12ds.typ | 28 | 12 | 0 | A4 |
tln-10.typ | 0 | 0 | 10 | A4 |
tn-40.typ | 40 | 0 | 0 | A4 |
tn-50.typ | 50 | 0 | 0 | A4 |
tn-60.typ | 60 | 0 | 0 | A4 |
10 tình huống, 10 file Typst đầy đủ
Chọn mẫu, bấm Copy code hoặc tải file. File có #include cần tải phiếu đi kèm hoặc dùng ZIP trọn bộ.
Chạy từ ZIP
typst --version typst compile --root . --package-path ./typst-packages examples/sang-math-1-1/01-legacy-bon-dang.typ 01.pdf typst compile --root . --package-path ./typst-packages examples/sang-math-1-1/02-qr-va-phieu-12-4-6.typ 02.pdf
Có gì trong ZIP?
Package local 1.1.0, hai ví dụ đề bằng cú pháp 1.0.6, tám tình huống phiếu tô, tám preset OMR và README chạy nhanh. Typst 0.15.0 hoặc mới hơn (đã thử trên 0.15.1); lần đầu có thể tải phụ thuộc CeTZ, Cades và Touying.
Đang tải mẫu…
Từ file Typst đến hai bản in
File 02 cho toàn bộ quy trình. Chỉ cần thay nội dung câu hỏi và đáp án, giữ nguyên bốn lệnh soạn đề.
1. Soạn và kiểm đáp án
Viết đủ số câu bằng #tn/#ds/#tln. True(...) đánh dấu phương án hoặc mệnh đề đúng; đối số đáp án của #tln đi vào QR. Giáo viên tự kiểm lại toán học và cách chấp nhận đáp án ngắn.
2. Chọn đúng profile
Gọi #sang-omr-qr(ma-de: ma-de, profile: "12-4-6ngang") cho phiếu ngang. Nếu số TN, Đ/S hoặc TLN lệch phiếu, Typst dừng với lỗi answer counts do not match profile. Với đề khác tám preset, bỏ profile: để dùng QR như 1.0.6.
3. Tạo phiếu tô
Đặt state("sbd") và state("made") ngay trước #include. Phiếu sẽ in số và tô các cột tương ứng; bỏ state thì để ô trống. Mã đề trong QR đáp án và trên phiếu phải là cùng một mã.
4. Tách bản phát
Phát đề và phiếu OMR cho học sinh. Giữ trang SMKEY cho giáo viên để nạp đáp án; phiếu học sinh chỉ mang SMOMR nhận dạng loại phiếu. Trước khi in hàng loạt, in thử một tờ và kiểm tra QR, bốn góc định vị cùng cột SBD/mã đề.
Khi file chưa ra đúng phiếu
Những trường hợp dưới đây xuất hiện nhiều nhất khi copy code.
Không tìm thấy file phiếu
Tải file 12-4-6ngang.typ ở thẻ mẫu hoặc dùng ZIP. Đặt file đúng cạnh file có #include "12-4-6ngang.typ". Trong ví dụ package dùng đường dẫn omr/12-4-6ngang.typ vì file nằm trong thư mục omr.
QR báo sai số câu
Đếm lại từng lệnh #tn, #ds, #tln; #tl không có ô tô trong tám profile. Chọn profile đúng bảng ở trên. Không chỉnh số câu trên phiếu để che lỗi của đề.
SBD hoặc mã đề không tô
Đặt state trước #include và truyền chữ số trong chuỗi, ví dụ "1001". SBD nhận tối đa sáu chữ số, mã đề tối đa bốn; chữ cái, dấu cách và chuỗi quá dài sẽ làm Typst báo lỗi. SBD ngắn tự thêm số 0 ở đầu.
Import chưa có bản 1.1
Trong khi PR Typst Universe đang xét duyệt, giải nén ZIP và dùng @local/sang-math:1.1.0 cùng --package-path ./typst-packages. @preview/sang-math:1.1.0 chỉ dùng sau khi bản phát hành thực sự xuất hiện.