listing 包可以自动缩进源代码吗?

listing 包可以自动缩进源代码吗?

listings包会自动突出显示源代码中的关键字,使其看起来很漂亮。是否可以自动缩进程序?例如,在 中listings,如果输入以下代码,

#include<stdio.h>
void main()
{
printf("\n Hello World");
}

输出应该是

#include<stdio.h>

void main()
{
    printf("\n Hello World");
}

可以listings这样做吗?如果可以,我应该如何配置它?

答案1

listings包提供了该功能;请参阅手册的第 5.6 节。确保formats已加载该方面,这可以通过将其formats作为包选项传递给来完成listings

\usepackage[formats]{listings}

或者使用\lstloadaspects加载listings包,

\usepackage{listings}
...
\lstloadaspects{formats}

然后,使用\lstdefineformat宏定义“格式”,即listings遇到某些字符时应执行的操作的指令。下面显示的格式定义直接取自手册。

请注意,此功能仍处于实验阶段;根据手册,

自动源代码格式化远非完美。首先,没有关于源代码应该如何格式化的通用规则。因此,“格式定义”必须灵活。这种灵活性需要复杂的界面、强大的“格式定义”解析器以及幕后的大量代码行。目前,格式定义不够灵活(可能不是定义而是结果)。

输出

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

相关内容