这是我的代码:
\documentclass{article}
\usepackage{listings}
\usepackage{textcomp}
\usepackage{xcolor}
\lstdefinestyle{style1}{
basicstyle=\ttfamily,
columns=fullflexible,
keepspaces=true,
upquote=true,
}
\lstdefinestyle{style2}{
showstringspaces=false,
commentstyle=\color{olive},
keywordstyle=\color{blue},
identifierstyle=\color{violet},
stringstyle=\color{purple},
}
\lstdefinestyle{style3}{
language=c,
directivestyle=\color{teal},
}
\lstdefinestyle{combined}{
style=style1,
style=style2,
style=style3,
}
\lstnewenvironment{code}{
\lstset{
style=combined,
}
}{}
\begin{document}
\begin{code}
/* hello, world program */
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
\end{code}
\end{document}
这具有预期的输出:
我担心这个代码:
\lstdefinestyle{combined}{
style=style1,
style=style2,
style=style3,
}
style
在同一个命令中三次使用该属性是否合法\lstdefinestyle
?这可行,但合法吗?我找不到任何提及它的地方http://texdoc.net/texmf-dist/doc/latex/listings/listings.pdf. 这个用法有没有什么好的参考?
答案1
listings
嗯,您可以在第三章的文档中找到:
您可以在那里找到(参见图中的红色箭头):Moreover it is possible to activate other styles.
对我来说,这意味着你可以调用几种风格,但当然存在一个逻辑限制:如果你以两种风格(例如不同的语言)调用,会发生什么?
请参阅以下内容:
\documentclass{article}
\usepackage{listings}
\usepackage{textcomp}
\usepackage{xcolor}
\lstdefinestyle{test1}{%
basicstyle=\ttfamily,
columns=fullflexible,
keepspaces=true,
upquote=true,
language=c, % <=====================================================
commentstyle=\color{olive},
}
\lstdefinestyle{test2}{%
showstringspaces=false,
keywordstyle=\color{blue},
identifierstyle=\color{violet},
stringstyle=\color{purple},
language=TeX, % <===================================================
}
\lstdefinestyle{combined}{%
style=test1,
style=test2
}
\lstnewenvironment{code}{%
\lstset{%
style=combined,
}
}{}
\begin{document}
First style:
\begin{lstlisting}[style=test1]
/* hello, world program */
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
\end{lstlisting}
Second style:
\begin{lstlisting}[style=test2]
\usepackage{listings}
\usepackage{textcomp}
\usepackage{xcolor}
\lstdefinestyle{test1}{%
basicstyle=\ttfamily,
columns=fullflexible,
keepspaces=true,
upquote=true,
language=c,
commentstyle=\color{olive},
}
\end{lstlisting}
All styles combined:
\begin{code}
/* hello, world program */
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
\end{code}
\end{document}
及其结果:
正如您所见,最新的定义调用获胜:language=TeX
覆盖了第一个集合language=c
。
因此,为了确保获得想要的结果,我建议为不同的列表创建特殊样式。这样,您就可以最好地控制所使用的样式,并确保它只使用正确的定义...