0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-29 22:47:56 +00:00

ob-latex.el: Make latex to svg compilation very customizable

* lisp/ob-latex.el (org-babel-latex-preamble): New option for LaTeX
preamble customization.
(org-babel-latex-begin-env): New option for LaTeX document environment
begin customization.
(org-babel-latex-end-env): New option for LaTeX document environment
end customization.
(org-babel-latex-pdf-svg-process): New option for converting a pdf to
svg.
(org-babel-execute:latex): Add specific case for svg generation from
LaTeX block.
This commit is contained in:
Matt Huszagh 2020-08-28 22:26:05 -07:00 committed by Bastien
parent 95ed6badc0
commit ae35a34590

View file

@ -66,7 +66,46 @@
"LaTeX-specific header arguments.")
(defcustom org-babel-latex-htlatex "htlatex"
"The htlatex command to enable conversion of latex to SVG or HTML."
"The htlatex command to enable conversion of LaTeX to SVG or HTML."
:group 'org-babel
:type 'string)
(defcustom org-babel-latex-preamble
(lambda (_)
"\\documentclass[preview]{standalone}
\\def\\pgfsysdriver{pgfsys-tex4ht.def}
")
"Closure which evaluates at runtime to the LaTeX preamble.
It takes 1 argument which is the parameters of the source block."
:group 'org-babel
:type 'function)
(defcustom org-babel-latex-begin-env
(lambda (_)
"\\begin{document}")
"Closure which evaluates at runtime to the begin part of the document environment.
It takes 1 argument which is the parameters of the source block.
This allows adding additional code that will be ignored when
exporting the literal LaTeX source."
:group 'org-babel
:type 'function)
(defcustom org-babel-latex-end-env
(lambda (_)
"\\end{document}")
"Closure which evaluates at runtime to the end part of the document environment.
It takes 1 argument which is the parameters of the source block.
This allows adding additional code that will be ignored when
exporting the literal LaTeX source."
:group 'org-babel
:type 'function)
(defcustom org-babel-latex-pdf-svg-process
"inkscape --pdf-poppler %f -T -l -o %O"
"Command used to convert a PDF file to an SVG file when executing a latex source block."
:group 'org-babel
:type 'string)
@ -114,12 +153,26 @@ This function is called by `org-babel-execute-src-block'."
(mapconcat #'identity headers "\n"))))
(org-create-formula-image
body out-file org-format-latex-options in-buffer)))
((string= "svg" extension)
(with-temp-file tex-file
(insert (concat (funcall org-babel-latex-preamble params)
(mapconcat #'identity headers "\n")
(funcall org-babel-latex-begin-env params)
body
(funcall org-babel-latex-end-env params))))
(let ((tmp-pdf (org-babel-latex-tex-to-pdf tex-file)))
(let* ((log-buf (get-buffer-create "*Org Babel LaTeX Output*"))
(err-msg "org babel latex failed")
(img-out (org-compile-file
tmp-pdf
(list org-babel-latex-pdf-svg-process)
extension err-msg log-buf)))
(shell-command (format "mv %s %s" img-out out-file)))))
((string-suffix-p ".tikz" out-file)
(when (file-exists-p out-file) (delete-file out-file))
(with-temp-file out-file
(insert body)))
((and (or (string= "svg" extension)
(string= "html" extension))
((and (string= "html" extension)
(executable-find org-babel-latex-htlatex))
;; TODO: this is a very different way of generating the
;; frame latex document than in the pdf case. Ideally, both