목록 패키지가 자동으로 소스 코드를 들여쓸 수 있나요?

목록 패키지가 자동으로 소스 코드를 들여쓸 수 있나요?

패키지 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}

관련 정보