[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] tikz for multiple targets
From: |
Rasmus |
Subject: |
Re: [O] tikz for multiple targets |
Date: |
Wed, 10 Jul 2013 11:50:14 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
Eric S Fraga <address@hidden> writes:
> Hello again,
>
> I am trying to get an example that worked with the old exporter to work
> with the new exporter. The aim is to have a tikzpicture exported to
> both LaTeX and HTML. The example is in the following message from over
> a year ago now:
>
> http://article.gmane.org/gmane.emacs.orgmode/53900
>
> This example no longer works for either LaTeX or HTML. For LaTeX, I
> would expect the actual tikz code to be inserted into the LaTeX file and
> then processed. Instead, I get the file name in a verbatim
> environment.
Tikz/pgf works for the latex exporter. Just insert it as a file link
(with extension tikz or pgf) or as latex verbatim code.
> For HTML, I would expect the image referred to from an
> <img> tag but I get a link to the test.png file instead.
It should be an svg since tikz is a lossless format IMO.
Here's a very rough and ugly function to translate tikz to svg. I
don't know if there's a more direct approach. . .
#+BEGIN_SRC emacs-lisp
(defun tikz-to-svg (file &optional headers standalone-ops)
"Convert a tikz picture to a svg picture ready for html
output.
Headers is a string like
'(pgfplots '(calc tikzlibrary) (kpfonts usepackage oldstylenums).
Do not include tikz in headers.
Set standalone-ops to t if you want to use the standalone packages conversion.
"
(let* ((name (file-name-sans-extension (file-name-nondirectory file)))
(fname (concat "/tmp/" name))
(fnamet (concat fname ".tex"))
(final (concat (file-name-directory file) name ".svg"))
)
(with-temp-file fnamet
(insert (format "\\documentclass[tikz,%s]{standalone}\n"
(if (not standalone-ops) ""
(if (eq t standalone-ops)
"convert={outfile=\jobname.svg}" standalone-ops))))
(when headers
(insert
(mapconcat (lambda (x)
(cond ((stringp x) (format "\\usepackage{%s}" x))
((and (listp x) (= 2 (length x)))
(apply 'format "\\%s{%s}" (reverse x))
)
((and (listp x) (= 3 (length x)))
(funcall 'format "\\%s[%s]{%s}"
(second x) (third x) (first x))
(t "")
))) "\n")))
(insert "\n\\begin{document}\n")
(progn (insert-file file) (goto-char (point-max)))
(insert "\n\\end{document}"))
(call-process "pdflatex" nil "*tmp*" nil "-shell-escape" "-output-directory
/tmp/" fnamet)
(call-process "pdf2svg" nil "*tmp*" nil (concat fname ".pdf") (concat fname
".svg"))
(rename-file (concat fname ".svg") final t)
(if (file-exists-p final)
(format "[[file:%s]]" final)
""
(error "conversion failed")
)))
#+END_SRC
> Is what I want possible with the new exporter? If so, I imagine the
> test for the backend must be different now. Any pointers very welcome!
It needs to be added to `org-html-inline-image-rules' and some
potential translation should be added to org-html-inline-image-p,
e.g. substitute pgf or tikz with whatever is the output format.
Perhaps the dvipng code in ox-html can utilized to obtain a png
seemingly.
–Rasmus
--
The Kids call him Billy the Saint
- [O] tikz for multiple targets, Eric S Fraga, 2013/07/09
- Re: [O] tikz for multiple targets,
Rasmus <=
- Re: [O] tikz for multiple targets, Rasmus, 2013/07/10
- Re: [O] tikz for multiple targets, Eric S Fraga, 2013/07/10
- Re: [O] tikz for multiple targets, Andreas Leha, 2013/07/11
- Re: [O] tikz for multiple targets, Eric Schulte, 2013/07/11
- Re: [O] tikz for multiple targets, Andreas Leha, 2013/07/11