Перелік вихідних кодів LaTeX, як у професійних книгах


329

Як повинен виглядати перелік вихідних кодів латексу, щоб отримати вихід, як у відомих книгах, наприклад, для Spring Framework? Я спробував із пакетом списків латексу, але не зміг створити щось таке, що виглядало б так добре, як наведене нижче. Тож мене насамперед цікавлять інструкції щодо форматування, щоб створити щось на зразок наведеного нижче зразка (від Manning's зразка розділу для Spring Action ):

З весни Меннінга в дії

EDIT За допомогою, особливо 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}

Будьте точнішими. Для мене перелік, який я розмістив, "виглядає як у професійних книгах" і "виглядає так добре", як і той, який ви розмістили.
Бастієн Леонард

2
Будь ласка, використовуйте зразок, розміщений у вигляді скріншота, як результат, який я хочу досягти.
Mork0075

8
Для повноти ви можете додати \ usepackage {color} до тексту, який ви опублікували. Взяв мене за мить, перш ніж я помітив, що вона відсутня.
Роберт Массайолі

1
Чудова робота! Мені довелося додати \ usepackage {caption} та \ usepackage {graphics}, і, здається, конвертувати окремі лапки.
хакунін

Привіт 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

Це чудово працює, дякую. У вас є ідея, як реалізувати сірий фон за підписом (як, наприклад, у моїх початкових зразках публікацій)? Не можете знайти що-небудь у документації.
Mork0075

Я думаю, що \ colorbox {grey} {\ parbox {\ textwidth} {\ textcolor {white} {текст іде тут}}} буде десь біля вашого початкового зразка публікації.
Tormod Fjeldskår

2
Це виглядає приємно, але моє поле підписів стає з відступом (не текст, саме поле). Я не знаю чому, оскільки список також не є відступними.
Йоган

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: якщо я правильно пам'ятаю, він каже Латексу розмістити його вгорі сторінки.
Бастієн Леонард

7
Урх, списки пропорційним шрифтом такі масово некрасиві. (Плюс з культурних причин їх важко читати деяким (принаймні багатьом японцям, можливо, і іншим азіатським).)
mirabilos

1
@mirabilos: так, я думаю, що це змінило пізніше. У цьому списку це виглядало нормально, але зовсім не для інших з більшою відмінністю / вкладенням.
Бастієн Леонард

32

І будь ласка, що б ви не зробили, налаштуйте пакет списків на використання шрифту фіксованої ширини (як у вашому прикладі; цей варіант ви знайдете в документації). Налаштування за замовчуванням використовує пропорційний набір шрифтів на сітці, який IMHO неймовірно некрасивий та нечитабельний, як видно з інших відповідей із зображеннями. Я особисто дуже дратує, коли я повинен прочитати якийсь набір коду пропорційним шрифтом.

Спробуйте встановити шрифт фіксованої ширини за допомогою цього:

\lstset{basicstyle=\ttfamily}

3
Я особисто використовую стовпці = fullf гибкі з basicstyle = \ small \ sffamily, як у прикладі, який я розмістив вище. Персонажі не розташовані вертикально, але я думаю, що вони виглядають краще, ніж з \ ttfamily. Чи вважаєте ви зразок, який я розмістив вище, некрасивим?
Бастієн Леонард

Ваш конкретний приклад виглядає чудово. Однак я б ненавиджу це з вкладеними складовими висловлюваннями, де правильне відступ (вирівнювання стовпців) є великою підмогою побачити ступінь складеного твердження ({} блок).
zvrba

Я думав те саме, але поки що всі мої списки виглядали добре.
Бастієн Леонард

Гаразд, ти мене переконав, я спробую твій інсталятор один раз :-)
zvrba

1
Вкладені складові заяви - це червона оселедець. Оскільки всі відступи складаються з пробілів, відступи будуть вирівнюватися незалежно від ширини інших символів.
jwg

27

Цікаво, чому ніхто не згадав про пакет " Монет" . Він має набагато краще підсвічування синтаксису, ніж пакет лістингу 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-escapeіз командою pdflatex.

Для отримання додаткової інформації: https://www.sharelatex.com/learn/Code_Highlighting_with_minted


2
+1. Карбується пакет для набору вихідного коду в LaTeX. Він не тільки простий у використанні, багатий на функції та добре задокументований, але також не має проблем із символами Unicode у вихідному коді (на відміну від цього listings).
ScumCoder

Боже мій! Набагато краще! Дуже дякую за пропозицію.
Дмитро Зотиков

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
Дякую. Цей пакет, здається, дуже сильний у більш теоретичних дискусіях про algirthm, я знаю це з багатьох математичних книг. Але я не хочу наголосити на цьому настільки сильно (попередньо, якщо, як інакше), я хотів би мати таке форматування, як вище.
Mork0075

4
Я говорив лише про algorithmнавколишнє середовище, ні algorithmic. algorithmце плаваючий контейнер, який виглядає досить приємно. Ви можете помістити все, що завгодно, навіть listingзгадану іншу тему.
авакар

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
Я вважаю, що в \ ключовому стилі та \ 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={}
}

І це виглядає саме так

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.