Add patch to make teximg preamble configurable
parent
9733d1f79a
commit
77cb7f5d36
|
@ -0,0 +1,110 @@
|
|||
The [[plugins/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 European `scrartcl` class.
|
||||
- Removed the non-standard `mhchem` package from the default preamble.
|
||||
- Allow the use of `dvipng` rather than `dvips` and `convert` (`convert` is not a standard part of a latex install). This is configurable.
|
||||
|
||||
-- [[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,34 @@ 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;
|
||||
|
||||
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 2> $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 {
|
Loading…
Reference in New Issue