根据代码类型为列表代码(lstinputlisting)提供多个标题名称

根据代码类型为列表代码(lstinputlisting)提供多个标题名称

在我的文档中我使用了:

\renewcommand\lstlistingname{Algorithm}
\renewcommand\lstlistlistingname{Algorithms} 

重命名我的lstlistings标题。

问题是,现在我想添加不同类型的代码,但lstinputlisting我希望它下面有另一个标题。有没有办法定义一个新listings环境并再次将上述命令应用于它?

例如,理想情况下使用两个新命令\c_lstinputlisting{testc.c}\cpp_lstinputlisting{testc.cpp}并将给出两个不同的标题名称,如

C 代码 1.x

C++ 代码 1.x

如果我不清楚,我说的不是标题本身,而是标题前面的内容,即标题名称的通用名称。如果不进行编辑,则为默认

清单 1.x

答案1

您可以定义命令,以便它们本地改变所涉及的控制序列的含义:

\documentclass{book}
\usepackage{listings}
\lstset{numberbychapter}

\makeatletter
\newcommand{\cinputlisting}[2][]{%
  \begingroup\let\c@lstlisting\c@clisting
  \renewcommand\lstlistingname{C file}%
  \lstinputlisting[
    language=C,
    % <other specific options>
    #1]{#2}\endgroup}

\newcommand{\cppinputlisting}[2][]{%
  \begingroup\let\c@lstlisting\c@cpplisting
  \renewcommand\lstlistingname{C++ file}%
  \lstinputlisting[
    language=C++,
    % <other specific options>
    #1]{#2}\endgroup}
\makeatother

\newcounter{clisting}[chapter]
\newcounter{cpplisting}[chapter]

\begin{document}
\mainmatter
\chapter{One}
\cinputlisting[caption=something]{test.c}

\cppinputlisting[caption=whatever]{test.cpp}
\end{document}

相关内容