プロの本のようなLaTeXソースコードリスト


329

Spring Frameworkの例など、既知の書籍のような出力を生成するには、latexソースコードのリストはどのように見える必要がありますか?ラテックスリストパッケージを試してみましたが、以下のような見栄えの良いものを作成できませんでした。primarely(マニングから下のサンプルのようなものを生成するためのフォーマットの指示に興味がある私は、サンプルの章のためのアクションで春を):

Manning's Spring in Actionから

編集 特にTormodFjeldskå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}

より正確にしてください。私が投稿したリストは、あなたが投稿したものと同じように、「プロの本のように見えます」と「見た目が良い」のです。
BastienLéonard09年

2
アーカイブしたい結果として、スクリーンショットの形式で投稿されたサンプルを使用してください。
Mork0075 2009

8
完全を期すために、投稿したtexに\ usepackage {color}を追加することができます。それが欠けていることに気づく前に少し時間を取りました。
Robert Massaioli、2009年

1
すごい仕事!\ usepackage {caption}と\ usepackage {graphics}を追加する必要がありましたが、単一引用符が変換されるようです。
hakunin

こんにちは、ソースファイルをどこに配置する必要がありますか?あなたの例では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 2009

1
/ captionsetup [lstlisting] {your options}を試してください
TormodFjeldskår2009

これはうまくいきます、ありがとう。キャプションの背後にある灰色の背景を実現する方法を知っていますか(私の最初の投稿サンプルのように)?ドキュメントで何かを見つけることができません。
Mork0075 2009

\ colorbox {gray} {\ parbox {\ textwidth} {\ textcolor {white} {text Goes}}}は、最初の投稿サンプルの近くになると思います。
TormodFjeldskår2009

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にそれをページの上部に配置するように指示します。
BastienLéonard2012

7
ああ、プロポーショナルフォントのリストは非常に醜いです。(さらに、文化的な理由により、一部の(少なくとも多くの日本人、おそらく他のアジア人も)人々にとっては読みにくいです。)
mirabilos

1
@mirabilos:ええ、後で変更したと思います。このリストでは問題ないように見えましたが、インデント/入れ子が多い他のリストではまったく問題ありませんでした。
BastienLéonard15年

32

そして、あなたが何をするにせよ、固定幅フォントを使用するようにリストパッケージを設定してください(例のように、オプションはドキュメントにあります)。デフォルトの設定では、グリッド上でプロポーショナルフォントタイプセットを使用します。これはIMHOであり、写真を使用した他の回答からわかるように、信じられないほど醜く、判読できません。プロポーショナルフォントでコードタイプセットを読む必要があるとき、私は個人的に非常にイライラします。

これで固定幅フォントを設定してみてください:

\lstset{basicstyle=\ttfamily}

3
上記の例のように、基本的には、columns = fullflexibleをbasicstyle = \ small \ sffamilyで使用します。文字は垂直方向に整列されていませんが、\ ttfamilyの場合よりも見栄えが良いと思います。上記の醜いサンプルを見つけましたか?
BastienLéonard09年

あなたの特定の例はうまく見えます。ただし、適切なインデント(列の配置)が複合ステートメント({}ブロック)の範囲を確認するための大きな助けとなる入れ子の複合ステートメントでは、私はそれを嫌います。
zvrba 2009

私は同じことを考えていましたが、これまでのところ、私のリストはすべて良さそうでした。
BastienLéonard09年


1
ネストされた複合ステートメントは、赤いニシンです。インデントはすべてスペースで構成されるため、他の文字の幅に関係なくインデントは整列します。
jwg 2013年

27

Mintedパッケージについて誰も触れなかったのはなぜだろう。LaTeXリストパッケージよりも構文の強調表示がはるかに優れています。Pygmentsを使用しています

$ 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。Mintedは、LaTeXでソースコードを植字するためのパッケージです。使いやすく、機能が豊富で、十分に文書化されているだけでなく、(とは異なりlistings)ソースコードのUnicode文字にも問題がありません。
ScumCoder 2016

私の良さ!良くなったね!提案ありがとうございました。
ドミトリーゾティコフ2018

21

listingsパッケージを試してみてください。これは、色付きのJavaリストを作成するために少し前に使用したものの例です。

\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環境についてだけ話していましたalgorithmicalgorithmフローティングコンテナです。listing言及したelsethread も含めて、好きなものを何でも入れることができます。
avakar 2009

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 2013年

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.