使用单个 \lstdefinestyle 命令组合多种列表样式

使用单个 \lstdefinestyle 命令组合多种列表样式

这是我的代码:

\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}

及其结果:

生成的 pdf

正如您所见,最新的定义调用获胜:language=TeX覆盖了第一个集合language=c

因此,为了确保获得想要的结果,我建议为不同的列表创建特殊样式。这样,您就可以最好地控制所使用的样式,并确保它只使用正确的定义...

相关内容