Colorir um único delimitador de comentários de listagens (estilo de linguagem de transcrição do shell)?

Colorir um único delimitador de comentários de listagens (estilo de linguagem de transcrição do shell)?

Eu queria ter uma espécie de estilo de linguagem de transcrição de shell nas listagens, onde o prompt do shell e os comandos reais são enfatizados, e o resto do texto é um pouco "silenciado".

O melhor que consegui por enquanto é definir o estilo básico como "silenciado"/"desbotado"/"acinzentado" e, em seguida, tratar meu caractere de prompt do shell (aqui $) como um delimitador de comentário único e, em seguida, fazer com que o comentário restante seja estilizado em preto total e em negrito:

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

A saída é esta:

saída

No entanto, o que eu realmente quero é isto:

saída desejada

Ou seja: apenas o delimitador do comentário (ou seja, apenas o caractere do prompt $) deve ser vermelho e sem negrito; o texto posterior (comando real) deve ser preto e negrito; o texto restante, como a saída, deve ser silenciado/cinza - e $em "texto de saída" NÃO deve ser estilizado (o que provavelmente significa que, para declarar "comentário", é necessário verificar se a linha começa user@boxe contém um $, então se faz, tome isso $como um delimitador de comentário).

Isso pode ser conseguido com listagens – e em caso afirmativo, como?

Responder1

Você pode adaptar a solução @matexmatics dehttps://tex.stackexchange.com/a/706145/36296assim:

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

insira a descrição da imagem aqui

informação relacionada