lua-filters.md: use pandoc.system module in TikZ example
Showcase temporary directory handling with `with_temporary_directory` and `with_working_directory`.
This commit is contained in:
parent
2aa0832320
commit
37ef57be51
1 changed files with 48 additions and 39 deletions
|
@ -653,59 +653,68 @@ document is built. (A more sophisticated version of this might
|
|||
put these in a special cache directory.)
|
||||
|
||||
``` lua
|
||||
local system = require 'pandoc.system'
|
||||
|
||||
local tikz_doc_template = [[
|
||||
\documentclass{standalone}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{tikz}
|
||||
\begin{document}
|
||||
\nopagecolor
|
||||
%s
|
||||
\end{document}
|
||||
]]
|
||||
|
||||
local function tikz2image(src, filetype, outfile)
|
||||
local tmp = os.tmpname()
|
||||
local tmpdir = string.match(tmp, "^(.*[\\/])") or "."
|
||||
local f = io.open(tmp .. ".tex", 'w')
|
||||
f:write("\\documentclass{standalone}\n\\usepackage{xcolor}\n\\usepackage{tikz}\n\\begin{document}\n\\nopagecolor\n")
|
||||
f:write(src)
|
||||
f:write("\n\\end{document}\n")
|
||||
f:close()
|
||||
os.execute("pdflatex -output-directory " .. tmpdir .. " " .. tmp)
|
||||
if filetype == 'pdf' then
|
||||
os.rename(tmp .. ".pdf", outfile)
|
||||
else
|
||||
os.execute("pdf2svg " .. tmp .. ".pdf " .. outfile)
|
||||
end
|
||||
os.remove(tmp .. ".tex")
|
||||
os.remove(tmp .. ".pdf")
|
||||
os.remove(tmp .. ".log")
|
||||
os.remove(tmp .. ".aux")
|
||||
system.with_temporary_directory('tikz2image', function (tmpdir)
|
||||
system.with_working_directory(tmpdir, function()
|
||||
local f = io.open('tikz.tex', 'w')
|
||||
f:write(tikz_doc_template:format(src))
|
||||
f:close()
|
||||
os.execute('pdflatex tikz.tex')
|
||||
if filetype == 'pdf' then
|
||||
os.rename('tikz.pdf', outfile)
|
||||
else
|
||||
os.execute('pdf2svg tikz.pdf ' .. outfile)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
extension_for = {
|
||||
html = 'svg',
|
||||
html4 = 'svg',
|
||||
html5 = 'svg',
|
||||
latex = 'pdf',
|
||||
beamer = 'pdf' }
|
||||
html = 'svg',
|
||||
html4 = 'svg',
|
||||
html5 = 'svg',
|
||||
latex = 'pdf',
|
||||
beamer = 'pdf' }
|
||||
|
||||
local function file_exists(name)
|
||||
local f = io.open(name, 'r')
|
||||
if f ~= nil then
|
||||
io.close(f)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
local f = io.open(name, 'r')
|
||||
if f ~= nil then
|
||||
io.close(f)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function starts_with(start, str)
|
||||
return str:sub(1, #start) == start
|
||||
return str:sub(1, #start) == start
|
||||
end
|
||||
|
||||
|
||||
function RawBlock(el)
|
||||
if starts_with("\\begin{tikzpicture}", el.text) then
|
||||
local filetype = extension_for[FORMAT] or "svg"
|
||||
local fname = pandoc.sha1(el.text) .. "." .. filetype
|
||||
if not file_exists(fname) then
|
||||
tikz2image(el.text, filetype, fname)
|
||||
end
|
||||
return pandoc.Para({pandoc.Image({}, fname)})
|
||||
else
|
||||
return el
|
||||
if starts_with('\\begin{tikzpicture}', el.text) then
|
||||
local filetype = extension_for[FORMAT] or 'svg'
|
||||
local fname = system.get_working_directory() .. '/' ..
|
||||
pandoc.sha1(el.text) .. '.' .. filetype
|
||||
if not file_exists(fname) then
|
||||
tikz2image(el.text, filetype, fname)
|
||||
end
|
||||
return pandoc.Para({pandoc.Image({}, fname)})
|
||||
else
|
||||
return el
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue