显示规则下列表的语言名称

显示规则下列表的语言名称

我正在一个文档中编写不同语言的代码。因此,如果可以在列表规则下显示语言名称,那就太好了。

这是我的代码

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor}

\lstset{
%   backgroundcolor=\color{},
    commentstyle=\color{green},
    keywordstyle=\color{blue},
    stringstyle=\color{black!50!green},
    %        identifierstyle=\color{red},
    numbers=left,
    captionpos=t,
    showstringspaces=false,
    tabsize=2,
    frame=b,
    breaklines=true,
    xleftmargin=17pt,
    framexleftmargin=17pt,
}

\begin{document}


    Much text
    \begin{lstlisting}[language=C++]
#inlcude <iostream.h>

int end = 5;

for(int i = 0; i < end; i++)
{
    std::cout << "Hello world!";
}
    \end{lstlisting}

%This should happen automaticly
%----------------------------------------------------

 \begin{flushright}
    c++
 \end{flushright}

%----------------------------------------------------

\end{document}

答案1

使用该包,etoolbox您可以挂接到lstlisting环境中,将语言选项存储在宏中。然后,您可以在环境后添加代码,以flushright使用该语言显示环境。

梅威瑟:

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor}
\usepackage{etoolbox}

\makeatletter
\AtEndEnvironment{lstlisting}{\xdef\xlang{\lst@language}}
\AfterEndEnvironment{lstlisting}{\begin{flushright}\xlang\end{flushright}}
\makeatother

\lstset{
%   backgroundcolor=\color{},
    commentstyle=\color{green},
    keywordstyle=\color{blue},
    stringstyle=\color{black!50!green},
    %        identifierstyle=\color{red},
    numbers=left,
    captionpos=t,
    showstringspaces=false,
    tabsize=2,
    frame=b,
    breaklines=true,
    xleftmargin=17pt,
    framexleftmargin=17pt,
}

\begin{document}


    Much text
    \begin{lstlisting}[language=C++]
#include <iostream.h>

int end = 5;

for(int i = 0; i < end; i++)
{
    std::cout << "Hello world!";
}
    \end{lstlisting}

\begin{lstlisting}[language=bash]
echo "Hello world!"
\end{lstlisting}

\end{document}

结果:

在此处输入图片描述


对于使用 定义的环境,\lstnewenvironment想法是一样的。语法实际上更简单,因为\lstnewenvironment允许您在第三个参数中定义环境末尾发生的事情,因此您可以将语言名称放在那里,而不是使用\AtEndEnvironmentand 。请注意,您确实\AfterEndEnvironment需要\makeatletterand ,因为包含一个符号。\makeatother\lstnewenvironment\lst@language@

pascalx相关片段(使用清单手册中的示例环境):

\makeatletter
\lstnewenvironment{pascalx}[1][]
{\lstset{language=pascal,numbers=left,numberstyle=\tiny,#1}}
{\begin{flushright}\lst@language\end{flushright}}
\makeatother

相关内容