Исходный код перечисляет что-то вроде прагматичных книг программистов с LaTeX?

Когда я читаю книги Pragmatic Bookshelf, он имеет следующий формат:

http://img210.imageshack.us/img210/2965/screenshot20100717at121.png

  • Как я могу сделать это с помощью LaTeX? Номера строк с левой стороны, исходный код цвета и имя источника с серым цветом.
  • Какие инструменты для ввода исходного кода в LaTeX?

Ответ 1

Пакет для форматирования исходного кода в LaTeX listings. Посмотрите, что он может сделать в своем руководстве здесь.

Вот как мне удалось достичь:

Список, как набор в LaTeX http://i29.tinypic.com/wb8bdi.png

Имя файла из заголовка также является целью ссылки Download. Извините за отсутствие круглых углов. Вероятно, это можно сделать с помощью TikZ.

Здесь преамбула:

\usepackage{listings}
\usepackage[T1]{fontenc}
\usepackage[scaled]{beramono}
\usepackage{tgadventor}
\usepackage[usenames,dvipsnames]{color}
\usepackage[colorlinks=true]{hyperref}

\definecolor{lineno}{rgb}{0.5,0.5,0.5}
\definecolor{code}{rgb}{0,0.1,0.6}
\definecolor{keyword}{rgb}{0.5,0.1,0.1}
\definecolor{titlebox}{rgb}{0.85,0.85,0.85}
\definecolor{download}{rgb}{0.8,0.1,0.5}
\definecolor{title}{rgb}{0.4,0.4,0.4}

\lstset{
    language=Lisp,
    basicstyle=\ttfamily\small\color{code},
    showspaces=false,
    showstringspaces=false,
    numbers=left,
    firstnumber=1,
    stepnumber=5,
    numberfirstline=true,
    numberstyle=\color{lineno}\sffamily\scriptsize,
    keywordstyle=\color{keyword}\bfseries,
    stringstyle=\itshape,
    morekeywords={dosync,if},
    deletekeywords={alter}
}

\makeatletter
\gdef\[email protected]{%
    \ifnum\[email protected]=\[email protected]
        \global\advance\[email protected]\[email protected]\relax
        \[email protected]
        \[email protected]
    \else
        \[email protected]
            {\def\thelstnumber{Line \@arabic\[email protected]}\[email protected]}%
            \[email protected]
        \else
            {\def\thelstnumber{-}\[email protected]}%
        \fi
    \fi
    \global\advance\[email protected]\@ne}%
\def\[email protected]#1{
   \vskip\abovecaptionskip
   \colorbox{titlebox}{
       \scriptsize
       \color{download}\ttfamily\href{http://example.com/#1}{Download}
       \color{title}\sffamily\bfseries#1}
   \vskip\belowcaptionskip}
\makeatother

Затем наберите список в теле с помощью:

\begin{lstlisting}[title=examples/introduction.clj]
(defn hello
  "Writes hello message to *out*. Calls you by username.
  Knows if you have been here before."
  [username]
  (dosync
    (let [past-visitor (@visitors username)]
      (if past-visitor
        (str "Welcome back, " username)
        (do
          (alter visitors conj username)
          (str "Hello, " username))))))
\end{lstlisting}

Мне нравится LaTeX.