Список исходного кода LaTeX, как в профессиональных книгах
Как должен выглядеть список исходного кода латекса, чтобы создать выход, как в известных книгах, например один для Spring Framework? Я пробовал с пакетом листов латекса, но не смог произвести что-то, что выглядело бы так же хорошо, как показано ниже. Поэтому я очень заинтересован в инструкциях по форматированию для создания чего-то вроде примера ниже (из Manning глава примера для Spring в действии):
![From Manning's Spring in Action]()
ИЗМЕНИТЬ
С помощью специально Tormod Fjeldskår здесь полный фрагмент, чтобы произвести желаемый вид:
\usepackage{listings}
\usepackage{courier}
\lstset{
basicstyle=\footnotesize\ttfamily, % Standardschrift
%numbers=left, % Ort der Zeilennummern
numberstyle=\tiny, % Stil der Zeilennummern
%stepnumber=2, % Abstand zwischen den Zeilennummern
numbersep=5pt, % Abstand der Nummern zum Text
tabsize=2, % Groesse von Tabs
extendedchars=true, %
breaklines=true, % Zeilen werden Umgebrochen
keywordstyle=\color{red},
frame=b,
% keywordstyle=[1]\textbf, % Stil der Keywords
% keywordstyle=[2]\textbf, %
% keywordstyle=[3]\textbf, %
% keywordstyle=[4]\textbf, \sqrt{\sqrt{}} %
stringstyle=\color{white}\ttfamily, % Farbe der String
showspaces=false, % Leerzeichen anzeigen ?
showtabs=false, % Tabs anzeigen ?
xleftmargin=17pt,
framexleftmargin=17pt,
framexrightmargin=5pt,
framexbottommargin=4pt,
%backgroundcolor=\color{lightgray},
showstringspaces=false % Leerzeichen in Strings anzeigen ?
}
\lstloadlanguages{% Check Dokumentation 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}
Ответы
Ответ 1
Мне кажется, что вы действительно хотите, чтобы настроить внешний вид подписей. Это проще всего сделать с помощью пакета 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}
Результат:
![Preview]()
Ответ 2
Я доволен пакетом listings
:
![Listing example]()
Вот как я его настраиваю:
\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}
Ответ 3
И, пожалуйста, что бы вы ни делали, настройте пакет объявлений на использование шрифта фиксированной ширины (как в вашем примере, вы найдете вариант в документации). Установка по умолчанию использует пропорциональный набор шрифтов на сетке, который является IMHO, невероятно уродливым и нечитаемым, что видно из других ответов с картинками. Я лично очень раздражен, когда мне нужно прочитать набор символов в пропорциональном шрифте.
Попробуйте установить шрифт фиксированной ширины следующим образом:
\lstset{basicstyle=\ttfamily}
Ответ 4
Попробуйте пакет 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}
Вы можете настроить это. Существует несколько ссылок на пакет объявлений. Просто зайдите в Google.
Ответ 5
Интересно, почему никто не упомянул пакет 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}
Результат:
![enter image description here]()
Вам нужно использовать флаг -shell-escape
с командой pdflatex.
Для получения дополнительной информации: https://www.sharelatex.com/learn/Code_Highlighting_with_minted
Ответ 6
Посмотрите algorithms
, особенно в среде algorithm
.
Ответ 7
Есть несколько других вещей, которые вы можете сделать, например, выбор новых шрифтов:
\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}
Ответ 8
Для кода 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={}
}
И это выглядит точно так же
![введите описание изображения здесь]()