diff options
| author | St??phane Gimenez <dev@gim.name> | 2006-11-24 15:02:55 +0000 |
|---|---|---|
| committer | sgimenez <sgimenez@users.sourceforge.net> | 2006-11-24 15:02:55 +0000 |
| commit | dcca46b8dee07deabecf0fd49e7c79d304308838 (patch) | |
| tree | ecbf5568f3bda2310bcbe14bf458cc99d471df25 | |
| parent | grow/shrink node selection by scrollwheel (diff) | |
| download | inkscape-dcca46b8dee07deabecf0fd49e7c79d304308838.tar.gz inkscape-dcca46b8dee07deabecf0fd49e7c79d304308838.zip | |
fixes related to bugs (#1495693,#1500967,#1555211)
with the eqtexsvg plugin (ie LaTeX Formula):
- uses better svg parsing technique
- does better tmp file creation
- uses plot-svg pstoedit driver to produce svgs
- does not use -output-dir with latex
- other minor fixes and improvements
thanks to Roman S Dubtsov
(bzr r2027)
| -rw-r--r-- | share/extensions/eqtexsvg.inx | 2 | ||||
| -rw-r--r-- | share/extensions/eqtexsvg.py | 121 |
2 files changed, 54 insertions, 69 deletions
diff --git a/share/extensions/eqtexsvg.inx b/share/extensions/eqtexsvg.inx index 819f30aa0..657594a9c 100644 --- a/share/extensions/eqtexsvg.inx +++ b/share/extensions/eqtexsvg.inx @@ -6,7 +6,7 @@ <dependency type="executable" location="path">latex</dependency> <dependency type="executable" location="path">dvips</dependency> <dependency type="executable" location="path">pstoedit</dependency> - <param name="formule" type="string" _gui-text="LaTeX formula: ">\lim_{n \to \infty}\sum_{k=1}^n \frac{1}{k^2}= \frac{\pi^2}{6}</param> + <param name="formule" type="string" _gui-text="LaTeX formula: ">\[\frac{\pi^2}{6}=\lim_{n \to \infty}\sum_{k=1}^n \frac{1}{k^2}\]</param> <effect> <object-type>all</object-type> <effects-menu> diff --git a/share/extensions/eqtexsvg.py b/share/extensions/eqtexsvg.py index a16cdc625..5b88febec 100644 --- a/share/extensions/eqtexsvg.py +++ b/share/extensions/eqtexsvg.py @@ -1,15 +1,13 @@ #!/usr/bin/env python # -*- coding: cp1252 -*- """ -EQTEXSVG.py -functions for converting LATEX equation string into SVG path -This extension need, to work properly : - - a TEX/LATEX distribution (MiKTEX ...) +eqtexsvg.py +functions for converting LaTeX equation string into SVG path +This extension need, to work properly: + - a TeX/LaTeX distribution (MiKTeX ...) - pstoedit software: <http://www.pstoedit.net/pstoedit> -Copyright (C) 2006 Julien Vitard, julienvitard@gmail.com - -- I will try to code XML parsing, not the hard way ;-) +Copyright (C) 2006 Julien Vitard <julienvitard@gmail.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,88 +21,80 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ -import inkex, os, tempfile, xml.dom.ext, xml.dom.ext.reader.Sax -import sys -from xml.dom import Node +import inkex, os, tempfile, xml.dom.minidom def create_equation_tex(filename, equation): tex = open(filename, 'w') - tex.write("""%% processed with EqTeXSVG.py -\documentclass{article} -\usepackage{amsmath} + tex.write("""%% processed with eqtexsvg.py +\\documentclass{article} +\\usepackage{amsmath} +\\usepackage{amssymb} +\\usepackage{amsfonts} + \\thispagestyle{empty} \\begin{document} """) - tex.write("$$\n") tex.write(equation) - tex.write("\n$$\n") - tex.write("\end{document}\n") + tex.write("\\end{document}\n") tex.close() -def add_paths(self,group,node): - next = node.firstChild - while next is not None: - child = next - next = child.nextSibling - - if child.nodeType is not Node.ELEMENT_NODE: continue - if child.nodeName == "title": continue - if child.nodeName == "desc": continue - if child.nodeName == "rect" and child.getAttribute("id") == "background": continue - - if child.nodeName == "g": - svg_group = self.document.createElement('svg:g') - if child.hasAttribute("transform"): - svg_group.setAttribute("transform",child.getAttribute("transform")) - group.appendChild(svg_group) - add_paths(self,svg_group,child) - else: - group.appendChild(self.document.importNode(child,1)) - def svg_open(self,filename): - # parsing of SVG file with the equation - reader = xml.dom.ext.reader.Sax.Reader() - stream = open(filename,'r') - svgdoc = reader.fromStream(stream) - - group = self.document.createElement('svg:g') + doc_width = float(self.document.documentElement.getAttribute('width')) + doc_height = float(self.document.documentElement.getAttribute('height')) + doc_sizeH = min(doc_width,doc_height) + doc_sizeW = max(doc_width,doc_height) + + def clone_and_rewrite(self, node_in): + if node_in.localName != 'svg': + node_out = self.document.createElement('svg:' + node_in.localName) + for i in range(0, node_in.attributes.length): + name = node_in.attributes.item(i).name + value = node_in.attributes.item(i).value + node_out.setAttribute(name, value) + else: + node_out = self.document.createElement('svg:g') + for c in node_in.childNodes: + if c.localName in ('g', 'path', 'polyline', 'polygon'): + child = clone_and_rewrite(self, c) + if c.localName == 'g': + child.setAttribute('transform','matrix('+str(doc_sizeH/700.)+',0,0,'+str(-doc_sizeH/700.)+','+str(-doc_sizeH*0.25)+','+str(doc_sizeW*0.75)+')') + node_out.appendChild(child) + + return node_out + + doc = xml.dom.minidom.parse(filename) + svg = doc.getElementsByTagName('svg')[0] + group = clone_and_rewrite(self, svg) self.current_layer.appendChild(group) - child = svgdoc.firstChild - while child is not None: - if child.nodeName == "svg" and child.nodeType == Node.ELEMENT_NODE: - add_paths(self,group,child) - child = child.nextSibling - class EQTEXSVG(inkex.Effect): def __init__(self): inkex.Effect.__init__(self) self.OptionParser.add_option("-f", "--formule", - action="store", type="string", - dest="formule", default=10.0, - help="Formule LaTeX") + action="store", type="string", + dest="formula", default=10.0, + help="LaTeX formula") def effect(self): - base_file = os.path.join(tempfile.gettempdir(), "inkscape-latex.tmp") - latex_file = base_file + ".tex" - create_equation_tex(latex_file, self.options.formule) - out_file = os.path.join(tempfile.gettempdir(), "inkscape-latex.tmp.output") - os.system('latex -output-directory=' + tempfile.gettempdir() + ' ' + latex_file + '> ' + out_file) + base_file = os.path.join(tempfile.gettempdir(), "inkscape-latex.tmp." + str(os.getpid())) + latex_file = base_file + ".tex" + create_equation_tex(latex_file, self.options.formula) + out_file = base_file + ".output" + os.system('cd ' + tempfile.gettempdir() + '; latex -halt-on-error ' + latex_file + ' > ' + out_file); ps_file = base_file + ".ps" dvi_file = base_file + ".dvi" svg_file = base_file + ".svg" - os.system('dvips -q -f -E -D 600 -y 50000 -o ' + ps_file + ' ' + dvi_file) - os.system('pstoedit -f plot-svg -centered -dt -ssp ' + ps_file + ' ' + svg_file + '>> ' + out_file + ' 2>&1') + os.system('dvips -q -f -E -D 600 -y 5000 -o ' + ps_file + ' ' + dvi_file) + os.system('cd ' + tempfile.gettempdir() + '; pstoedit -f plot-svg -dt -ssp ' + ps_file + ' ' + svg_file + '&> ' + out_file) - # ouvrir le svg et remplacer #7F7F7F par #000000 svg_open(self, svg_file) - # clean up + # Clean up aux_file = base_file + ".aux" log_file = base_file + ".log" os.remove(latex_file) @@ -115,10 +105,5 @@ class EQTEXSVG(inkex.Effect): os.remove(svg_file) os.remove(out_file) -#e = EQTEXSVG() -#e.affect() -try: - e = EQTEXSVG() - e.affect() -except Exception, inst: - sys.stderr.write(str(inst) + "\n") +e = EQTEXSVG() +e.affect() |
