2010-07-17 9 views
10

Cuando leí los libros pragmático de estantería, que tiene el siguiente formato:¿Código fuente que enumera algo así como los libros de programadores pragmáticos con LaTeX?

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

  • ¿Cómo se puede hacer eso con LaTeX? Los números de línea en el lado izquierdo, colorear el código fuente y el nombre de fuente en gris.
  • ¿Cuáles son las herramientas para el listado del código fuente con LaTeX?
+3

@Votación para cerrar: En meta, se determinó que las preguntas de LaTeX pertenecen a SO. http://meta.stackexchange.com/questions/12918/can-we-have-a-ruling-on-latex-on-stackoverflow – Thomas

+1

Aunque Stack Overflow es un lugar perfectamente bueno para hacer preguntas a LaTeX actualmente, hay una propuesta para configurar un sitio similar específicamente para TeX/LaTeX. Por favor [vaya aquí y "comprométase"] (http://area51.stackexchange.com/proposals/2148/tex-latex-and-friends?referrer=LtGW8MKLMIWU41zfK7oIpw2) si participa en dicho sitio web. – ShreevatsaR

+1

@Thomas: preguntador que quiere látex q está en el s.o. acepta una respuesta que opina que los látex q pertenecen en el s.o. = "se determinó en meta que ..." –

Respuesta

18

El paquete para el formato de código fuente en el látex es listings. Vea lo que puede hacer en su manual here.

Esto es lo cerca que he conseguido:

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

El nombre de archivo del subtítulo es también el destino del enlace Download. Perdón por la falta de curvas redondas. Esos probablemente se pueden hacer con TikZ.

Aquí es el preámbulo:

\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 

Entonces, componer una lista en el cuerpo 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} 

Me encanta LaTeX.

+0

Es genial, pero como me he actualizado con mi pregunta. ¿Podrías ver por qué la parte del título es algo diferente? – prosseek

+0

Lo siento, pegué el código incorrecto. Deberías usar 'title' en lugar de' caption'. Solo pirateé '\ lst @ maketitle', no' \ lst @ makecaption'. Editado – Thomas

+1

Gracias, funciona perfectamente. – prosseek

Cuestiones relacionadas