2009-06-23 29 views
2

大量のPythonソースコードの植字が必要なラテックス文書を作成しています。私は(Pythonモジュール、オンラインデモではありません)を使用しています。このPythonをlatexでカプセル化しています。これは長い個別の行を除いてはうまくいきます。私はこれらの行を手作業でラップすることができますが、これは私にとっては優雅な解決策ではないと思われますが、私は反復的なタスクよりもクレイジーな自動化されたソリューションについて困惑しています。私が望む何印字可能なPythonソース行の折り返し

は機能を維持しながら、特定の最大文字長に行をラップするPythonのソースコードを処理するいくつかの方法です。私はいくつかのPythonで遊んできました。そして私が来たのは、最大行の長さの前に最後の空白に\\\nを挿入しています。もちろん、これが文字列とコメントで終わった場合は、問題が起こります。率直に言って、私はこの問題にどのように接近すべきか分かりません。

だから、何行が一定の長さを超えないようにソースコードを処理することができ、モジュールまたはツールを知っ誰である - またはそのような何かをコーディングについては移動を開始するには、少なくとも良い方法はありますか?

答えて

3

をあなたの現在のアプローチビットを拡張したいのですが、標準ライブラリからtokenizeモジュールを使用した可能性がありますあなたの改行を置く場所を決定する。そうすれば、空白で区切られた単語だけでなく、ソースコードの実際のトークン(COMMENT、STRINGなど)を見ることができます。ここで

は、トークン化は何ができるかの簡単な例です:

>>> from cStringIO import StringIO 
>>> from tokenize import tokenize 
>>> 
>>> python_code = ''' 
... def foo(): # This is a comment 
...  print 'foo' 
... ''' 
>>> 
>>> fp = StringIO(python_code) 
>>> 
>>> tokenize(fp.readline) 
1,0-1,1: NL '\n' 
2,0-2,3: NAME 'def' 
2,4-2,7: NAME 'foo' 
2,7-2,8: OP '(' 
2,8-2,9: OP ')' 
2,9-2,10: OP ':' 
2,11-2,30: COMMENT '# This is a comment' 
2,30-2,31: NEWLINE '\n' 
3,0-3,4: INDENT ' ' 
3,4-3,9: NAME 'print' 
3,10-3,15: STRING "'foo'" 
3,15-3,16: NEWLINE '\n' 
4,0-4,0: DEDENT '' 
4,0-4,0: ENDMARKER '' 
+0

これで有望になりました。私はtokenizeモジュールを調べます。ありがとう! – Markus

+0

私はこれが行く方法だと思います。私はそれに戻るチャンスを得るときに別の答えとしてコードを投稿します。 – Markus

1

NetBeansのようなエディタで再フォーマットツールをチェックします。

あなたはそれが適切なコメントの内と外の両方の線の長さを修正するJavaを再フォーマットすると、同じアルゴリズムはPythonに適用された場合、それが働くだろう。

Javaの場合、任意の折り返し幅と他のパラメータを設定できます。それがネイティブでもプラグインとしても存在しなければ、私はかなり驚くだろう。

はただ説明から確実に伝えることはできませんが、それは試してみる価値はあります:

http://www.netbeans.org/features/python/

+0

再フォーマットjavaは少し楽になりそうです...

\usepackage{listings} %\lstloadlanguages{Python} # Load only these languages \newcommand{\MyHookSign}{\hbox{\ensuremath\hookleftarrow}} \lstset{ % Language language=Python, % Basic setup %basicstyle=\footnotesize, basicstyle=\scriptsize, keywordstyle=\bfseries, commentstyle=, % Looks frame=single, % Linebreaks breaklines, prebreak={\space\MyHookSign}, % Line numbering tabsize=4, stepnumber=5, numbers=left, firstnumber=1, %numberstyle=\scriptsize, numberstyle=\tiny, % Above and beyond ASCII! extendedchars=true } 

パッケージは、数字としてそれを示す、ファイル全体を含め、インラインコード用フックがあります。

はあなたの前文に次置きますPythonでは同じです。 Netbeans(または他のエディタ)がこれを正しく実行できるかどうか誰にでも確認できますか? – SingleNegationElimination

+0

Vimではあまり知的ではありませんが、同様の解決策は、「再コラム化」するデータを視覚的に選択し、 'textwidth'が現在設定されているものの最大幅を持つように' gw'を押します。しかし、このVimのトリックは、ソースコードよりも平文でうまく機能します。 –

2

私はソースコードを挿入するためのLaTeXでlistingsパッケージを使用します。構文ハイライト、linebreaksなどがあります。

+0

良いヒント、私は間違いなくそれを与えるだろう。 – Markus

関連する問題