@@ -653,59 +653,68 @@ document is built. (A more sophisticated version of this might
653653put these in a special cache directory.)
654654
655655``` lua
656+local system = require 'pandoc.system'
657+
658+local tikz_doc_template = [[
659+\documentclass{standalone}
660+\usepackage{xcolor}
661+\usepackage{tikz}
662+\begin{document}
663+\nopagecolor
664+%s
665+\end{document}
666+]]
667+
656668local function tikz2image(src, filetype, outfile)
657− local tmp = os.tmpname()
658− local tmpdir = string.match(tmp, "^(.*[\\/])") or "."
659− local f = io.open(tmp .. ".tex", 'w')
660− f:write("\\documentclass{standalone}\n\\usepackage{xcolor}\n\\usepackage{tikz}\n\\begin{document}\n\\nopagecolor\n")
661− f:write(src)
662− f:write("\n\\end{document}\n")
663− f:close()
664− os.execute("pdflatex -output-directory " .. tmpdir .. " " .. tmp)
665− if filetype == 'pdf' then
666− os.rename(tmp .. ".pdf", outfile)
667− else
668− os.execute("pdf2svg " .. tmp .. ".pdf " .. outfile)
669− end
670− os.remove(tmp .. ".tex")
671− os.remove(tmp .. ".pdf")
672− os.remove(tmp .. ".log")
673− os.remove(tmp .. ".aux")
669+ system.with_temporary_directory('tikz2image', function (tmpdir)
670+ system.with_working_directory(tmpdir, function()
671+ local f = io.open('tikz.tex', 'w')
672+ f:write(tikz_doc_template:format(src))
673+ f:close()
674+ os.execute('pdflatex tikz.tex')
675+ if filetype == 'pdf' then
676+ os.rename('tikz.pdf', outfile)
677+ else
678+ os.execute('pdf2svg tikz.pdf ' .. outfile)
679+ end
680+ end)
681+ end)
674682end
675683
676684extension_for = {
677− html = 'svg',
678− html4 = 'svg',
679− html5 = 'svg',
680− latex = 'pdf',
681− beamer = 'pdf' }
685+ html = 'svg',
686+ html4 = 'svg',
687+ html5 = 'svg',
688+ latex = 'pdf',
689+ beamer = 'pdf' }
682690
683691local function file_exists(name)
684− local f = io.open(name, 'r')
685− if f ~= nil then
686− io.close(f)
687− return true
688− else
689− return false
690− end
692+ local f = io.open(name, 'r')
693+ if f ~= nil then
694+ io.close(f)
695+ return true
696+ else
697+ return false
698+ end
691699end
692700
693701local function starts_with(start, str)
694− return str:sub(1, #start) == start
702+ return str:sub(1, #start) == start
695703end
696704
697705
698706function RawBlock(el)
699− if starts_with("\\begin{tikzpicture}", el.text) then
700− local filetype = extension_for[FORMAT] or "svg"
701− local fname = pandoc.sha1(el.text) .. "." .. filetype
702− if not file_exists(fname) then
703− tikz2image(el.text, filetype, fname)
704− end
705− return pandoc.Para({pandoc.Image({}, fname)})
706− else
707− return el
707+ if starts_with('\\begin{tikzpicture}', el.text) then
708+ local filetype = extension_for[FORMAT] or 'svg'
709+ local fname = system.get_working_directory() .. '/' ..
710+ pandoc.sha1(el.text) .. '.' .. filetype
711+ if not file_exists(fname) then
712+ tikz2image(el.text, filetype, fname)
708713 end
714+ return pandoc.Para({pandoc.Image({}, fname)})
715+ else
716+ return el
717+ end
709718end
710719```
711720