O listings
pacote destaca automaticamente palavras-chave no código-fonte e faz com que tenha uma boa aparência. É possível recuar automaticamente o programa? Por exemplo, em listings
, se o código a seguir for digitado,
#include<stdio.h>
void main()
{
printf("\n Hello World");
}
a saída deve ser
#include<stdio.h>
void main()
{
printf("\n Hello World");
}
Posso listings
fazer isso e, em caso afirmativo, como devo configurá-lo?
Responder1
O listings
pacote fornece essa funcionalidade; consulte a subseção 5.6 do manual. Certifique-se de que o formats
aspecto esteja carregado, o que pode ser feito passando formats
como uma opção de pacote para listings
,
\usepackage[formats]{listings}
ou usando a \lstloadaspects
macrodepoiscarregando o listings
pacote,
\usepackage{listings}
...
\lstloadaspects{formats}
Em seguida, use a \lstdefineformat
macro para definir um "formato", ou seja, instruções sobre o que listings
deve ser feito ao encontrar determinados caracteres. A definição de formato mostrada abaixo foi retirada diretamente do manual.
Esteja ciente de que esse recurso permanece experimental; de acordo com o manual,
A formatação automática do código-fonte está longe de ser boa. Em primeiro lugar, não existem regras gerais sobre como o código-fonte deve ser formatado. Portanto, as 'definições de formato' devem ser flexíveis. Essa flexibilidade requer uma interface complexa, um poderoso analisador de 'definição de formato' e muitas linhas de código nos bastidores. Atualmente, as definições de formato não são flexíveis o suficiente (possivelmente não as definições, mas os 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}