在org文件中包含代码段

时间:2016-04-13 17:50:51

标签: org-mode

我想用org模式写一本技术书。我正在寻找一种方法将外部文件中的现有代码插入到babel代码块中,这样可以在导出到pdf时提供良好的格式。

例如

#+BEGIN_SRC python "./code/foo.py" 
  # insert_line (45,50)
#+END_SRC

然后会在foo.py

中从第45到第50行给出相当于以下内容的内容
#+BEGIN_SRC python
 def times_two(x):
   y = x*2
   return y

 print times_two(5)    
#+END_SRC

有没有这样做?

2 个答案:

答案 0 :(得分:2)

我认为这样的事情可行:

#+include: "./code/foo.py" :lines "45-50"

链接到手册:http://orgmode.org/manual/Include-files.html

答案 1 :(得分:2)

您可以使用shell脚本使用:wrap标头打印出行。例如,在这里我打印wos.py脚本的第9-18行。如果设置:export也不会导出shell脚本。

#+BEGIN_SRC sh :wrap src python :exports results
sed -n 9,18p wos.py
#+END_SRC

#+RESULTS:
#+BEGIN_src python
class HTTPSudsPreprocessor(urllib2.BaseHandler):
    def __init__(self, SID):
        self.SID = SID

    def http_request(self, req):
        req.add_header('cookie', 'SID="'+self.SID+'"')
        return req

    https_request = http_request

#+END_src

如果你没有sed,你可以写一个做同样事情的小蟒蛇脚本。只需记住将行号换一,然后将结果设置为代码。

#+BEGIN_SRC python :results code :exports results
with open("wos.py") as f:
    print("".join(f.readlines()[8:17]))    
#+END_SRC

#+RESULTS:
#+BEGIN_SRC python
class HTTPSudsPreprocessor(urllib2.BaseHandler):
    def __init__(self, SID):
        self.SID = SID

    def http_request(self, req):
        req.add_header('cookie', 'SID="'+self.SID+'"')
        return req

    https_request = http_request

#+END_SRC