适用于多种编程语言的源代码着色

适用于多种编程语言的源代码着色

我想为我的源代码着色。我按照这个并且一切正常。

我的问题是,我使用了 4 种不同的编程语言:我必须定义\lstset{} 标签language针对每种语言分别声明,或者是否有办法在其领域内声明多种编程语言?

\lstset{ %
  %...
  language=java,              % this works only for one programming language. 
                              % How to declare more than one? 
                              % Or have I to declare \lstset{} for each PL? 
  %...
}

答案1

理想情况下,应该listings为每种语言定义一个新环境。也就是说,为 创建一个列表,为 创建一个列表,python为 创建一个列表,为 创建一个列表,为 创建一个列表,为 创建一个列表。对于每个列表,我们使用:javacphp\lstnewenvironment

\lstnewenvironment{python}
  {\lstset{language=python,...}}
  {}
\lstnewenvironment{java}
  {\lstset{language=java,...}}
  {}
\lstnewenvironment{clang}
  {\lstset{language=c,...}}
  {}
\lstnewenvironment{php}
  {\lstset{language=php,...}}
  {}

其中...表示针对所讨论语言的其他定制设置。有关此内容的更多详细信息,请参阅5.14 环境listings 文档

以上内容现在允许您使用(例如)

在此处输入图片描述

\documentclass{article}
\usepackage{listings}

\lstnewenvironment{python}
  {\lstset{language=python}}
  {}

\begin{document}

\begin{python}
print "This line will be printed."
\end{python}

\end{document}

答案2

当然也存在一个解决方案minted

因此,你可以定义不同的代码环境,这很容易minted

\usepackage{minted}
\usemintedstyle{vs}

\newminted{kotlin}{%
    breakbytoken,%
    breaklines,%
    autogobble,%
    frame=lines,%
    label=Kotlin,%
    framesep=2\fboxsep%
}

\newminted{mysql}{%
    breakbytoken,%
    breaklines,%
    autogobble,%
    label=SQL,%
}

对于每个环境,您可以定义不同的参数。

要使用您定义的环境,请使用\begin{language+'code'}

\begin{kotlincode}
        data class Customer(val name: String, val email: String, val company: String)
\end{kotlincode}

完整示例如下:

\documentclass{article}

\usepackage{minted}
\usemintedstyle{vs}

\newminted{kotlin}{%
    breakbytoken,%
    breaklines,%
    autogobble,%
    frame=lines,%
    label=Kotlin,%
    framesep=2\fboxsep%
}

\newminted{mysql}{%
    breakbytoken,%
    breaklines,%
    autogobble,%
    label=SQL,%
}

\begin{document}
    \begin{kotlincode}
            data class Customer(val name: String, val email: String, val company: String)
    \end{kotlincode}
\end{document}

相关内容