我正在寻找一种方法来强调列表中的特定名称和十六进制数字。使用强调适用于名称,但不适用于十六进制数。
什么没有奏效
考虑以下 MWE:
\documentclass[a4paper]{article}
\usepackage{xcolor}
\usepackage{listings}
\begin{document}
\lstset{
emph={esp,0xffffcd80},
emphstyle=\color{red}
}
\begin{lstlisting}
(gdb) info registers
eax 0xffffd10f -12017
ecx 0xffffce30 -12752
edx 0xffffce54 -12716
ebx 0x0 0
esp 0xffffcd80 0xffffcd80
ebp 0xffffcdf8 0xffffcdf8
\end{lstlisting}
\end{document}
这会将名称渲染esp
为红色,但不是0xffffcd80
以相同的方式呈现地址,尽管两者都在 emph 选项中给出。
另一种方法涉及转义区域内的文本颜色:
\begin{lstlisting}[escapechar=!]
ebx 0x0 0
esp !\textcolor{red}{0xffffcd80}! 0xffffcd80
ebp 0xffffcdf8 0xffffcdf8
\end{lstlisting}
这将以红色显示地址,但会破坏间距,如下面的屏幕截图所示:
有什么想法可以如何保留正确的间距/对齐,并能够在列表中突出显示某些名称/地址?
答案1
我认为你可以使用这个答案:带有转义代码的列表的间距问题
你的代码将如下所示:
\documentclass[a4paper]{article}
\usepackage{xcolor}
\usepackage{listings}
\begin{document}
\lstset{
emph={esp},
emphstyle=\color{red},
moredelim=[is][\color{red}]{!*}{*!}
}
\begin{lstlisting}
(gdb) info registers
eax 0xffffd10f -12017
ecx 0xffffce30 -12752
edx 0xffffce54 -12716
ebx 0x0 0
esp !*0xffffcd80*! 0xffffcd80
ebp 0xffffcdf8 0xffffcdf8
\end{lstlisting}
\end{document}