清單包可以自動縮排原始碼嗎?

清單包可以自動縮排原始碼嗎?

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}

相關內容