martes, 29 de abril de 2014

Instalar Textext en inskscape y no morir en el intento (Windows)

Solución Actualizada: Si tienes instalado Inkscape 1.0 la extensión TexText se puede instalar muy fácilmente. Durante un tiempo hubo grandes problemas de compatibilidad con las versiones de la 0.48 a la 0.92, incluso en la versión 0.48 era muy tedioso conseguir una instalación correcta. Pero el proyecto TexText ha sido recuperado por otros desarrolladores y funciona perfectamente en Inkscape 1.0. Así, solo debes seguir los pasos indicados aquí:  https://textext.github.io/textext/install/windows.html

Mantengo la solución original por si alguien se ve obligado a utilizar TexText con una versión anterior (la última en la que conseguí que funcionara es la 0.48):

Esta entrada la hago a modo de chuleta para futuras instalaciones pesonales de textext en inkscape. Esta vez he tenido varios problemas y ha sido un "dolor" instalarlo y hacerlo funcionar... Espero queotras personas no pierdan el mismo tiempo que yo... Describiré los pasos que a mí me han funcionado, no doy demasiados detalles porque esto se alargaría mucho:

Se supone que ya tenemos Miktex en nuestro ordenador

  1. Instalar inkscape (versión 0.48)
  2. instalar http://www.graphicsmagick.org/
  3. Instalar Pstoedit
  4. Instalar Ghostscript
  5. Verificar que podemos ejecutar pstoedit.exe desde la línea de comandos (cmd.exe). Sino, añadir el directorio a las variables de entorno de Windows:
    • Panel de control -> Sistema y seguridad -> Sistema -> Opciones avanzadas -> Click en variables de entorno -> buscamos la variable PATH y añadimos el directorio de pstoedit separado del último directorio que haya en la lista con un punto y coma (;)
  6. Instalar textext https://pav.iki.fi/software/textext/
  7. Instalar python, una versión 2.X (usé la 2.7). No usar versión 3.X https://www.python.org/
  8. Instalar lxml. Si hemos instalado python 64bits habrá que usar la versión 64 de lxml, sino la 32 (a mí me funcionó con la 32) http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
  9. Copiamos el contenido de la instalación de python (que ha sido modificada por la instalación de lxml) en el directorio python dentro de inkscape (que habremos borrado 100% previamente).
  10. Instalar un editor de python por ejemplo http://www.gedit.org
  11. Localizar textext.py en el directorio Inkscape-0.48\share\extensions y abrirlo con el editor de pyton
  12. Modificarlo así:
Buscar (el número es la línea, así podemos buscar CTRL+l para ir a ella no hay que copiarlos):


54 import inkex

55 import os, sys, tempfile, traceback, glob, re, md5, copy

56 from lxml import etree
y reemplazarlo por

import inkex
import os, sys, tempfile, traceback, glob, re, copy
import hashlib
from lxml import etree

  • Buscar luego esto:

868 def __init__(self, document):
869    PdfConverterBase.__init__(self, document)
870 self.hash = None
871 def convert(self, *a, **kw):
872 # compute hash for generating unique ids for sub-elements
873 self.hash = md5.new('%s%s' % (a, kw)).hexdigest()[:8]
874 return PdfConverterBase.convert(self, *a, **kw)
875 def pdf_to_svg(self):
876 exec_command(['pdf2svg', self.tmp('pdf'), self.tmp('svg'), '1'])

  • y reemplazarlo por:

   def __init__(self, document):
       PdfConverterBase.__init__(self, document)
       self.hash = None
       USE_GTK = False

   def convert(self, *a, **kw):
       # compute hash for generating unique ids for sub-elements
       m = hashlib.md5()
       m.update('%s%s' % (a, kw))
       self.hash = m.hexdigest()[:8]
       return PdfConverterBase.convert(self, *a, **kw)
   def pdf_to_svg(self):
       exec_command(['pdf2svg', self.tmp('pdf'), self.tmp('svg'), '1'])


Por favor, no uses adblockers en esta página, se mantiene gracias a ellos. Los anuncios no son invasivos y quizá veas algo que te interese. Si encontraste una solución a tu problema y ahorraste tiempo, ya me doy por satisfecho. También podrías invitarme a un café con una pequeña donación en Paypal. ¡Gracias! 

