122 lines
4.8 KiB
EmacsLisp
Executable File
122 lines
4.8 KiB
EmacsLisp
Executable File
;; Load org and Babel tangle explicitly
|
|
(require 'ob-tangle)
|
|
(require 'ob-org)
|
|
(org-babel-do-load-languages 'org-babel-load-languages
|
|
'((org . t))) ;; <-- enable tangling of #+BEGIN_SRC org blocks
|
|
|
|
;; Batch export & site publish
|
|
(setq org-confirm-babel-evaluate nil)
|
|
(setq org-latex-pdf-process '("latexmk -pdf -interaction=nonstopmode -shell-escape %f"))
|
|
|
|
|
|
;; --- Babel / Python setup for batch exports ---
|
|
(setq org-confirm-babel-evaluate nil)
|
|
(setq org-babel-python-command "python3")
|
|
(setenv "MPLBACKEND" "Agg") ;; headless matplotlib
|
|
|
|
;; Load languages you use in code blocks
|
|
(org-babel-do-load-languages 'org-babel-load-languages
|
|
'((python . t)))
|
|
|
|
(defun wes--inject-setupfile (venue)
|
|
"Insert a per-venue #+SETUPFILE line at the top of the current buffer."
|
|
(save-excursion
|
|
(goto-char (point-min))
|
|
;; remove any previously injected line from a prior run
|
|
(when (looking-at "^#\\+SETUPFILE: setup/venue-.*\\.org")
|
|
(delete-region (line-beginning-position) (1+ (line-end-position))))
|
|
(insert (format "#+SETUPFILE: setup/venue-%s.org\n" venue))))
|
|
|
|
|
|
(defun wes/export-pdf (&optional venue)
|
|
(let* ((v (or venue (or (getenv "VENUE") "arxiv")))
|
|
(outfile (format "paper-%s.pdf" v)))
|
|
(with-current-buffer (find-file-noselect "paper.org")
|
|
(setenv "VENUE" v)
|
|
(wes--inject-setupfile v)
|
|
(org-latex-export-to-pdf nil nil nil t)
|
|
(when (file-exists-p "paper.pdf")
|
|
(rename-file "paper.pdf" outfile t))
|
|
(message "Wrote %s" outfile))))
|
|
|
|
(defun wes/export-pdf-cli () (wes/export-pdf))
|
|
|
|
(require 'ox) (require 'ox-publish)
|
|
(defun wes/publish-site (&optional venue)
|
|
(let* ((v (or venue (or (getenv "VENUE") "arxiv"))))
|
|
(setenv "VENUE" v)
|
|
(wes--inject-setupfile v)
|
|
(setq org-publish-project-alist
|
|
`(("site-html"
|
|
:base-directory "."
|
|
:publishing-directory "public"
|
|
:publishing-function org-html-publish-to-html
|
|
:with-author t :with-toc t :section-numbers t
|
|
:html-head "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
|
|
:recursive nil
|
|
:exclude "setup/\\|code/\\|figs/\\|public/\\|data/"
|
|
:include ("paper.org")
|
|
:select-tags ("export")
|
|
:exclude-tags ,(if (member v '("ieee" "acm"))
|
|
'("noexport" "appendix" "notes")
|
|
'("noexport")))))
|
|
(org-publish "site-html" t)
|
|
(message "Published HTML site for %s" v)))
|
|
|
|
(defun wes/publish-site-cli () (wes/publish-site))
|
|
|
|
(defun wes--cam-tight-latex ()
|
|
(mapconcat #'identity
|
|
'("\\usepackage{microtype}"
|
|
"\\flushbottom"
|
|
"\\setlength{\\textfloatsep}{10pt}"
|
|
"\\setlength{\\floatsep}{8pt}"
|
|
"\\setlength{\\intextsep}{8pt}"
|
|
"\\usepackage{enumitem}"
|
|
"\\setlist{nosep}"
|
|
"\\usepackage{balance}")
|
|
"\n"))
|
|
|
|
(defun wes/export-camera-ready-pdf (&optional venue)
|
|
(let* ((v (or venue (or (getenv "VENUE") "arxiv")))
|
|
(base-setup (expand-file-name (format "setup/venue-%s.org" v)))
|
|
(tmp-name (format ".tmp-venue-%s-camera" v))
|
|
(tmp-setup (expand-file-name (format "setup/%s.org" tmp-name)))
|
|
(outfile (format "paper-camera-ready-%s.pdf" v)))
|
|
(unless (file-exists-p base-setup)
|
|
(error "Base setup file not found for venue %s" v))
|
|
(with-temp-buffer
|
|
(insert-file-contents base-setup)
|
|
(goto-char (point-max))
|
|
(insert "\n# Camera-ready overrides\n#+BIND: paper-anon nil\n")
|
|
(insert (format "#+latex_header: %s\n" (wes--cam-tight-latex)))
|
|
(write-region (point-min) (point-max) tmp-setup))
|
|
(unwind-protect
|
|
(progn
|
|
(with-current-buffer (find-file-noselect "paper.org")
|
|
(setenv "VENUE" tmp-name)
|
|
(wes--inject-setupfile v)
|
|
(org-latex-export-to-pdf nil nil nil t)
|
|
(when (file-exists-p "paper.pdf")
|
|
(rename-file "paper.pdf" outfile t))
|
|
(message "Wrote %s" outfile)))
|
|
(ignore-errors (delete-file tmp-setup)))))
|
|
|
|
(defun wes/export-camera-ready-pdf-cli () (wes/export-camera-ready-pdf))
|
|
|
|
(defun wes/export-supplement-pdf (&optional venue)
|
|
(let* ((v (or venue (or (getenv "VENUE") "arxiv")))
|
|
(outfile (format "paper-supplement-%s.pdf" v))
|
|
(paper-short nil) (paper-anon nil) (paper-limit-figs nil)
|
|
(org-export-select-tags '("export"))
|
|
(org-export-exclude-tags '("noexport")))
|
|
(with-current-buffer (find-file-noselect "paper.org")
|
|
(setenv "VENUE" v)
|
|
(wes--inject-setupfile v)
|
|
(org-latex-export-to-pdf nil nil nil t)
|
|
(when (file-exists-p "paper.pdf")
|
|
(rename-file "paper.pdf" outfile t))
|
|
(message "Wrote %s" outfile))))
|
|
|
|
(defun wes/export-supplement-pdf-cli () (wes/export-supplement-pdf))
|