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