* A function `simpleTeXToPNG' that typesets a piece of LaTeX code

(e.g., a file containing something like `$x^2 + y^2 = z^2$') and
  converts it to a PNG image with no unnecessary surrounding
  whitespace.  Useful when you want to include TeX stuff in webpages /
  other documents.

  This currently calls /usr/bin/convert, so we should add ImageMagick.

svn path=/nixpkgs/trunk/; revision=8269
This commit is contained in:
Eelco Dolstra 2007-03-12 18:06:31 +00:00
parent ead48be229
commit 1c65a5b328

View File

@ -84,4 +84,83 @@ rec {
inherit dotGraph nrFrames; inherit dotGraph nrFrames;
}; };
# Wrap a piece of TeX code in a document. Useful when generating
# inline images from TeX code.
wrapSimpleTeX =
{ preamble ? null
, body
, name ? baseNameOf (toString body)
}:
pkgs.stdenv.mkDerivation {
inherit name preamble body;
buildCommand = "
touch $out
echo '\\documentclass{article}' >> $out
echo '\\pagestyle{empty}' >> $out
if test -n \"$preamble\"; then cat $preamble >> $out; fi
echo '\\begin{document}' >> $out
cat $body >> $out
echo '\\end{document}' >> $out
";
};
# Convert a Postscript file to a PNG image, trimming it so that
# there is no unnecessary surrounding whitespace.
postscriptToPNG =
{ postscript
}:
pkgs.stdenv.mkDerivation {
name = "png";
inherit postscript;
buildCommand = "
if test -d $postscript; then
input=$(ls $postscript/*.ps)
else
input=$(stripHash $postscript; echo $strippedName)
ln -s $postscript $input
fi
# !!! Quick hack: no ImageMagick in Nixpkgs yet!
export PATH=/usr/bin:$PATH
ensureDir $out
convert -units PixelsPerInch \\
-density 300 \\
-trim \\
-matte \\
-transparent '#ffffff' \\
-type PaletteMatte \\
+repage \\
$input \\
\"$out/$(basename $input .ps).png\"
";
};
# Convert a piece of TeX code to a PNG image.
simpleTeXToPNG =
{ preamble ? null
, body
, name ? baseNameOf (toString body)
, packages ? []
}:
postscriptToPNG {
postscript = runLaTeX {
rootFile = wrapSimpleTeX {
inherit body preamble;
};
inherit packages;
generatePDF = false;
generatePS = true;
searchRelativeTo = dirOf (toString body);
};
};
} }