この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}