定义关键字

定义关键字

尝试获取带有命令提示符的列表块,该列表块既有颜色又有正确的格式。我可以用简单的黑色排版获得正确的格式,但不能用彩色获得正确的格式...省略了波浪线(表示主目录)。

例子:

\documentclass{article}
\usepackage{listings}
\usepackage{lmodern}
\usepackage[dvipsnames]{xcolor} 

\lstset{
    showstringspaces=false,
    basicstyle=\ttfamily,
    columns=flexible,
    escapeinside={(*}{*)}
    }

\begin{document}
%first prompt is colored but missing the tilde
%second prompt is b/w, but the tilde shows
%   - but the tilde is in the wrong position...
\begin{lstlisting}[caption={Command prompt}]
(*\color{red}root*)(*\color{ForestGreen}@hostname:~\#*)
root@hostname:~# 
\end{lstlisting}

\end{document}

答案1

我建议不要escapeinside为此使用,因为离开逐字环境并使用特殊命令来逐字排版有点违背目的。相反,请使用listings提供的功能来设置代码样式。以下是获得所需结果的两个建议。

定义关键字

listings允许您定义多组关键字,每组可以采用不同的样式。因此,我们可以将组 1 定义为仅包含关键字,root并将红色应用于此关键字。然后绿色将成为列表的默认颜色。请注意,@必须重新定义为其他字符以允许'关键字解析器在输入中出现listings时正确停止。@

\lstset{
    basicstyle   = {\ttfamily\color{ForestGreen}},
    keywords     = [1]{root},
    keywordstyle = [1]{\color{red}},
    alsoother    = {@}
}

使用literate选项

关键字在很多情况下都非常有用,但有时我们需要考虑更多背景信息。如果您只希望root在 之前出现 时显示红色@,则可以定义一条literate规则,root@用适当样式的替换文本替换 的每个文字出现,在这种情况下为红色root字符串和@具有默认样式的 。

\lstset{
    basicstyle = {\ttfamily\color{ForestGreen}},
    literate   = {root@}{{\color{red}root}@}5
}

编辑:更悦耳的波浪号

正如其中一条评论所指出的那样,默认波浪符号太高,不适合在文件路径中使用。url软件包提供了一个更令人愉快的版本,可以通过使用literate上面提到的选项在我们的列表中使用。我们只需将以下行添加到\lstset

literate={~}{\urltilde}1

其中\urltilde定义为

\newcommand\urltilde{\url{~}}

以下是两个版本的完整代码(更新后):

\documentclass{article}
\usepackage{listings}
\usepackage{lmodern}
\usepackage[dvipsnames]{xcolor} 
\usepackage{url} 

\newcommand\urltilde{\url{~}}

\begin{document}

\lstset{
    showstringspaces=false,
    columns=flexible,
    escapeinside={(*}{*)},
    basicstyle={\ttfamily\color{ForestGreen}},
    keywords=[1]{root},
    keywordstyle=[1]{\color{red}},
    alsoother={@},
    literate={~}{\urltilde}1
}
\begin{lstlisting}[caption={Command prompt}]
(*\color{red}root*)(*\color{ForestGreen}@hostname:~\#*)
root@hostname:~#
\end{lstlisting}

\bigskip

\lstset{
    showstringspaces=false,
    columns=flexible,
    escapeinside={(*}{*)},
    basicstyle={\ttfamily\color{ForestGreen}},
    literate={root@}{{\color{red}root}@}5 {~}{\urltilde}1
}
\begin{lstlisting}[caption={Command prompt}]
(*\color{red}root*)(*\color{ForestGreen}@hostname:~\#*)
root@hostname:~#
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

尝试使用\textasciitilde代替波浪符号:

(*\color{red}root*)(*\color{ForestGreen}@hostname:\textasciitilde\#*)

相关内容