PolyPaper/build.el

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))