Cách sắp xếp lại thứ tự hàng loạt chương truyện (ebook) trước khi gộp file bằng Calibre
Khi tải về một bộ truyện dài với hàng trăm file epub lẻ theo từng chương, bạn sẽ hay gặp tình trạng Calibre sắp xếp sai thứ tự khi sort theo cột Title: chương 1, 10, 100, 11, 12... xen kẽ lộn xộn thay vì đúng trình tự 1, 2, 3... Nguyên nhân là Calibre mặc định sort theo kiểu so sánh chữ (text), không phải so sánh số. Bài này hướng dẫn dùng cột title_sort kết hợp regex trong Calibre để ép về đúng thứ tự số, chuẩn bị cho bước gộp file bằng plugin EpubMerge hoặc hiển thị sách sau này.
Trước khi bắt đầu: bạn cần đã cài đặt Calibre và plugin EpubMerge, đồng thời toàn bộ file chương của bộ truyện đã được import vào thư viện Calibre. Cách làm dưới đây áp dụng cho chương đánh số thuần (1 đến 9999); nếu tên chương có định dạng khác (số La Mã, số thập phân kiểu "10.5"...), xem phần Xử lý sự cố ở cuối bài.
Dùng nút Bước tiếp theo / Bước trước bên dưới để đi qua từng bước theo đúng trình tự.
Lượt 1 — Chương 1 đến 9
Thực hiện đúng 4 bước sau cho lượt này. Công thức 4 lượt sẽ lặp lại y hệt cấu trúc này, chỉ khác query lọc và giá trị thay thế.
- Dán query sau vào ô tìm kiếm (search bar) của Calibre rồi nhấn Enter:
title:"~(?<!\d)\d$" - Chọn tất cả kết quả vừa lọc được: Ctrl+A.
- Mở bulk edit: Ctrl+B › chọn tab Search and replace.
- Thiết lập đúng như sau rồi bấm OK:
- Search mode: Regular expression
- Search field: title
- Destination field: title_sort
- Mode: Replace field
- Search for:
(?<!\d)(\d)$ - Replace with:
000\1
Lượt này áp dụng cho các chương có số cuối cùng là 1 chữ số (chương 1–9).
Lượt 2 — Chương 10 đến 99
Nhớ xoá ô tìm kiếm trước! Xoá sạch query của lượt 1 rồi mới gõ query mới bên dưới — nếu để sót, phạm vi chọn ở Ctrl+A sẽ bị giới hạn nhầm theo query cũ.
- Dán query lọc mới:
title:"~(?<!\d)\d{2}$", nhấn Enter. - Ctrl+A để chọn tất cả kết quả.
- Ctrl+B › tab Search and replace.
- Thiết lập:
- Search mode: Regular expression, Search field: title, Destination field: title_sort, Mode: Replace field
- Search for:
(?<!\d)(\d{2})$ - Replace with:
00\1
Lượt này áp dụng cho chương có số cuối là 2 chữ số (chương 10–99).
Lượt 3 — Chương 100 đến 999
Vẫn nhớ xoá ô tìm kiếm! Lặp lại thao tác đúng như 2 lượt trước, chỉ đổi query và giá trị thay thế.
- Dán query lọc:
title:"~(?<!\d)\d{3}$", nhấn Enter. - Ctrl+A để chọn tất cả kết quả.
- Ctrl+B › tab Search and replace.
- Thiết lập:
- Search mode: Regular expression, Search field: title, Destination field: title_sort, Mode: Replace field
- Search for:
(?<!\d)(\d{3})$ - Replace with:
0\1
Lượt này áp dụng cho chương có số cuối là 3 chữ số (chương 100–999).
Lượt 4 — Chương 1000 đến 9999
Đây là lượt cuối cùng trong công thức 4 lượt, dùng cho các bộ truyện siêu dài (trên 999 chương).
- Dán query lọc:
title:"~(?<!\d)\d{4}$", nhấn Enter. - Ctrl+A để chọn tất cả kết quả.
- Ctrl+B › tab Search and replace.
- Thiết lập:
- Search mode: Regular expression, Search field: title, Destination field: title_sort, Mode: Replace field
- Search for:
(?<!\d)(\d{4})$ - Replace with:
\1
Lượt này áp dụng cho chương có số cuối là 4 chữ số (chương 1000–9999). Nếu bộ truyện của bạn không có chương nào vượt quá 999, có thể bỏ qua lượt này.
Hoàn tất & gộp file bằng EpubMerge
Sau khi đã chạy xong cả 4 lượt (hoặc chỉ những lượt phù hợp với số chương thực tế của bộ truyện), làm theo thứ tự sau:
- Xoá sạch ô tìm kiếm để hiển thị lại toàn bộ thư viện.
- Bấm vào header cột Title trong thư viện chính, sort theo thứ tự tăng dần.
- Chọn đúng các chương cần gộp theo đúng thứ tự đã sort.
- Mở plugin EpubMerge.
Quan trọng! Khi popup "Order EPUBs to Merge" hiện ra, tuyệt đối không bấm vào header cột "Title" trong popup này — nó sẽ sort lại theo kiểu chữ thô và làm hỏng đúng thứ tự bạn vừa sắp xếp. Chỉ cần kiểm tra danh sách rồi bấm OK luôn.
Vì sao popup EpubMerge lại sort khác với thư viện chính?
Popup "Order EPUBs to Merge" có bảng riêng và chỉ đọc tên hiển thị (Title) theo kiểu so sánh chữ thông thường, không biết đến giá trị title_sort bạn vừa chỉnh trong thư viện. Vì vậy thứ tự đúng chỉ được giữ nguyên nếu bạn không động vào header cột trong popup này — nó sẽ giữ đúng thứ tự các dòng bạn đã chọn (Ctrl+click hoặc chọn theo thứ tự sort ở thư viện chính) khi popup mở lên.
Xử lý sự cố
Thứ tự vẫn sai sau khi làm xong cả 4 lượt. Nguyên nhân phổ biến nhất là quên xoá ô tìm kiếm giữa các lượt, khiến Ctrl+A chọn nhầm phạm vi hoặc lượt sau bị lọc chồng lên kết quả của lượt trước. Kiểm tra lại giá trị cột title_sort của vài chương bất kỳ để xác nhận đã đúng độ dài số 0 đệm trước.
Vô tình bấm vào header "Title" trong popup EpubMerge và thứ tự bị đảo lộn. Đóng popup lại (không bấm OK), mở lại EpubMerge từ đầu để danh sách được nạp lại đúng theo thứ tự bạn đã chọn trong thư viện chính, sau đó không chạm vào header cột trong popup nữa.
Bộ truyện có chương dạng số La Mã, hoặc số thập phân như "Chapter 10.5". Công thức 4 lượt ở trên chỉ xử lý số nguyên thuần từ 1–9999. Với các định dạng đặc biệt này cần điều chỉnh lại regex riêng cho từng trường hợp — bạn có thể mô tả cụ thể cách đặt tên chương của bộ truyện để được hướng dẫn thêm.