您能在不改变全局 lstset 的情况下改变 lstinline 吗?

您能在不改变全局 lstset 的情况下改变 lstinline 吗?

假设我希望能够写:

\inline{some code or keyword}并将其与段落文本的其余部分区分开来,我这样做是这样的:

\def\inline{\lstinline[basicstyle=\ttfamily]}

但是,如果您有一个自定义\lstset设置,例如keywordstyle,这也将用于内联!有没有办法删除它?是否可以使用类似的东西\lstnewenvironment来实现它?

答案1

您可以keywordstyle根据具体情况进行覆盖\lstinline

\documentclass{article}
\usepackage{listings,xcolor}
\lstset{keywordstyle=\sffamily\color{red},language=C}
\def\inline{\lstinline[basicstyle=\ttfamily,keywordstyle={}]}

\begin{document}
Compare \lstinline|int a=3;| with red sans-serif keywords to
\inline{int a=3;} where keywords inherit from basicstyle.
\end{document}

在此处输入图片描述

答案2

另一种选择是使用 来\lst@ifdisplaystyle\ ... \fi定义不同keywordstylelstinlinelstlisting

\documentclass{article}
\usepackage{listings,xcolor}
\makeatletter
\lstset{
    language=C,
    basicstyle=\ttfamily,
    keywordstyle=\lst@ifdisplaystyle\color{blue}\fi,
    commentstyle=\color{gray}
}
\makeatother

\begin{document}
\begin{lstlisting}
int a=3; // blue keyword in a lstlisting evironment
\end{lstlisting}

Inline listings are still black: \lstinline{int a=3;}.

\end{document}

在此处输入图片描述

相关内容