전문 서적과 같은 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.