2010-07-17 8 views
10

Quando ho letto i libri di Pragmatic Bookshelf, ha il seguente formato:Codice sorgente che elenca qualcosa come i libri pragmatici del programmatore con LaTeX?

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

  • Come posso farlo con LaTeX? Numeri di linea sul lato sinistro, codice sorgente colorazione e nome sorgente in grigio.
  • Quali sono gli strumenti per l'elencazione del codice sorgente con LaTeX?
+3

@Voto per chiudere: su meta è stato determinato che le domande di LaTeX appartengono a SO. http://meta.stackexchange.com/questions/12918/can-we-ha-a-ruling-on-latex-on-stackoverflow – Thomas

+1

Anche se Stack Overflow è un posto perfetto per porre domande LaTeX al momento, c'è una proposta per configurare un sito simile appositamente per TeX/LaTeX. Per favore [vai qui e "commit"] (http://area51.stackexchange.com/proposals/2148/tex-latex-and-friends?referrer=LtGW8MKLMIWU41zfK7oIpw2) se vuoi partecipare a tale sito web. – ShreevatsaR

+1

@Thomas: intervistatore che vuole il lattice q su s.o. accetta una risposta in cui si legge che il lattice q appartiene a s.o. = "è stato determinato su meta che ..." –

risposta

18

Il pacchetto per la formattazione codice sorgente in lattice viene listings. Scopri cosa può fare nel suo manuale here.

Questo è quanto vicino sono riuscito ad ottenere:

The listing, as typeset in LaTeX http://i29.tinypic.com/wb8bdi.png

Il nome del file dalla voce è anche la destinazione del collegamento Download. Mi dispiace per la mancanza di angoli arrotondati. Quelli possono probabilmente essere fatti con TikZ.

Ecco il preambolo:

\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 

Poi, comporre una lista nel corpo con:

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

amo LaTeX.

+0

È molto bello, ma come ho aggiornato con la mia domanda. Puoi capire perché la parte relativa alla didascalia è un po 'diversa? – prosseek

+0

Spiacente, ho incollato il codice sbagliato. Dovresti usare 'title' invece di' caption'. Ho solo violato '\ lst @ maketitle', non' \ lst @ makecaption'. Modificato. – Thomas

+1

Grazie, funziona perfettamente. – prosseek

Problemi correlati