Lệnh sau cho phép bạn chọn back-end và sau đó xuất từng cây con cấp cao nhất sang một tệp riêng:
(defun org-export-all (backend)
"Export all subtrees that are *not* tagged with :noexport: to
separate files.
Note that subtrees must have the :EXPORT_FILE_NAME: property set
to a unique value for this to work properly."
(interactive "sEnter backend: ")
(let ((fn (cond ((equal backend "html") 'org-html-export-to-html)
((equal backend "latex") 'org-latex-export-to-latex)
((equal backend "pdf") 'org-latex-export-to-pdf))))
(save-excursion
(set-mark (point-min))
(goto-char (point-max))
(org-map-entries (lambda () (funcall fn nil t)) "-noexport" 'region-start-level))))
Điều này hiện hỗ trợ xuất HTML ( html
), LaTeX ( latex
) và PDF ( pdf
). Bạn có thể thêm hỗ trợ cho nhiều back-end bằng cách thêm nhiều mệnh đề vào cond
.
Như docopes nói, đối với mỗi cây con, bạn cần đặt thuộc :EXPORT_FILE_NAME:
tính thành tên tệp mà bạn muốn nó được xuất sang. (Xem bên dưới để biết các lựa chọn khác.)
Tự động tạo tên tệp xuất từ văn bản tiêu đề
Nếu bạn không muốn thêm :EXPORT_FILE_NAME:
thuộc tính vào mọi tiêu đề cấp cao nhất, bạn có thể sửa đổi org-export-all
để tự động tạo tên tệp từ ví dụ văn bản tiêu đề, tạm thời cài đặt :EXPORT_FILE_NAME:
trong khi xuất:
(defun org-export-all (backend)
"Export all subtrees that are *not* tagged with :noexport: to
separate files.
Subtrees that do not have the :EXPORT_FILE_NAME: property set
are exported to a filename derived from the headline text."
(interactive "sEnter backend: ")
(let ((fn (cond ((equal backend "html") 'org-html-export-to-html)
((equal backend "latex") 'org-latex-export-to-latex)
((equal backend "pdf") 'org-latex-export-to-pdf)))
(modifiedp (buffer-modified-p)))
(save-excursion
(set-mark (point-min))
(goto-char (point-max))
(org-map-entries
(lambda ()
(let ((export-file (org-entry-get (point) "EXPORT_FILE_NAME")))
(unless export-file
(org-set-property
"EXPORT_FILE_NAME"
(replace-regexp-in-string " " "_" (nth 4 (org-heading-components)))))
(funcall fn nil t)
(unless export-file (org-delete-property "EXPORT_FILE_NAME"))
(set-buffer-modified-p modifiedp)))
"-noexport" 'region-start-level))))
Hàm này tạo tên tệp xuất bằng cách thay thế khoảng trắng bằng "_" trong văn bản tiêu đề. Nếu bạn muốn tạo tên tệp theo một cách khác, hãy thay đổi replace-regexp-in-string
sexp thành bất cứ thứ gì bạn thích.
Tạo :EXPORT_FILE_NAME:
khi cài đặt:CUSTOM_ID:
Với lời khuyên sau, org-set-property
sẽ tự động đặt giá trị phù hợp :EXPORT_FILE_NAME:
khi bạn đặt :CUSTOM_ID:
:
(defadvice org-set-property (after set-export-file-name
(property value) activate compile)
(when (equal org-last-set-property "CUSTOM_ID")
(let ((export-file-name
(concat (org-entry-get nil "CUSTOM_ID")
"-"
(replace-regexp-in-string " " "-" (downcase (org-get-heading t t))))))
(org-entry-put nil "EXPORT_FILE_NAME" export-file-name))))
Lưu ý rằng điều này sẽ không thêm phần mở rộng tệp vào giá trị của :EXPORT_FILE_NAME:
nhưng điều đó không quan trọng bởi vì khi xuất sang một back-end cụ thể, org-mode
sẽ tự động chọn phần mở rộng chính xác cho các tệp kết quả .
Thông tin thêm
Cập nhật số lượng lớn cây con hiện có
Nếu bạn có một số lượng lớn các cây con hiện có mà bạn cần đặt thuộc :EXPORT_FILE_NAME:
tính, bạn có thể sử dụng macro bàn phím . Vị trí điểm trên cây con đầu tiên, sau đó làm như sau:
F3
... để bắt đầu ghi âm.
C-c C-x p CUSTOM_ID
RET RET
... Để đặt Emacs :EXPORT_FILE_NAME:
dựa trên :CUSTOM_ID:
.
C-c C-f
... Để chuyển đến tiêu đề cấp cao nhất tiếp theo.
F4
... Dừng ghi âm.
Để lặp lại macro cho cây con tiếp theo, nhấn F4. Để lặp lại macro cho tất cả các cây con còn lại, nhấn M-0 F4(đó là số không).
Lưu macro cho các phiên trong tương lai
Theo mặc định, macro bàn phím không được lưu trong các phiên. Để lưu trữ macro trong tệp init của bạn để sử dụng sau, hãy làm điều này:
Đặt tên cho macro:
M-x name-last-kbd-macro
RET org-set-export-file-name
RET
Tìm tập tin init của bạn và di chuyển đến một vị trí mà bạn muốn chèn macro.
Chèn macro:
M-x insert-kbd-macro
RET org-set-export-file-name
RET
Emacs sẽ chèn đoạn mã sau vào điểm:
(fset 'org-set-export-file-name
"\C-c\C-xpCUSTOM_ID\C-m\C-m\C-c\C-f")
Nếu bạn nheo mắt đủ mạnh, bạn có thể thấy rằng đối số thứ hai fset
chứa chuỗi các phím mà bạn đã nhấn khi bạn ghi macro :)
(Tùy chọn) Để có kết quả tốt nhất, bạn có thể muốn liên kết org-set-export-file-name
với khóa:
(define-key org-mode-map (kbd "<f6>") 'org-set-export-file-name)
Tiết kiệm.
:EXPORT_FILE_NAME:
tính lập trình:CUSTOM_ID:+heading-title-lowercased
cho mỗi tiêu đề không?