Das deutsche Python-Forum

10 Jahre Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Dienstag 21. Oktober 2014, 13:53

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Nutzerdefinierte LaTeX Symbole rendern für Kile
BeitragVerfasst: Dienstag 2. Dezember 2008, 11:34 
User

Registriert: Dienstag 5. August 2008, 00:30
Beiträge: 15
Wohnort: Dresden
Hatte gestern das Bedürfnis, häufig genutzte eigene Symbole im KDE-LaTeX-Editor Kile bequem einfügen zu können. Der offizielle Weg geht wohl über ein Programm namens gesymb, aber da ich gerade wenig Platz auf der Platte habe wollte ich nicht ewig viel Zeug installieren, nur um gesymb zu kompilieren.

Kile braucht eigentlich nur für jedes Symbol eine png-Datei. Den einzufügenden LaTeX-Code ließt es aus den Meta-Daten dieser png-Datei.

Da ich vor kurzen ein bisschen mit Inkscape und seinen Python-Erweiterungen rumgespielt hatte, schien mir eine Python-Lösung recht machbar. Ich habe eine Version, die meinen Bedarf befriedigt, auch innerhalb von etwas über einer Stunde hinbekommen.

Falls noch andere ähnliche Bedürfnisse haben... vielleicht nützt es jemandem:



  1. #! /usr/bin/env python
  2. # -*- coding: utf8 -*-
  3. import os
  4. import sys
  5.  
  6. #from ipHelp import IPS, ip_syshook
  7. #ip_syshook(0) # personal IPython debug stuff
  8.  
  9. # inspired by the forum thread:
  10. #http://www.matheplanet.com/matheplanet/nuke/html/viewtopic.php?post_id=729017&topic=94327
  11.  
  12. # pretty much taken from eqtexsvg.py by Julien Vitard (as part of inkscape)
  13. # therefore the whole script is licenced under the terms of the
  14. # GNU General Public License as published by
  15. # the Free Software Foundation; either version 2 of the License, or
  16. # (at your option) any later version.
  17.  
  18. # needs: latex, dvipng, pngcrush
  19.  
  20. def createPNG(symbolText, finalpng_filename):
  21.  
  22.     base_dir="./"
  23.     latex_file = os.path.join(base_dir, "eq.tex")
  24.     aux_file = os.path.join(base_dir, "eq.aux")
  25.     log_file = os.path.join(base_dir, "eq.log")
  26.     dvi_file = os.path.join(base_dir, "eq.dvi")
  27.     out_file = os.path.join(base_dir, "eq.out")
  28.     png_file = os.path.join(base_dir, "eq.png")
  29.  
  30.     def clean():
  31.         os.remove(latex_file)
  32.         os.remove(aux_file)
  33.         os.remove(log_file)
  34.         os.remove(dvi_file)
  35.         os.remove(out_file)
  36.  
  37.     def create_equation_tex(filename, equation):
  38.         tex = open(filename, 'w')
  39.         tex.write("""%% processed with kilehilfe.py
  40. \\documentclass{article}
  41. \\usepackage{amsmath}
  42. \\usepackage{amssymb}
  43. \\usepackage{amsfonts}
  44.  
  45. \\thispagestyle{empty}
  46. \\begin{document}
  47.    """)
  48.  
  49.         # maybe you will have to add some packages above
  50.         tex.write(equation)
  51.         tex.write("\n\\end{document}\n")
  52.         tex.close()
  53.  
  54.     create_equation_tex(latex_file, symbolText)
  55.     #os.system('cd ' + base_dir)
  56.     os.system('latex -output-directory=' + base_dir + ' -halt-on-error ' +
  57.                                                 latex_file + ' > ' + out_file)
  58.     try:
  59.         os.stat(dvi_file)
  60.     except OSError:
  61.         print >>sys.stderr, "invalid LaTeX input:"
  62.         print >>sys.stderr, symbolText
  63.         print >>sys.stderr, "temporary files were left in:", base_dir
  64.         sys.exit(1)
  65.  
  66.     os.system('dvipng -T tight -o ' +png_file + ' ' + dvi_file)
  67.     # -T tight cuts off all the empty blank space arround the symbol
  68.  
  69.     if symbolText[0]+symbolText[-1]=="$$":
  70.        symbolText=symbolText[1:-1] # "$\aplha$" -> "\alpha"
  71.  
  72.     ## maybe pngcrush could be made obsolate by using this:
  73.     ## (manipultating png-metadata with python)
  74.     ##http://blog.modp.com/2007/08/python-pil-and-png-metadata-take-2.html
  75.     cmd = 'pngcrush -text b "Command" "%s" %s %s ' %(symbolText, png_file,
  76.                                                     finalpng_filename)
  77.     os.system(cmd)
  78.     clean()
  79.  
  80. ###
  81. # main program:
  82.  
  83. #render a symbol for every element of the list
  84. #using raw strings (r'my_raw_sting') to prevent python from
  85. #interpreting the backslash-character by itself
  86. symbolList=[r'$\dot{q_1}$', r'$\ddot{q_1}$', r'$\dot{q_2}$', r'$\ddot{q_2}$',
  87.             r'$\tilde{q_2}$', r'$\dot{\tilde{q_2}}$', r'$\stackrel{!}{=}$',
  88.             r'$\mathbf{M}$', r'$\text{abc}$', ]
  89.  
  90.  
  91. # now iterate over the list
  92. for i, symb in enumerate(symbolList):
  93.     createPNG(symb, "symb%03d.png" % i)
  94.  
  95.  
Highlighting by GeSHi


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de