El listings
paquete resalta automáticamente las palabras clave en el código fuente y lo hace lucir agradable. ¿Es posible sangrar automáticamente el programa? Por ejemplo, en listings
, si se escribe el siguiente código,
#include<stdio.h>
void main()
{
printf("\n Hello World");
}
la salida debe ser
#include<stdio.h>
void main()
{
printf("\n Hello World");
}
¿Puedo listings
hacer eso y, de ser así, cómo debo configurarlo?
Respuesta1
El listings
paquete proporciona esa funcionalidad; consulte la subsección 5.6 del manual. Asegúrese de que el formats
aspecto esté cargado, lo que se puede hacer pasando formats
como opción de paquete a listings
,
\usepackage[formats]{listings}
o usando la \lstloadaspects
macrodespuéscargando el listings
paquete,
\usepackage{listings}
...
\lstloadaspects{formats}
Luego, use la \lstdefineformat
macro para definir un "formato", es decir, instrucciones sobre lo que listings
debe hacer al encontrar ciertos caracteres. La definición de formato que se muestra a continuación está tomada directamente del manual.
Tenga en cuenta que esta característica sigue siendo experimental; según el manual,
El formateo automático del código fuente está lejos de ser bueno. En primer lugar, no existen reglas generales sobre cómo se debe formatear el código fuente. Por tanto, las "definiciones de formato" deben ser flexibles. Esta flexibilidad requiere una interfaz compleja, un potente analizador de 'definición de formato' y muchas líneas de código detrás de escena. Actualmente, las definiciones de formato no son lo suficientemente flexibles (posiblemente no las definiciones sino los resultados).
\documentclass{article}
\usepackage[formats]{listings}
\lstdefineformat{C}
{
\{=\newline\string\newline\indent,%
\}=\newline\noindent\string\newline,%
;=[\ ]\string\space,%
}
\lstset{basicstyle=\ttfamily}
\usepackage{filecontents}
\begin{filecontents*}{sample.c}
#include<stdio.h>
void main()
{
printf("\n Hello World");
}
\end{filecontents*}
\begin{document}
\section*{``Raw'' listing}
\lstinputlisting{sample.c}
\section*{With automatic formatting}
\lstinputlisting[format=C]{sample.c}
\end{document}