Список исходного кода, похожий на книги прагматичных программистов с LaTeX? - PullRequest
10 голосов
/ 17 июля 2010

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

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

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

1 Ответ

18 голосов
/ 17 июля 2010

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

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

Листинг, набранный в 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\lst@SkipOrPrintLabel{%
    \ifnum\lst@skipnumbers=\z@
        \global\advance\lst@skipnumbers-\lst@stepnumber\relax
        \lst@PlaceNumber
        \lst@numberfirstlinefalse
    \else
        \lst@ifnumberfirstline
            {\def\thelstnumber{Line \@arabic\c@lstnumber}\lst@PlaceNumber}%
            \lst@numberfirstlinefalse
        \else
            {\def\thelstnumber{-}\lst@PlaceNumber}%
        \fi
    \fi
    \global\advance\lst@skipnumbers\@ne}%
\def\lst@maketitle#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.

...