尝试获取带有命令提示符的列表块,该列表块既有颜色又有正确的格式。我可以用简单的黑色排版获得正确的格式,但不能用彩色获得正确的格式...省略了波浪线(表示主目录)。
例子:
\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\#*)