The teximg plugin currently has a TODO in the source code to make the preamble configurable. The included patch makes this change.
The patch also makes some other changes:
- The default latex preamble is changed to the international standard
article
class from the Europeanscrartcl
class. - Removed the non-standard
mhchem
package from the default preamble. - Allow the use of
dvipng
rather thandvips
andconvert
(convert
is not a standard part of a latex install). This is configurable.
-- Will
I like making this configurable. I do fear that changing what's included by default could break some existing uses of teximg? That needs to be considered, and either the breakage documented in NEWS, or avoided. Also, if mchem is dropped, I think the suggests on texlive-science in debian/control should probably go? --Joey
Yes, changing the defaults could break some existing uses. I think in this case, documenting in NEWS and dropping texlive-science is the best option. In fact, NEWS should probably document the config setting to return things to how they were.
The reason I prefer dropping
mchem
rather than keeping it is thatmchem
is non-standard. Now that things are configurable and it is easy to add in if you want it, having only standard packages by default is a good thing. Here is a proposed NEWS entry:
File: TexImg standard preamble changed
The teximg plugin now has a configurable LaTeX preamble.
As part of this change the mchem
LaTeX package has been removed from
the default LaTeX preamble as it wasn't included in many TeX installations.
The previous behaviour can be restored by adding the following to your ikiwiki setup:
teximg_prefix => '\documentclass{scrartcl}
\usepackage[version=3]{mhchem}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\pagestyle{empty}
\begin{document}',
In addition, the rendering mechanism has been changed to use dvipng
by default.
If you would like to return to the old rendering mechanism using dvips
and convert
then you should add the following line to your ikiwiki setup:
teximg_dvipng => 0,
The LaTeX postfix is unchanged, but is also now configurable using teximg_postfix
.
Happy TeXing.
I think that about covers it. -- Will
diff --git a/IkiWiki/Plugin/teximg.pm b/IkiWiki/Plugin/teximg.pm
index 369c108..8c3379f 100644
--- a/IkiWiki/Plugin/teximg.pm
+++ b/IkiWiki/Plugin/teximg.pm
@@ -10,6 +10,18 @@ use File::Temp qw(tempdir);
use HTML::Entities;
use IkiWiki 2.00;
+my $default_prefix = <<EOPREFIX
+\\documentclass{article}
+\\usepackage{amsmath}
+\\usepackage{amsfonts}
+\\usepackage{amssymb}
+\\pagestyle{empty}
+\\begin{document}
+EOPREFIX
+;
+
+my $default_postfix = '\\end{document}';
+
sub import {
hook(type => "getsetup", id => "teximg", call => \&getsetup);
hook(type => "preprocess", id => "teximg", call => \&preprocess);
@@ -21,6 +33,26 @@ sub getsetup () {
safe => 1,
rebuild => undef,
},
+ teximg_dvipng => {
+ type => "boolean",
+ description => "Should teximg use dvipng to render, or dvips and convert?",
+ safe => 0,
+ rebuild => 0,
+ },
+ teximg_prefix => {
+ type => "string",
+ example => $default_prefix,
+ description => "LaTeX prefix for teximg plugin",
+ safe => 0, # Not sure how secure LaTeX is...
+ rebuild => 1,
+ },
+ teximg_postfix => {
+ type => "string",
+ example => $default_postfix,
+ description => "LaTeX postfix for teximg plugin",
+ safe => 0, # Not sure how secure LaTeX is...
+ rebuild => 1,
+ },
}
sub preprocess (@) {
@@ -105,25 +137,35 @@ sub gen_image ($$$$) {
my $digest = shift;
my $imagedir = shift;
- #TODO This should move into the setup file.
- my $tex = '\documentclass['.$height.'pt]{scrartcl}';
- $tex .= '\usepackage[version=3]{mhchem}';
- $tex .= '\usepackage{amsmath}';
- $tex .= '\usepackage{amsfonts}';
- $tex .= '\usepackage{amssymb}';
- $tex .= '\pagestyle{empty}';
- $tex .= '\begin{document}';
+ if (!defined $config{teximg_prefix}) {
+ $config{teximg_prefix} = $default_prefix;
+ }
+ if (!defined $config{teximg_postfix}) {
+ $config{teximg_postfix} = $default_postfix;
+ }
+ if (!defined $config{teximg_dvipng}) {
+ # TODO: Can we detect whether dvipng or convert is in the path?
+ $config{teximg_dvipng} = 1;
+ }
+
+ my $tex = $config{teximg_prefix};
$tex .= '$$'.$code.'$$';
- $tex .= '\end{document}';
+ $tex .= $config{teximg_postfix};
+ $tex =~ s!\\documentclass{article}!\\documentclass[${height}pt]{article}!g;
+ $tex =~ s!\\documentclass{scrartcl}!\\documentclass[${height}pt]{scrartcl}!g;
my $tmp = eval { create_tmp_dir($digest) };
if (! $@ &&
- writefile("$digest.tex", $tmp, $tex) &&
- system("cd $tmp; latex --interaction=nonstopmode $tmp/$digest.tex > /dev/null") == 0 &&
- system("dvips -E $tmp/$digest.dvi -o $tmp/$digest.ps 2> $tmp/$digest.log") == 0 &&
- # ensure destination directory exists
- writefile("$imagedir/$digest.png", $config{destdir}, "") &&
- system("convert -density 120 -trim -transparent \"#FFFFFF\" $tmp/$digest.ps $config{destdir}/$imagedir/$digest.png > $tmp/$digest.log") == 0) {
+ writefile("$digest.tex", $tmp, $tex) &&
+ system("cd $tmp; latex --interaction=nonstopmode $tmp/$digest.tex > /dev/null") == 0 &&
+ # ensure destination directory exists
+ writefile("$imagedir/$digest.png", $config{destdir}, "") &&
+ (($config{teximg_dvipng} &&
+ system("dvipng -D 120 -bg Transparent -T tight -o $config{destdir}/$imagedir/$digest.png $tmp/$digest.dvi > $tmp/$digest.log") == 0
+ ) ||
+ (!$config{teximg_dvipng} &&
+ system("dvips -E $tmp/$digest.dvi -o $tmp/$digest.ps 2> $tmp/$digest.log") == 0 &&
+ system("convert -density 120 -trim -transparent \"#FFFFFF\" $tmp/$digest.ps $config{destdir}/$imagedir/$digest.png > $tmp/$digest.log") == 0))) {
return 1;
}
else {