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