2016-04-13 10 views
2

orgモードを使用してテクニカルブックを書きたいと思っています。私は外部のファイルから既存のコードをpdfにエクスポートするときに良いフォーマットを与えるbabelコードブロックに挿入する方法を探しています。orgファイルにコードスニペットを含める

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

例えば

は、私にfoo.py

#+BEGIN_SRC python 
def times_two(x): 
    y = x*2 
    return y 

print times_two(5)  
#+END_SRC 

にライン45から50に次の同等を与えるだろう、とにかくこれを行うのはありますか?

答えて

1

あなたがして行を印刷するシェルスクリプトを使用することができます。たとえば、ここではwos.pyスクリプトの行9〜18を表示します。あなたが設定した場合、シェルスクリプトはエクスポートされません:エクスポートも。

#+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をお持ちでない場合は、同じことをする小さなPythonスクリプトを書くことができます。行番号を1つだけシフトし、コードに結果を設定することを忘れないでください。

#+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 
+0

'sed'が動作していますが、pythonスクリプトを実行できないようです。それは私に 'None'を与えるだけです。私はターミナルで同じスクリプトを実行し、それは正常に動作します。奇妙な... – Dan

+0

必要な場合があります:結果出力コード。私はデフォルトから値に変更しました。 –

0

私はこのような何かが仕事ができると思う:マニュアルへ

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

はリンク:ラップヘッダー:http://orgmode.org/manual/Include-files.html

+1

これはうまくいくようですが、私はBEGIN_SRCで得る素晴らしいフォーマットを得られません。 'begin_src'の中で' include'を使うと、ファイルは取得されませんが、 'include'ステートメントはそのまま出力されます。 – Dan

+2

@Dan、フォーマットを取得するには、 'src'を指定する必要があります。たとえば、'#+ include: "./code/foo.py":lines "45-50" src python -n'はPythonをマークアップします。行番号を追加します。 –

関連する問題