2013-11-30 7 views
3

Как мы можем использовать инструмент UML plantuml в ноутбуке iPython? Это должно быть полезно для нас, поскольку показатель UML часто используется во время работы с бумагой.iPython notebook plantuml extension

После некоторых google из Интернета, я нашел одну отличную ссылку для Using Asymptote in iPython notebook, затем я создал расширение plantuml для ноутбука iPython. Ниже приведено подробное описание шагов:

  • Запустите iPython ноутбук из моей рабочей директории.e.g: $ HOME/workshop.

    # cd $HOME/workshop 
    # ipython notebook --pylab inline 
    
  • Создание сценария расширения в $ HOME/workshop.e.g: plantuml.py

    """ 
    An Plantuml extension for generating UML figures from within ipython notebook. 
    """ 
    import os 
    from IPython.core.magic import magics_class, cell_magic, Magics 
    from IPython.display import Image, SVG 
    
    @magics_class 
    class Plantuml(Magics): 
    
    @cell_magic 
    def plantuml(self, line, cell): 
        """Generate and display a figure using Plantuml. 
        Usage: 
         %java -jar plantuml.jar -tsvg filname 
        """ 
        self.filename = line 
        self.code = cell 
    
        with open(self.filename + ".plt", "w") as file: 
         file.write(self.code) 
    
        os.system("java -jar plantuml.jar -tsvg %s.plt" % self.filename) 
        return SVG(filename=self.filename+".svg")  
    
    def load_ipython_extension(ipython): 
        ipython.register_magics(Plantuml) 
    
  • Скачать plantuml.jar от official website до $ HOME/мастерской.

  • Создать новый IPython ноутбук, бегите ниже ячейки для загрузки расширения и использовать расширение:

    %install_ext plantuml.py 
    %reload_ext plantuml 
    
  • Создать PlantUML ячейку, чтобы проверить результат.

    %%plantuml figure1 
    
    @startuml 
    Alice -> Bob: Authentication Request 
    Bob --> Alice: Authentication Response 
    @enduml 
    

Тогда все от PlantUML будет работать в IPython ноутбука.

Некоторые вопросы:

  • Выход ошибки PlantUML НЕ отображается в IPython ноутбук если синтаксис неправильно в PlantUML code.It будет большим, если отказ поколение SVG, а затем выводить текст ошибки, othwise выводит файл SVG на ноутбук.
  • Расширение использует формат SVG. Не уверен, что можно использовать формат PDF или PNG. Я хочу расширить TiKz, но pdflatex всегда выводит формат pdf файла. Мне нужно использовать сторонний инструмент для скрытия его до SVG формат firstly.it занимает немного времени.
+0

Последняя IPython имеет документ в IPython/html/статический/пользовательский/custom.css – lucky1928

ответ

2

Инструмент Plantuml UML в ноутбуке iPython - отличная идея!

Вместо того, чтобы добавлять банку, вы также можете воспользоваться веб-службой. Вы можете получить сообщение об ошибке таким образом.

Основываясь на javascript API, я написал небольшой кодер python для отправки строк на сервер plantUML.

Теперь, расширение выглядит следующим образом


import urllib 
import plantumlencoder 
from IPython.core.magic import magics_class, cell_magic, Magics 
from IPython.display import Image, SVG 

@magics_class 
class Plantuml(Magics): 

    @cell_magic 
    def plantuml(self, line, cell): 
     self.filename = line 
     self.code = "" 
     for line in cell.split('\n'): 
      newline = line.strip() 
      if newline: 
       self.code += newline + '\n' 

     uri = "http://www.plantuml.com/plantuml/svg/" + plantumlencoder.compress(self.code) 

     urllib.urlretrieve(uri, self.filename) 

     return SVG(filename=self.filename)  

def load_ipython_extension(ipython): 
    ipython.register_magics(Plantuml) 

Чтобы использовать другие форматы изображений вы можете изменить URL, и код изображения. Например: Это расширение создает PNG


import urllib 
import plantumlencoder 
from IPython.core.magic import magics_class, cell_magic, Magics 
from IPython.display import Image, PNG 

@magics_class 
class Plantuml(Magics): 

    @cell_magic 
    def plantuml(self, line, cell): 
     self.filename = line 
     self.code = "" 
     for line in cell.split('\n'): 
      newline = line.strip() 
      if newline: 
       self.code += newline + '\n' 

     uri = "http://www.plantuml.com/plantuml/png/" + plantumlencoder.compress(self.code) 

     urllib.urlretrieve(uri, self.filename) 

     return PNG(filename=self.filename) 

def load_ipython_extension(ipython): 
    ipython.register_magics(Plantuml)
+0

Хорошо, но это означает, что мы всегда должны сетевое соединение, так как все делается в PlantUML сервере! – lucky1928

+0

FYI. Эта великолепная идея! Ваша ссылка github дает 404. –

Смежные вопросы