fix emacs org babel latex to svg
This commit is contained in:
@@ -734,7 +734,147 @@ usage: #+HEADER: :results (tpl-results)
|
||||
"
|
||||
(by-backend (latex "raw")
|
||||
(article-latex "raw")
|
||||
(t "raw file"))))
|
||||
(t "raw file")))
|
||||
|
||||
;; overwrite so svg is not combiled by `org-babel-latex-tex-to-pdf'
|
||||
;; but like html with `org-babel-latex-htlatex' and
|
||||
;; `org-babel-latex-htlatex-packages'. htlatex uses pdflatex
|
||||
(defun org-babel-execute:latex (body params)
|
||||
"Execute a block of Latex code with Babel.
|
||||
This function is called by `org-babel-execute-src-block'."
|
||||
(setq body (org-babel-expand-body:latex body params))
|
||||
(if (cdr (assq :file params))
|
||||
(let* ((out-file (cdr (assq :file params)))
|
||||
(extension (file-name-extension out-file))
|
||||
(tex-file (org-babel-temp-file "latex-" ".tex"))
|
||||
(border (cdr (assq :border params)))
|
||||
(imagemagick (cdr (assq :imagemagick params)))
|
||||
(im-in-options (cdr (assq :iminoptions params)))
|
||||
(im-out-options (cdr (assq :imoutoptions params)))
|
||||
(fit (or (cdr (assq :fit params)) border))
|
||||
(height (and fit (cdr (assq :pdfheight params))))
|
||||
(width (and fit (cdr (assq :pdfwidth params))))
|
||||
(headers (cdr (assq :headers params)))
|
||||
(in-buffer (not (string= "no" (cdr (assq :buffer params)))))
|
||||
(org-latex-packages-alist
|
||||
(append (cdr (assq :packages params)) org-latex-packages-alist)))
|
||||
(cond
|
||||
((and (string-suffix-p ".png" out-file) (not imagemagick))
|
||||
(let ((org-format-latex-header
|
||||
(concat org-format-latex-header "\n"
|
||||
(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= "html" extension) (string= "svg" extension)) ;; CHANGED from only html to html and svg
|
||||
(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
|
||||
;; would be unified. This would prevent bugs creeping in
|
||||
;; such as the one fixed on Aug 16 2014 whereby :headers was
|
||||
;; not included in the SVG/HTML case.
|
||||
(with-temp-file tex-file
|
||||
(insert (concat
|
||||
"\\documentclass[preview]{standalone}
|
||||
\\def\\pgfsysdriver{pgfsys-tex4ht.def}
|
||||
"
|
||||
(mapconcat (lambda (pkg)
|
||||
(concat "\\usepackage" pkg))
|
||||
org-babel-latex-htlatex-packages
|
||||
"\n")
|
||||
(if headers
|
||||
(concat "\n"
|
||||
(if (listp headers)
|
||||
(mapconcat #'identity headers "\n")
|
||||
headers) "\n")
|
||||
"")
|
||||
"\\begin{document}"
|
||||
body
|
||||
"\\end{document}")))
|
||||
(when (file-exists-p out-file) (delete-file out-file))
|
||||
(let ((default-directory (file-name-directory tex-file)))
|
||||
(shell-command (format "%s %s" org-babel-latex-htlatex tex-file)))
|
||||
(cond
|
||||
((file-exists-p (concat (file-name-sans-extension tex-file) "-1.svg"))
|
||||
(if (string-suffix-p ".svg" out-file)
|
||||
(progn
|
||||
(shell-command "pwd")
|
||||
(shell-command (format "mv %s %s"
|
||||
(concat (file-name-sans-extension tex-file) "-1.svg")
|
||||
out-file)))
|
||||
(error "SVG file produced but HTML file requested")))
|
||||
((file-exists-p (concat (file-name-sans-extension tex-file) ".html"))
|
||||
(if (string-suffix-p ".html" out-file)
|
||||
(shell-command "mv %s %s"
|
||||
(concat (file-name-sans-extension tex-file)
|
||||
".html")
|
||||
out-file)
|
||||
(error "HTML file produced but SVG file requested")))))
|
||||
((or (string= "pdf" extension) imagemagick)
|
||||
(with-temp-file tex-file
|
||||
(require 'ox-latex)
|
||||
(insert
|
||||
(org-latex-guess-inputenc
|
||||
(org-splice-latex-header
|
||||
org-format-latex-header
|
||||
(delq
|
||||
nil
|
||||
(mapcar
|
||||
(lambda (el)
|
||||
(unless (and (listp el) (string= "hyperref" (cadr el)))
|
||||
el))
|
||||
org-latex-default-packages-alist))
|
||||
org-latex-packages-alist
|
||||
nil))
|
||||
(if fit "\n\\usepackage[active, tightpage]{preview}\n" "")
|
||||
(if border (format "\\setlength{\\PreviewBorder}{%s}" border) "")
|
||||
(if height (concat "\n" (format "\\pdfpageheight %s" height)) "")
|
||||
(if width (concat "\n" (format "\\pdfpagewidth %s" width)) "")
|
||||
(if headers
|
||||
(concat "\n"
|
||||
(if (listp headers)
|
||||
(mapconcat #'identity headers "\n")
|
||||
headers) "\n")
|
||||
"")
|
||||
(if fit
|
||||
(concat "\n\\begin{document}\n\\begin{preview}\n" body
|
||||
"\n\\end{preview}\n\\end{document}\n")
|
||||
(concat "\n\\begin{document}\n" body "\n\\end{document}\n"))))
|
||||
(when (file-exists-p out-file) (delete-file out-file))
|
||||
(let ((transient-pdf-file (org-babel-latex-tex-to-pdf tex-file)))
|
||||
(cond
|
||||
((string= "pdf" extension)
|
||||
(rename-file transient-pdf-file out-file))
|
||||
(imagemagick
|
||||
(org-babel-latex-convert-pdf
|
||||
transient-pdf-file out-file im-in-options im-out-options)
|
||||
(when (file-exists-p transient-pdf-file)
|
||||
(delete-file transient-pdf-file)))
|
||||
(t
|
||||
(error "Can not create %s files, please specify a .png or .pdf file or try the :imagemagick header argument"
|
||||
extension))))))
|
||||
nil) ;; signal that output has already been written to file
|
||||
body))
|
||||
;; end of ob-latex
|
||||
)
|
||||
|
||||
(use-package ob-python
|
||||
:defer t
|
||||
|
||||
Reference in New Issue
Block a user