문제

나는 상당한 양의 파이썬 소스 코드를 조립하는 라텍스 문서에서 작업 중입니다. 사용 중입니다 pygments (온라인 데모가 아닌 Python 모듈) 라텍스 에서이 파이썬을 캡슐화하려면 긴 개별 라인의 경우를 제외하고는 잘 작동합니다. 나는 이것이 나에게 그렇게 우아한 솔루션처럼 보이지 않는다는 점을 제외하고는이 라인을 수동으로 포장 할 수 있으며, 반복적 인 작업보다 미친 자동화 된 솔루션에 대한 수수께끼의 시간을 선호합니다.

내가 원하는 것은 기능을 유지하면서 선을 특정 최대 문자 길이로 랩핑하기 위해 Python 소스 코드를 처리하는 방법입니다. 나는 약간의 파이썬과 놀이를했고 내가 가장 가까운 것은 삽입하는 것입니다. \\\n 최대 선 길이 이전의 마지막 공백에서 - 물론, 문자열과 주석으로 끝나면 상황이 잘못됩니다. 솔직히 말해서, 나는이 문제에 어떻게 접근 해야할지 잘 모르겠습니다.

따라서 라인이 특정 길이를 초과 할 수 있도록 소스 코드를 처리 할 수있는 모듈이나 도구를 알고 있습니까?

도움이 되었습니까?

해결책

현재 접근 방식을 약간 연장 할 수 있지만 토큰 화 표준 라이브러리의 모듈을 위해 라인을 깨뜨릴 위치를 결정합니다. 이렇게하면 공백 구분 된 단어가 아닌 소스 코드의 실제 토큰 (댓글, 문자열 등)을 볼 수 있습니다.

다음은 Tokenize가 무엇을 할 수 있는지에 대한 짧은 예입니다.

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

다른 팁

나는 그것을 사용한다 listings 소스 코드를 삽입하는 라텍스 패키지; 구문 하이라이트, Linebreaks et al.

다음을 서문에 넣으십시오.

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

패키지에는 전체 파일을 포함하여 인라인 코드의 후크가 있으며 그림으로 표시합니다.

NetBeans와 같은 편집자에서 Reformat 도구를 확인합니다.

Java를 개혁하면 주석 내부와 외부의 선 길이를 올바르게 수정합니다. 동일한 알고리즘이 Python에 적용되면 작동합니다.

Java의 경우 랩핑 너비와 다른 여러 매개 변수를 설정할 수 있습니다. 그것이 기본이거나 플러그인으로 존재하지 않으면 놀랄 것입니다.

설명에서 확실히 말할 수는 없지만 시도해 볼 가치가 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top