pasar - Listado de códigos fuente de LaTeX como en libros profesionales
pasar codigo de matlab a latex (8)
Eche un vistazo al paquete de algorithms
, especialmente el entorno de algorithm
.
¿Cómo debería ser un listado de código fuente de látex para producir una salida como en libros conocidos, por ejemplo, uno para Spring Framework? He intentado con el paquete de listados de látex, pero no pude producir algo que se viera tan bonito como el que se muestra a continuación. Así que estoy principalmente interesado en las instrucciones de formato para producir algo como la muestra a continuación (del capítulo de muestra de Manning para Spring in Action ):
EDITAR Con la ayuda especialmente de Tormod Fjeldskår, aquí está el fragmento completo para producir el aspecto deseado:
/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}}
Úsalo con esto en tu documento:
/lstinputlisting[label=samplecode, caption=A sample]{sourceCode/HelloWorld.java}
Estoy feliz con el paquete de listings
:
Así es como lo configuro:
/lstset{
language=C,
basicstyle=/small/sffamily,
numbers=left,
numberstyle=/tiny,
frame=tb,
columns=fullflexible,
showstringspaces=false
}
Lo uso así:
/begin{lstlisting}[caption=Caption example.,
label=a_label,
float=t]
// Insert the code here
/end{lstlisting}
Hay varias otras cosas que puedes hacer, como seleccionar nuevas fuentes:
/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}
Me parece que lo que realmente quieres es personalizar el aspecto de los subtítulos. Esto se hace más fácilmente usando el paquete de caption
. Para obtener instrucciones sobre cómo usar este paquete, consulte el manual (PDF) . Es probable que necesite crear su propio formato de título personalizado, como se describe en el capítulo 4 del manual.
Edición: Probado con 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}
Resultado:
Me pregunto por qué nadie mencionó el paquete de Minted . Tiene mucho mejor resaltado de sintaxis que el paquete de listado LaTeX. Utiliza Pygments .
$ pip install Pygments
Ejemplo en 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}
Lo que resulta en:
-shell-escape
usar la bandera -shell-escape
con el comando pdflatex.
Para obtener más información: https://www.sharelatex.com/learn/Code_Highlighting_with_minted
Para el código R utilizo
/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={}
}
Y se ve exactamente así
Prueba el paquete de listings
. Aquí hay un ejemplo de lo que usé hace un tiempo para tener una lista de Java de color:
/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}
Es posible que desee personalizar eso. Hay varias referencias del paquete de listados. Solo buscalos en google.
Y, haga lo que haga, configure el paquete de listados para usar una fuente de ancho fijo (como en su ejemplo; encontrará la opción en la documentación). La configuración predeterminada utiliza una fuente tipográfica tipográfica en una cuadrícula, que es IMHO, increíblemente fea e ilegible, como se puede ver en las otras respuestas con imágenes. Personalmente, estoy muy irritado cuando debo leer algunos tipos de código en una fuente proporcional.
Intenta establecer una fuente de ancho fijo con esto:
/lstset{basicstyle=/ttfamily}