fix emacs org babel latex to svg
This commit is contained in:
@@ -34,7 +34,10 @@
|
|||||||
(require 'ox-latex)
|
(require 'ox-latex)
|
||||||
(require 'ox-tufte)
|
(require 'ox-tufte)
|
||||||
|
|
||||||
;; add to general org variables, so that is works also to latex snippets, preview
|
;; add to generel org variabels, so that it works also for babel latex src blocks
|
||||||
|
(add-to-list 'org-babel-latex-htlatex-packages "{pgfplots}")
|
||||||
|
|
||||||
|
;; add to general org variables, so that it works also for latex snippets, preview
|
||||||
(add-to-list 'org-latex-default-packages-alist "\\newcommand{\\ti}[1]{_\\mathrm{#1}}" t) ;; tiefstellen, Index
|
(add-to-list 'org-latex-default-packages-alist "\\newcommand{\\ti}[1]{_\\mathrm{#1}}" t) ;; tiefstellen, Index
|
||||||
(add-to-list 'org-latex-default-packages-alist "\\newcommand{\\ho}[1]{^\\mathrm{#1}}" t) ;; hochstellen
|
(add-to-list 'org-latex-default-packages-alist "\\newcommand{\\ho}[1]{^\\mathrm{#1}}" t) ;; hochstellen
|
||||||
(add-to-list 'org-latex-default-packages-alist "\\newcommand*{\\rom}[1]{\\mathrm{\\romannumeral #1}}" t) ;; \rom{2} -> ii
|
(add-to-list 'org-latex-default-packages-alist "\\newcommand*{\\rom}[1]{\\mathrm{\\romannumeral #1}}" t) ;; \rom{2} -> ii
|
||||||
|
|||||||
@@ -734,7 +734,147 @@ usage: #+HEADER: :results (tpl-results)
|
|||||||
"
|
"
|
||||||
(by-backend (latex "raw")
|
(by-backend (latex "raw")
|
||||||
(article-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
|
(use-package ob-python
|
||||||
:defer t
|
:defer t
|
||||||
|
|||||||
Reference in New Issue
Block a user