为单个列表注释分隔符(shell 转录语言样式)添加颜色?

为单个列表注释分隔符(shell 转录语言样式)添加颜色?

我一直想要一种带有列表的 shell 转录语言样式,其中 shell 提示符和实际命令被强调,而其余文本则有点“静音”。

目前我能做的最好的就是将基本样式定义为“静音”/“褪色”/“灰色”,然后将我的 shell 提示符(此处$)视为单个注释分隔符,然后将剩余的注释设置为全黑色并加粗:

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

\lstdefinelanguage{ShellTranscript}
{sensitive=false,
morecomment=[l][\color{black}\bfseries]{ \$ },
basicstyle=\ttfamily\footnotesize\color{black!70},
}

\begin{document}

Here we go:

\begin{lstlisting}[language=ShellTranscript]

user@box:~ $ ls /usr/
bin  games  include  lib  local  man  sbin  share  src
user@box:~ $ ls /var/
backups  cache  lib  local  lock  log  mail  opt  run  spool  swap  tmp
user@box:~ $ echo 'be careful of $ in there!'
be careful of $ in there!
\end{lstlisting}

\end{document}

输出如下:

输出

然而我真正想要的是:

期望输出

也就是说:仅注释分隔符(即仅提示字符$)应为红色且非粗体;之后的文本(实际命令)应为黑色和粗体;其余文本(如输出)应为静音/灰色 - 并且$在“输出文本”中不应设置样式(这可能意味着为了声明“注释”,必须检查该行是否以 开头user@box并包含$,如果包含,则将其$作为注释分隔符)。

这可以通过列表实现吗?如果可以,如何实现?

答案1

您可以改编@matexmatics 的解决方案https://tex.stackexchange.com/a/706145/36296像这样:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\usepackage[T1]{fontenc}
\usepackage{beramono}
\colorlet{dollarcol}{red}

\lstdefinelanguage{ShellTranscript}
{sensitive=false,
basicstyle=\ttfamily\footnotesize\color{black!30},
moredelim=[s][\colorlet{dollarcol}{red}]{user@box:~},
moredelim=**[il][\textcolor{dollarcol}{\$}\color{black}\bfseries\colorlet{dollarcol}{black}]{\$}
}

\begin{document}

Here we go:

\begin{lstlisting}[language=ShellTranscript]

user@box:~ $ ls /usr/
bin  games  include  lib  local  man  sbin  share  src
user@box:~ $ ls /var/
backups  cache  lib  local  lock  log  mail  opt  run  spool  swap  tmp
user@box:~ $ echo 'be careful of $ in there!'
be careful of $ in there!
\end{lstlisting}

\end{document}

在此处输入图片描述

相关内容