전문 서적과 같은 LaTeX 소스 코드 목록


329

라텍스 소스 코드 목록은 스프링 프레임 워크와 같은 알려진 책과 같은 출력물을 어떻게 생성해야합니까? 라텍스 리스팅 패키지를 사용해 보았지만 아래처럼 멋진 것을 만들 수 없었습니다. 나는을 주로 (매닝에서 아래의 예제처럼 생산 뭔가에 서식 지침에 관심이 있어요 그래서 샘플 장 에 대한 조치 봄 ) :

매닝의 봄 행동에서

편집 특히 Tormod Fjeldskår 의 도움으로 원하는 모양을 만드는 전체 스 니펫이 있습니다.

\usepackage{listings}
\usepackage{courier}
\lstset{
    basicstyle=\footnotesize\ttfamily, % Default font
    % numbers=left,              % Location of line numbers
    numberstyle=\tiny,          % Style of line numbers
    % stepnumber=2,              % Margin between line numbers
    numbersep=5pt,              % Margin between line numbers and text
    tabsize=2,                  % Size of tabs
    extendedchars=true,
    breaklines=true,            % Lines will be wrapped
    keywordstyle=\color{red},
    frame=b,
    % keywordstyle=[1]\textbf,
    % keywordstyle=[2]\textbf,
    % keywordstyle=[3]\textbf,
    % keywordstyle=[4]\textbf,   \sqrt{\sqrt{}}
    stringstyle=\color{white}\ttfamily, % Color of strings
    showspaces=false,
    showtabs=false,
    xleftmargin=17pt,
    framexleftmargin=17pt,
    framexrightmargin=5pt,
    framexbottommargin=4pt,
    % backgroundcolor=\color{lightgray},
    showstringspaces=false
}
\lstloadlanguages{ % Check documentation for further languages ...
     % [Visual]Basic,
     % Pascal,
     % C,
     % C++,
     % XML,
     % HTML,
     Java
}
% \DeclareCaptionFont{blue}{\color{blue}} 

% \captionsetup[lstlisting]{singlelinecheck=false, labelfont={blue}, textfont={blue}}
\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox[cmyk]{0.43, 0.35, 0.35,0.01}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}

문서에서 이것을 사용하십시오 :

\lstinputlisting[label=samplecode, caption=A sample]{sourceCode/HelloWorld.java}

더 정확하게 작성하십시오. 나에게 게시 한 목록은“전문 서적과 비슷한 모양”및“좋아 보이는 모양”과 같이 게시 한 목록입니다.
— Bastien Léonard

2
보관하려는 결과로 스크린 샷 형식으로 게시 된 샘플을 사용하십시오.
— Mork0075

8
완벽을 기하기 위해 게시 한 텍스에 \ usepackage {color}를 추가 할 수 있습니다. 내가 빠진 것을 알기 전에 잠시 나에게 데려 갔다.
— Robert Massaioli 09 년

1
훌륭한 일! 그래도 \ usepackage {caption} 및 \ usepackage {graphics}를 추가해야했고 작은 따옴표를 변환하는 것 같습니다.
— hakunin

안녕 mork 소스 파일을 어디에 두어야합니까? 귀하의 예에서 Hello.java
— RoflcoptrException

답변:


186

당신이 정말로 원하는 것은 캡션의 모양을 사용자 정의하는 것 같습니다. 이것은 caption패키지를 사용하여 가장 쉽게 수행 됩니다. 이 패키지를 사용하는 방법에 대한 지침 은 설명서 (PDF)를 참조하십시오 . 설명서의 4 장에 설명 된대로 사용자 정의 캡션 형식을 만들어야 할 수도 있습니다.

편집 : MikTex로 테스트 :

\documentclass{report}

\usepackage{color}
\usepackage{xcolor}
\usepackage{listings}

\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}

% This concludes the preamble

\begin{document}

\begin{lstlisting}[label=some-code,caption=Some Code]
public void here() {
    goes().the().code()
}
\end{lstlisting}

\end{document}

결과:

시사


1
\ lstinputlisting 섹션의 항목 (myCaption과 같은 것)에 대해서만 캡션 형식을 재정의하고 싶습니다. 그 방법에 대한 힌트가 있습니까?
— Mork0075

1
/ captionsetup [lstlisting] {your options} 시도
— Tormod Fjeldskår 2009

