我正在一个文档中编写不同语言的代码。因此,如果可以在列表规则下显示语言名称,那就太好了。
这是我的代码
\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
允许您在第三个参数中定义环境末尾发生的事情,因此您可以将语言名称放在那里,而不是使用\AtEndEnvironment
and 。请注意,您确实\AfterEndEnvironment
需要\makeatletter
and ,因为包含一个符号。\makeatother
\lstnewenvironment
\lst@language
@
pascalx
相关片段(使用清单手册中的示例环境):
\makeatletter
\lstnewenvironment{pascalx}[1][]
{\lstset{language=pascal,numbers=left,numberstyle=\tiny,#1}}
{\begin{flushright}\lst@language\end{flushright}}
\makeatother