12 comentarios:

  1. Hola, no encuentro textext.py en el directorio Inkscape-0.48\share\extensions

    ResponderEliminar
    Respuestas
    1. Hola, esto puede ser por varios motivos:
      1) Si tu versión de Inkscape no es la 0.48, simplemente busca en la carpeta de Inkscape con el nombre que se te haya creado en la instalación. Supongo que esto ya lo has confirmado.
      2) No has instalado textext. Recuerda que no es una extensión que viene por defecto, hay que instalarla. La puedes descargar de aquí: https://pav.iki.fi/software/textext/
      3) Quizá sí habías instalado la extensión, pero al hacerlo, le indicaste incorrectamente en que path tienes inkscape. Para estar segura, vuelve a instalar textext y presta mucha atención al directorio en el que se te dice que está inkscape, quizá lo que aparece allí escrito por defecto no sea idéntico a tu directorio. Simplemente, escribe correctamente dónde lo tienes instalado para que textext se pueda instalar bien.

      Eliminar
  2. Hola,
    Después de realizar todos los pasos indicados, me aparece el siguiente mensaje al tratar de habilitar la extension TexText en Inkscape:

    'import site' failed; use -v for traceback

    Traceback (most recent call last):

    File "textext.py", line 49, in

    import sys, os, glob, traceback, platform

    File "C:\Program Files (x86)\Inkscape\python\Lib\os.py", line 400, in

    import UserDict

    File "C:\Program Files (x86)\Inkscape\python\Lib\UserDict.py", line 116, in

    import _abcoll

    File "C:\Program Files (x86)\Inkscape\python\Lib\_abcoll.py", line 456, in

    KeysView.register(type({}.viewkeys()))

    AttributeError: 'dict' object has no attribute 'viewkeys'

    ResponderEliminar
    Respuestas
    1. Hola, creo que no has seguido bien los pasos. En la versión de python 2.7 en la línea 456 de _abcoll.py (que es donde te falla) no hay ninguna llamada a KeysView.register(), de hecho no aparece esa llamada en todo el documento, por tanto, es seguro que estás usando otra versión. Te aconsejo volver a empezar desde cero prestando atención a las versiones exactas que marca la solución. Si no lo consigues, puedes explorar otros mecanismos para añadir texto Latex en Inkscape. Se explican en esta otra entrada: https://cajondesoluciones.blogspot.com.es/2017/01/como-generar-imagenes-pdf-con-texto.html

      Eliminar
    2. Hola,
      He vuelto a hacerlo todo hasta el paso de tratar de ejecutar pstoedit.exe desde la línea de comandos y me indica que tiene un problema abriendo el driver dvrmagick.dll. He añadido al PATH la dirección de la instalación del pstoedit y sigue sin funcionar la ejecución a través de la línea de comandos del pstoedit.exe

      Eliminar
    3. Vale, este problema ya es algo nuevo. Hay algún problema con graphicsmagick y una de las librerías que instala. Esa librería yo no la tengo en mi ordenador (?) no sé por qué se te quejará si todo lo has hecho idéntico. Pero intuyo que no se necesita así que seguramente textext ya te funcionará pero saltará el error todo el rato. Lo que puedes hacer es buscarla y borrarla (dvrmagick.dll). Si no consigues que funcione, entonces te recomiendo que desinstales graphicsmagick y que pruebes instalando imagemagick. Instalalo en "c:\Imagemagick" que no haya espacios. Lo puedes descargar aquí: http://www.imagemagick.org/script/binary-releases.php

      A ver si hay suerte.

      Eliminar
    4. Gracias por tu implicación y ayuda.
      He conseguido completar la instalación, pero aún hay algo más que está fallando: cuando ejecuto la extensión textex en Inkscape debería mostrarme la opción para seleccionar un fichero de preámbulo, pero no aparece el típico icono de buscar (sólo aparece la barra en blanco) y por tanto no me permite indicarle las opciones de LaTex para escribir el texto en la parte de texto.

      Eliminar
  3. Hola,
    Muchas gracias por tu ayuda.
    He conseguido completar la instalación obviando el problema del pstoedit, y que se habilite la extensión Textext, sin embargo, el problema que tengo es que al ejecutar la extensión, en la barra del preámbulo, no me aparece la opción para seleccionar un fichero.

    ResponderEliminar
    Respuestas
    1. Hola Juan, me temo que ahí ya no puedo ayudarte ya que yo sólo he usado textext para introductir texto Latex directamente, sin utilizar preámbulos. Pero se me ocurre que si copias y pegas todo el path hasta el fichero donde tienes el preámbulo en el edit box (cópialo del explorador de windows, incluyendo el nombre del fichero y su extensión), te debería funcionar. Existe un foro de inkscape donde a veces se hacen preguntas de textext quizá puedes encontrar este asunto allí o preguntarlo: http://www.inkscapeforum.com/index.php
      Un saludo!

      Eliminar
    2. Y si eso no te funciona, prueba con lo que te decía de imagemagick. El problema de pstoedit no debería aparecer, ese tema sigue siendo raro y quizá no se te carga bien la GUI de textext.

      Eliminar
    3. Muchas gracias.
      Estoy tratando de hacerlo todo de nuevo desde cero habiendo eliminado todos los archivos y carpetas de C:\. Me queda la duda de qué archivos son los que hay que copiar de la instalación de Python2.7 a la carpeta de python de Inkscape.

      Eliminar
    4. Primero borras todo lo que hay dentro de la carpeta python de Inkscape. Que quede vacía, pero no elimines la carpeta. Luego copias todo el contenido de python 2.7 y lo metes en python.

      Eliminar