LaTeX源代码列表,就像在专业书籍

乳胶源代码清单应该是什么样的,才能产生像已知书籍中那样的输出,例如Spring Framework的输出?我已经尝试了乳胶列表包,但不能产生一些看起来像下面一个。因此,我主要对生成如下样例(来自Manning的样章 for 春天的行动)的格式化说明感兴趣:

From Manning's Spring in Action

<强>编辑 特别是在Tormod Fjeldskar的帮助下,下面是生成所需外观的完整代码片段:

\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}
241450 次浏览

看一下algorithms包,尤其是algorithm环境。

尝试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}

你可以自定义它。清单包有几个引用。就谷歌他们。

我对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}

无论您做什么,请将清单包配置为使用固定宽度的字体(如您的示例所示;您将在文档中找到该选项)。默认设置在网格上使用比例字体排版,恕我直言,这是令人难以置信的丑陋和不可读的,从其他带有图片的答案中可以看出。当我必须以比例字体阅读一些代码排版时,我个人非常感到恼火。

尝试设置固定宽度的字体:

\lstset{basicstyle=\ttfamily}

在我看来,你真正想要的是自定义标题的外观。使用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}

结果:

预览

你还可以做一些其他的事情,比如选择新的字体:

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

我想知道为什么没有人提到铸造包。它具有比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}

结果是:

enter image description here

你需要在pdflatex命令中使用标志-shell-escape

有关更多信息:https://www.sharelatex.com/learn/Code_Highlighting_with_minted

对于我使用的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={}
}

它看起来就像这样

enter image description here