diff --git a/babel.el b/babel.el new file mode 100644 index 0000000000000000000000000000000000000000..7bad90c76ce9aba1f9ef44c3cf96cb355ddd57c3 --- /dev/null +++ b/babel.el @@ -0,0 +1,27 @@ +(defun org-babel-execute-file (plist filename pub-dir) + ;; A custom publishing function for executing all Babel source code blocks in + ;; the Org file `filename'. Note that the function does not actually publish + ;; anything to `pub-dir'. + (progn + (find-file filename) + (org-babel-execute-buffer) + (set-buffer-modified-p nil) + (kill-buffer))) + +(defun execute-block-in-file (block file) + ;; Executes the named source code `block' in `file' without altering the + ;; latter. + (progn + (find-file file) + (org-babel-goto-named-src-block block) + (org-babel-execute-src-block) + (set-buffer-modified-p nil) + (kill-buffer))) + +(defun disable-babel (&optional project-plist) + ;; Disable Babel code evaluation. + (setq org-export-babel-evaluate nil)) + +(defun enable-babel (&optional project-plist) + ;; Enable Babel code evaluation. + (setq org-export-babel-evaluate t)) diff --git a/latex-classes.el b/latex-classes.el new file mode 100644 index 0000000000000000000000000000000000000000..c0cc5b434529ff117cd195c90963969539fb2077 --- /dev/null +++ b/latex-classes.el @@ -0,0 +1,54 @@ +(with-eval-after-load 'ox-latex + (add-to-list 'org-latex-classes + '("compas2021" + "\\documentclass{compas2021} +\\usepackage{hyperref} +[NO-DEFAULT-PACKAGES] +[EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) + +(with-eval-after-load 'ox-latex + (add-to-list 'org-latex-classes + '("IEEEtran" + "\\documentclass{IEEEtran} +\\usepackage{hyperref} +[NO-DEFAULT-PACKAGES] +[EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) + +(with-eval-after-load 'ox-latex + (add-to-list 'org-latex-classes + '("llncs" + "\\documentclass{llncs} +\\usepackage{hyperref, wrapfig} +[NO-DEFAULT-PACKAGES] +[EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) + +(with-eval-after-load 'ox-latex + (add-to-list 'org-latex-classes + '("siamart220329" + "\\documentclass{siamart220329} +\\usepackage[utf8]{inputenc} +\\usepackage[T1]{fontenc} +[NO-DEFAULT-PACKAGES] +[EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) + +(with-eval-after-load 'ox-latex + (add-to-list 'org-latex-classes + '("acmart" + "\\documentclass{acmart} +[NO-DEFAULT-PACKAGES] +[EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) diff --git a/latex-publish.el b/latex-publish.el new file mode 100644 index 0000000000000000000000000000000000000000..99da120e6eb7604d7650599d3c5b5557877220be --- /dev/null +++ b/latex-publish.el @@ -0,0 +1,47 @@ +;; Override the default LaTeX publishing command. +(setq org-latex-pdf-process + (list "latexmk --shell-escape -f -pdf -%latex -interaction=nonstopmode +-output-directory=%o %f")) + +;; Custom publishing function for LaTeX files. This is useful when we need to +;; publish a manually written LaTeX file to PDF (e. g. a poster). +(defun latex-publish-to-pdf (plist filename pub-dir) + (let + ;; Keep the initial directory. + ((cwd default-directory)) + ;; Navigate to the directory of the LaTeX file to publish. + (cd (file-name-directory filename)) + ;; Call the interal publishing function. + (org-latex-compile filename) + ;; Publish the PDF file to the destination set in the project's alist. + (org-publish-attachment + plist + (concat (file-name-sans-extension filename) ".pdf") + pub-dir) + ;; Return to the initial directory. + (cd cwd))) + +;; Verbose errors for PDF publishing through LaTeX +(defun org-latex-publish-to-pdf-verbose-on-error (plist filename pub-dir) + (condition-case err + (org-latex-publish-to-pdf + plist filename pub-dir) + ;; Handle Org errors at first. + (user-error + (message "%s" (error-message-string err))) + ;; If the Org source is fine, handle LaTeX errors. + (error + (with-current-buffer "*Org PDF LaTeX Output*" + (message (buffer-string)))))) + +(defun org-beamer-publish-to-pdf-verbose-on-error (plist filename pub-dir) + (condition-case err + (org-beamer-publish-to-pdf + plist filename pub-dir) + ;; Handle Org errors at first. + (user-error + (message "%s" (error-message-string err))) + ;; If the Org source is fine, handle LaTeX errors. + (error + (with-current-buffer "*Org PDF LaTeX Output*" + (message (buffer-string))))))