# File lib/webby/helpers/tex_img_helper.rb, line 59
  def tex2img( *args, &block )
    opts = args.last.instance_of?(Hash) ? args.pop : {}
    name = args.first
    raise 'TeX graphics must have a name' if name.nil?

    text = capture_erb(&block)
    return if text.empty?

    defaults = ::Webby.site.tex2img
    path = opts.getopt(:path, defaults.path)
    type = opts.getopt(:type, defaults.type)
    bg   = opts.getopt(:bg, defaults.bg)
    fg   = opts.getopt(:fg, defaults.fg)
    res  = opts.getopt(:resolution, defaults.resolution)

    # fix color escaping
    fg = fg =~ %r/^[a-zA-Z]+$/ ? fg : "\"#{fg}\""
    bg = bg =~ %r/^[a-zA-Z]+$/ ? bg : "\"#{bg}\""

    # generate the image filename based on the path, graph name, and type
    # of image to generate
    image_fn = path.nil? ? name.dup : ::File.join(path, name)
    image_fn = ::File.join('', image_fn) << '.' << type

    # generate the image using convert -- but first ensure that the
    # path exists
    out_dir = ::Webby.site.output_dir
    out_file = ::File.join('..', out_dir, image_fn)
    FileUtils.mkpath(::File.join(out_dir, path)) unless path.nil?

    tex = "\\\\nonstopmode\n\\\\documentclass{article}\n\\\\usepackage[T1]{fontenc}\n\\\\usepackage{amsmath,amsfonts,amssymb,wasysym,latexsym,marvosym,txfonts}\n\\\\usepackage[pdftex]{color}\n\\\\pagestyle{empty}\n\\\\begin{document}\n\\\\fontsize{12}{24}\n\\\\selectfont\n\\\\color{white}\n\\\\pagecolor{black}\n\\\\[\n\#{text}\n\\\\]\n\\\\end{document}\n"
    tex.gsub!(%r/\n\s+/, "\n").strip!

    # make a temporarty directory to store all the TeX files
    pwd = Dir.pwd
    tmpdir = ::Webby::MkTemp.mktempdir('tex2img_XXXXXX')

    begin
      Dir.chdir(tmpdir)
      File.open('out.tex', 'w') {|fd| fd.puts tex}
      dev_null = test(?e, "/dev/null") ? "/dev/null" : "NUL:"

      %x[pdflatex -interaction=batchmode out.tex &> #{dev_null}]

      convert =  "\\( -density #{res} out.pdf -trim +repage \\) "
      convert << "\\( -clone 0 -negate -background #{fg} -channel A -combine \\) "
      convert << "\\( -clone 0 -background #{bg} -channel A -combine \\) "
      convert << "-delete 0 -compose dst-over -composite #{out_file}"
      %x[convert #{convert} &> #{dev_null}]
    ensure
      Dir.chdir(pwd)
      FileUtils.rm_rf(tmpdir) if test(?e, tmpdir)
    end

    # generate the HTML img tag to insert back into the document
    out = "<img src=\"#{image_fn}\""
    %w[class style id alt].each do |atr|
      val = opts.getopt(atr)
      next if val.nil?
      out << " %s=\"%s\"" % [atr, val]
    end
    out << " />\n"

    # put some guards around the output (specifically for textile)
    out = _guard(out)

    concat_erb(out, block.binding)
    return
  end