Frage

ich auf einem Latex Dokument arbeite, die erheblichen Mengen an Python-Quellcode Schriftsetzen erfordert. Ich verwende pygments (das Python-Modul, nicht die Online-Demo) diesen Python in Latex zu verkapseln, die gut funktioniert, außer im Fall von langen einzelnen Linien -, die einfach die Seite weiter ab. Ich konnte diese Zeilen manuell wickeln, außer dass dies scheint nicht nur, dass die elegante Lösung für mich, und ich ziehe viel Zeit rätselhaft über verrückt automatisierte Lösungen als auf sich wiederholende Aufgaben.

Was ich möchte, ist eine Möglichkeit, den Python-Quellcode der Verarbeitung die Linien auf eine bestimmte maximale Zeichenlänge zu wickeln, während Funktionalität zu erhalten. Ich habe ein Spiel um mit einigem Python habe und in der Nähe bin ich gekommen, vor der maximalen Leitungslänge \\\n im letzten Leerzeichen eingefügt - aber natürlich, wenn diese nach oben endet in Strings und Kommentaren, die Dinge schief gehen. Ganz ehrlich, ich bin nicht sicher, wie dieses Problem zu nähern.

So

, ist jemand Kenntnis von einem Modul oder Werkzeug, das Quellcode verarbeiten kann, so dass keine Linien eine bestimmte Länge nicht überschreiten - oder zumindest einen guten Weg zu gehen zu beginnen, über so etwas wie Codierung

War es hilfreich?

Lösung

Vielleicht möchten Sie Ihre aktuelle Ansatz ein wenig verlängern, aber mit der tokenize Modul aus der Standardbibliothek, um zu bestimmen, wo Ihre Zeilenumbrüche setzen. Auf diese Weise können Sie die tatsächliche Token (KOMMENTAR, STRING, etc.) des Quellcodes und nicht nur die durch Leerzeichen getrennte Wörter sehen.

Hier ist ein kurzes Beispiel dafür, was tokenize tun können:

>>> 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   ''

Andere Tipps

Ich verwende das listings Paket in LaTeX-Quellcode einfügen; es tut Syntax Highlight, Zeilenumbrüche et al.

Setzen Sie die folgende in Ihrer Präambel:

\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
}

Das Paket hat für Inline-Code Haken, einschließlich ganzen Dateien, es als Zahlen, die zeigen, ...

Ich würde eine Neuformatierung Werkzeug in einem Editor überprüfen wie NetBeans.

Wenn Sie Java umformatieren es behebt richtig die Längen der Linien sowohl innerhalb als auch außerhalb von Kommentaren, wenn der gleiche Algorithmus auf Python angewendet wurden, würde es funktionieren.

Für Java ermöglicht es Ihnen, jede Verpackung Breite und eine Reihe anderer Parameter einzustellen. Ich würde ziemlich überrascht sein, wenn das nicht entweder nativ oder als Plugin noch nicht gab.

Kann nicht sagen, sicher nur aus der Beschreibung, aber es ist ein Versuch wert:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top