이것은 잘 작동합니다, 감사합니다. 캡션 뒤에 회색 배경을 구현하는 방법에 대한 아이디어가 있습니까 (초기 게시물 샘플에서와 같이)? 캔 트는 문서에서 무엇이든 찾을 수 있습니다.
— Mork0075 2009

\ colorbox {gray} {\ parbox {\ textwidth} {\ textcolor {white} {text goes here}}}이 (가) 초기 게시물 샘플 근처에 있다고 생각합니다.
— Tormod Fjeldskår 2009

2
이것은 멋지지만 내 캡션 상자가 들여 쓰기됩니다 (텍스트가 아니라 상자 자체). 목록이 들여 쓰기되지 않았기 때문에 이유를 모르겠습니다.
— Johan

49

listings패키지에 만족 합니다 :

리스팅 예제

구성 방법은 다음과 같습니다.

\lstset{
language=C,
basicstyle=\small\sffamily,
numbers=left,
numberstyle=\tiny,
frame=tb,
columns=fullflexible,
showstringspaces=false
}

나는 이것을 다음과 같이 사용한다 :

\begin{lstlisting}[caption=Caption example.,
  label=a_label,
  float=t]
// Insert the code here
\end{lstlisting}

1
@ lamba : 올바르게 기억하면 Latex에게 페이지 상단에 배치하도록 지시합니다.
— Bastien Léonard

7
비례 글꼴로 된 목록은 엄청나게 추악합니다. (또한, 문화적인 이유로 일부 (적어도 많은 일본인, 아마도 다른 아시아 인) 사람들에게는 읽기가 어렵습니다.)
— mirabilos

1
@ mirabilos : 예, 나중에 변경했다고 생각합니다. 이 목록에서는 괜찮아 보였지만 들여 쓰기 / 중첩이 많은 다른 사람에게는 전혀 보이지 않았습니다.
— Bastien Léonard

32

그리고 당신이 무엇이든간에 고정 너비 글꼴을 사용하도록 목록 패키지를 구성하십시오 (예 : 문서에서 옵션을 찾을 수 있습니다). 기본 설정은 그림에서 다른 답변에서 볼 수 있듯이 그리드에서 비례 글꼴 유형 세트를 사용합니다. 즉 IMHO는 매우 추악하고 읽을 수 없습니다. 비례 글꼴로 일부 코드 조판을 읽어야 할 때 개인적으로 매우 짜증이납니다.

다음과 같이 고정 너비 글꼴을 설정하십시오.

\lstset{basicstyle=\ttfamily}

3
필자는 위에서 게시 한 예제와 같이 columns = fullflexible with basicstyle = \ small \ sffamily를 개인적으로 사용합니다. 문자가 세로로 정렬되어 있지 않지만 \ ttfamily보다 더 좋아 보인다고 생각합니다. 내가 못생긴 위에 게시 한 샘플을 찾습니까?
— Bastien Léonard

귀하의 특정 예는 괜찮아 보입니다. 그러나 적절한 들여 쓰기 (열 정렬)가 복합 문장 ({} 블록)의 범위를 보는 데 큰 도움 이되는 중첩 복합 문장으로 싫어합니다 .
— zvrba 2009

나는 같은 것을 생각하고 있었지만 지금까지 모든 리스팅이 좋아 보였다.
— Bastien Léonard

좋아, 당신은 저를 설득했습니다, 한번 설정을 시도합니다 :-)
— zvrba

1
중첩 된 복합 문장은 빨간 청어입니다. 들여 쓰기는 모두 공백으로 구성되므로 다른 문자의 너비에 관계없이 들여 쓰기가 정렬됩니다.
— jwg

27

아무도 Minted 패키지를 언급하지 않은 이유가 궁금 합니다. LaTeX 리스팅 패키지보다 구문 강조가 훨씬 우수합니다. 피그먼트를 사용 합니다 .

$ pip install Pygments

LaTeX의 예 :

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{minted}

\begin{document}
\begin{minted}{python}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable

    #compute the bitwise xor matrix
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{minted}
\end{document}

결과 :

여기에 이미지 설명을 입력하십시오

-shell-escapepdflatex 명령과 함께 플래그를 사용해야합니다 .

자세한 정보 : https://www.sharelatex.com/learn/Code_Highlighting_with_minted


