git.iko.soy/typeable/pandoc
on master help sign in
lua-filters.md: use pandoc.system module in TikZ example
37ef57bAlbert Krewinkel
doc/lua-filters.md+48−39
@@ -653,59 +653,68 @@ document is built. (A more sophisticated version of this might
653put these in a special cache directory.)
653put these in a special cache directory.)
654
654
655``` lua
655``` 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+
656local function tikz2image(src, filetype, outfile)
668local function tikz2image(src, filetype, outfile)
657− local tmp = os.tmpname()
669+ system.with_temporary_directory('tikz2image', function (tmpdir)
658− local tmpdir = string.match(tmp, "^(.*[\\/])") or "."
670+ system.with_working_directory(tmpdir, function()
659− local f = io.open(tmp .. ".tex", 'w')
671+ local f = io.open('tikz.tex', 'w')
660− f:write("\\documentclass{standalone}\n\\usepackage{xcolor}\n\\usepackage{tikz}\n\\begin{document}\n\\nopagecolor\n")
672+ f:write(tikz_doc_template:format(src))
661− f:write(src)
662− f:write("\n\\end{document}\n")
663− f:close()
673+ f:close()
664− os.execute("pdflatex -output-directory " .. tmpdir .. " " .. tmp)
674+ os.execute('pdflatex tikz.tex')
665− if filetype == 'pdf' then
675+ if filetype == 'pdf' then
666− os.rename(tmp .. ".pdf", outfile)
676+ os.rename('tikz.pdf', outfile)
667− else
677+ else
668− os.execute("pdf2svg " .. tmp .. ".pdf " .. outfile)
678+ os.execute('pdf2svg tikz.pdf ' .. outfile)
669− end
679+ end
670− os.remove(tmp .. ".tex")
680+ end)
671− os.remove(tmp .. ".pdf")
681+ end)
672− os.remove(tmp .. ".log")
673− os.remove(tmp .. ".aux")
674end
682end
675
683
676extension_for = {
684extension_for = {
677− html = 'svg',
685+ html = 'svg',
678− html4 = 'svg',
686+ html4 = 'svg',
679− html5 = 'svg',
687+ html5 = 'svg',
680− latex = 'pdf',
688+ latex = 'pdf',
681− beamer = 'pdf' }
689+ beamer = 'pdf' }
682
690
683local function file_exists(name)
691local function file_exists(name)
684− local f = io.open(name, 'r')
692+ local f = io.open(name, 'r')
685− if f ~= nil then
693+ if f ~= nil then
686− io.close(f)
694+ io.close(f)
687− return true
695+ return true
688− else
696+ else
689− return false
697+ return false
690− end
698+ end
691end
699end
692
700
693local function starts_with(start, str)
701local function starts_with(start, str)
694− return str:sub(1, #start) == start
702+ return str:sub(1, #start) == start
695end
703end
696
704
697
705
698function RawBlock(el)
706function RawBlock(el)
699− if starts_with("\\begin{tikzpicture}", el.text) then
707+ if starts_with('\\begin{tikzpicture}', el.text) then
700− local filetype = extension_for[FORMAT] or "svg"
708+ local filetype = extension_for[FORMAT] or 'svg'
709+ local fname = system.get_working_directory() .. '/' ..
701− local fname = pandoc.sha1(el.text) .. "." .. filetype
710+ pandoc.sha1(el.text) .. '.' .. filetype
702− if not file_exists(fname) then
711+ if not file_exists(fname) then
703− tikz2image(el.text, filetype, fname)
712+ tikz2image(el.text, filetype, fname)
704− end
705− return pandoc.Para({pandoc.Image({}, fname)})
706− else
707− return el
708 end
713 end
714+ return pandoc.Para({pandoc.Image({}, fname)})
715+ else
716+ return el
717+ end
709end
718end
710```
719```
711
720