使用 listings morecomment 选项对行末进行颜色编码

使用 listings morecomment 选项对行末进行颜色编码

我使用下面的代码来为我的 shell 语句着色:

\lstdefinestyle{sh}{
  breaklines=false,
  language=sh,
  commentstyle=\color{cyan},
  keywordstyle=\color{blue},
  stringstyle=\color{purple},
  identifierstyle=\color{black},
  morecomment=[n][\color{red}]{\ -}{\ },
}

但意想不到的事情发生了:

$ ./configure --foo
$ make

它成功地为 着色,但它也为 前面的--foo着色。我知道那是因为注释的结尾定义为,LaTeX 为 着色。$make<space>$

但我不想要这种颜色?有办法解决这种情况吗?

或者,我知道可以使用类似这样的选项:morecomment=[n][\color{red}]{\ -}{<newline>}。但我不知道在 的位置放什么<newline>

谢谢!

答案1

您没有提供完整的 MWE,我希望这个解决方案也适用于您自己的文档。

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
    basicstyle=\ttfamily,
    language=bash,
    showstringspaces=false,
    morecomment=[s][\color{red}]{\ -}{\ },
    otherkeywords={$},
}

\begin{document}
\begin{lstlisting}
$ ./configure --foo       
$ make
\end{lstlisting}
\end{document}

在此处输入图片描述

答案2

如果您不想在选项后添加额外的空格,我看到两种选择:

morecomment = [n][\color{red}]{\ -}{\^^M}

这是您的原始版本,其中^^M行尾字符作为结束分隔符。

morecomment = [l][\color{red}]{\ -}

这定义了一个新行注释,它延伸到行尾。如果您不想在选项部分嵌套突出显示,我更喜欢这个版本。

完整示例:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\lstdefinestyle{sh}{
  breaklines=false,
  language=sh,
  identifierstyle=\color{black},
%  morecomment=[n][\color{red}]{\ -}{\ },
}
\lstset{
  style=sh,
  basicstyle=\ttfamily,
  numbers=left,
  numberstyle=\color{gray}\footnotesize
}

\begin{document}
\begin{lstlisting}[morecomment={[n][\color{red}]{\ -}{\^^M}}]
$ ./configure --foo
$ make
$ ./foo -f -o blah
\end{lstlisting}

\begin{lstlisting}[morecomment={[l][\color{red}]{\ -}}]
$ ./configure --foo
$ make
$ ./foo -f -o blah
\end{lstlisting}
\end{document}

输出

在此处输入图片描述

相关内容