2
+1. LaTeX에서 소스 코드를 조판하기위한 패키지는 Minted입니다. 사용하기 쉽고, 기능이 풍부하고, 잘 문서화되어있을뿐만 아니라 소스 코드의 유니 코드 문자 (와는 달리 listings) 에는 문제가 없습니다 .
— ScumCoder

이럴 수가! 훨씬 낫다! 제안 해 주셔서 감사합니다.
— Dmitry Zotikov

21

listings패키지를 사용해보십시오 . 다음은 컬러 자바 목록을 만들기 위해 얼마 전에 사용했던 예입니다.

\usepackage{listings}

[...]

\lstset{language=Java,captionpos=b,tabsize=3,frame=lines,keywordstyle=\color{blue},commentstyle=\color{darkgreen},stringstyle=\color{red},numbers=left,numberstyle=\tiny,numbersep=5pt,breaklines=true,showstringspaces=false,basicstyle=\footnotesize,emph={label}}

[...]

\begin{lstlisting}
public void here() {
    goes().the().code()
}

[...]

\end{lstlisting}

당신은 그것을 사용자 정의 할 수 있습니다. 리스팅 패키지에 대한 몇 가지 참조가 있습니다. 그냥 구글.


감사. 여전히 목록 패키지를 알고 있지만 샘플처럼 형식을 지정할 수 없습니다. 이것이 실제 질문입니다.
— Mork0075

9

algorithms패키지, 특히 algorithm환경을 살펴보십시오 .


1
감사. 이 패키지는보다 이론적 인 알고리즘 토론에서 매우 강력한 것으로 보입니다. 많은 수학 책에서 알 수 있습니다. 그러나 나는 이것을 많이 강조하지 않을 것입니다 (필요하다면 전제 조건), 위와 같은 형식을 원합니다.
— Mork0075

4
나는 단지 algorithm환경 에 대해서만 이야기하고있었습니다 algorithmic. algorithm떠 다니는 컨테이너입니다. listing언급 된 스레드를 포함 하여 원하는 것을 넣을 수 있습니다 .
— avakar

8

새 글꼴을 선택하는 등 몇 가지 다른 작업을 수행 할 수 있습니다.

\documentclass[10pt,a4paper]{article}
% ... lots of packages e.g. babel, microtype, fontenc, inputenc &c.
\usepackage{color}    % Leave this out if you care about B/W printing, obviously.
\usepackage{upquote}  % Turns curly quotes in verbatim text into straight quotes. 
                      % People who have to copy/paste code from the PDF output 
                      % will love you for this. Or perhaps more accurately: 
                      % They will not hate you/hate you less.
\usepackage{beramono} % Or some other package that provides a fixed width font. q.v.
                      % http://www.tug.dk/FontCatalogue/typewriterfonts.html
\usepackage{listings} 
\lstset {                 % A rudimentary config that shows off some features.
    language=Java,
    basicstyle=\ttfamily, % Without beramono, we'd get cmtt, the teletype font.
    commentstyle=\textit, % cmtt doesn't do italics. It might do slanted text though.
    \keywordstyle=        % Nor does cmtt do bold text.
        \color{blue}\bfseries,
    \tabsize=4            % Or whatever you use in your editor, I suppose.
}
\begin{document} 
\begin{lstlisting}
public final int ourAnswer() { return 42; /* Our final answer */ }
\end{lstlisting} 
\end{document}

2
\ keywordstyle 및 \ tabsize에서 백 슬래시는이 방식으로 작동하지 않으므로 제거해야한다고 생각합니다. 그럼에도 불구하고 매우 도움이되었습니다!
— Xiphias

2

R 코드의 경우

\usepackage{listings}
\lstset{
language=R,
basicstyle=\scriptsize\ttfamily,
commentstyle=\ttfamily\color{gray},
numbers=left,
numberstyle=\ttfamily\color{gray}\footnotesize,
stepnumber=1,
numbersep=5pt,
backgroundcolor=\color{white},
showspaces=false,
showstringspaces=false,
showtabs=false,
frame=single,
tabsize=2,
captionpos=b,
breaklines=true,
breakatwhitespace=false,
title=\lstname,
escapeinside={},
keywordstyle={},
morekeywords={}
}

그리고 이것은 정확히 이렇게 보입니다

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.