为代码片段定义多种语言

为代码片段定义多种语言

查阅此链接后:https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings为了编写一些代码,我得出了以下结论:

\lstset{ 
language=C, 
backgroundcolor=\color{highlight}, 
blah, blah, blah
}

\newcommand{\insertcode}[2]{\begin{itemize}\item[]\lstinputlisting[caption=#2,label=#1]{#1}\end{itemize}} 

最后,我没有使用newcommand,而是使用了,\lstinputlisting{my_file.c}而且效果很好。

(上述文件包含在main.tex文件中)

现在我想添加第二种语言,可以这样吗

\lstset{ 
language=python, 
backgroundcolor=\color{highlight}, 
blah, blah, blah
}

是否应该将其包含在不同的文件中?我是否应该在同一个文件中创建一个新命令?如果是,那会是什么?无论哪种情况,有人可以提供结构示例吗newcommand

任何想法都将受到赞赏。

答案1

\lstset如果所有代码片段的基本格式都相同,则无需为每种语言设置单独的命令。

用于\lstset设置代码格式的基本参数,然后在您的\lstinputlisting命令中只需将语言作为参数传递即可:

\lstinputlisting[language=C]{file.c}
\lstinputlisting[language=python]{file.py}

如果您确实希望为不同的语言设置不同的样式,可以使用命令来实现\lstdefinestyle。以下是为 LaTeX 和 Ruby 使用的不同样式的示例:

\documentclass{article}
\begin{filecontents}{hello.rb}
class Hello
   def initialize(name)
      @name = name.capitalize
   end
   def sayHi
      puts "Hello #{@name}!"
   end
end

hello = Hello.new("world")
hello.sayHi
\end{filecontents}
\begin{filecontents*}{hello.tex}
\documentclass{article}
\begin{document}
Hello World!
\end{document}
\end{filecontents*}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
    basicstyle=\ttfamily\small,
    commentstyle=\itshape\ttfamily\small,
    showspaces=false,
    showstringspaces=false,
    breaklines=true,
    breakautoindent=true,
    captionpos=t
}
\lstdefinestyle{TeX}{language=[LaTeX]TeX, frame=none,texcsstyle=*\color{blue}}
\lstdefinestyle{ruby}{language=Ruby, frame=leftline,keywordstyle=\color{red},numbers=left}
\begin{document}
\section{Sample LaTeX document}
\lstinputlisting[style=TeX]{hello.tex}

\section{Sample Ruby document}
\lstinputlisting[style=ruby]{hello.rb}
\end{document}

代码输出

相关内容