2014-01-26 59 views
7

在ipython-notebook中的markdown單元格內我希望能夠自動展開變量。這可以做到嗎?在ipython-notebook的Markdown單元格中展開變量

作爲一個例子,考慮下面的代碼

from IPython.core.display import HTML 
from markdown import markdown 

base_url = "https://stackoverflow.com/" 
markdown_string = "Two categories at [stackoverflow]({0}) are "\ 
        "[ipython-notebook]({0}questions/tagged/ipython-notebook) and "\ 
        "[matplotlib]({0}questions/tagged/matplotlib).".format(base_url) 
HTML("<p>{}</p>".format(markdown(markdown_string))) 

這產生與所有相對於base_url鏈接正確,則輸出單元,如

兩類在stackoverflowipython-notebookmatplotlib

我希望能夠直接鍵入單元格中的標記,引用一個預先定義的變量。這可能嗎?

+0

哦,我之前不知道「IPython.core.display.HTML」,總是以'_repr_html_'結束自己的對象。 – Kos

+2

這很可能是http://stackoverflow.com/q/18878083/2870069的重複一些評論也在這裏給出:http://stackoverflow.com/q/19524554/2870069 – Jakob

+0

@Jakob是正確的 - 我想要的正是第一個問題,這給了我期待的答案。 – Ian

回答

6

雖然現在還不可能做到真正的Markdown單元,但您可以輕鬆創建一個魔法來獲得相同的效果。

from __future__ import absolute_import 
from IPython.core.getipython import get_ipython 
from IPython.core.magic import (Magics, magics_class, cell_magic) 

@magics_class 
class MarkdownMagics(Magics): 

    @cell_magic 
    def markdown(self, line, cell): 
     from IPython.core.display import HTML 
     from markdown import markdown 

     vars = line.split() 

     d = {} 
     for k, v in self.shell.user_ns.items(): 
      if k in vars: 
       d[k] = v 

     return HTML("<p>{}</p>".format(markdown(cell.format(**d)))) 

get_ipython().register_magics(MarkdownMagics) 

將一些變量

foo = 1 
bar = 2 

然後調用的魔力,帶參數是你想從命名空間中採取的變量。

​​
5

由於@Jakob的意見後,要accompish最簡單的方法就是安裝python-markdown IPython的筆記本擴展,如在wiki page描述。

Python的細胞:

然後,您可以用兩個大括號包圍這些訪問降價的變量

x = 1000 

降價細胞:

Insert variable contents here -> {{x}}. 

降價細胞被解析爲:

Insert variable contents here -> 1000. 
相關問題