我使用下面的代码来为我的 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}
输出