我使用的x86masm
是方言,Assembler
即使寄存器名称出现在标签或十六进制数字中,也会强调它们。例如,dh
是寄存器,但是0dh
一个数字,但dh
它的一部分被强调了。我在listings
使用其他语言时没有遇到过这个问题,所以我假设这是语言定义的问题。有没有简单的方法可以重新定义语言以避免这种情况发生?
\documentclass[12pt]{article}
\usepackage{courier, listings}
\lstset{
language={[x86masm]Assembler},
basicstyle=\ttfamily\small,
frame=single
}
\begin{document}
\begin{lstlisting}
cmp al, 0dh ; dh = register, 0dh = number
je somewhere
\end{lstlisting}
\end{document}
答案1
使用deletekeywords=...
。但是,您应该使用另一种 monotypefont,例如 beramono。Courier 不是一种好看的单色字体。
\documentclass[12pt]{article}
\usepackage{courier, listings}
\lstset{
language={[x86masm]Assembler},
basicstyle=\ttfamily\small,
frame=single,
deletekeywords={dh}
}
\begin{document}
\begin{lstlisting}
cmp al, 0dh ; dh = register, 0dh = number
je somewhere
\end{lstlisting}
\end{document}
答案2
默认情况下,listings
分别处理数字序列(和其他字符)和字母序列。更具体地说,listings
识别数字0
并将其打印出来,然后识别关键字dh
(由x86masm
语言定义)并将其突出显示。
正如赫伯特所写他的回答当然,你也可以dh
从关键字列表中删除,就像这样
deletekeywords={dh}
然而,这种方法并不理想,因为它完全阻止了任何标识符实例dh
被突出显示,如下面的屏幕截图所示。
一种更好的方法是将listings
数字和字母一起处理,而不是分开处理,方法是将数字视为“字母”:
alsoletter=0123456789,
然后,listings
将被0dh
视为一个单一实体;dh
将会突出显示,但0dh
不会如预期的那样。
完整代码
\documentclass[12pt]{article}
\usepackage{courier, listings}
\lstset{
language={[x86masm]Assembler},
% deletekeywords={dh}, % less than ideal
alsoletter=0123456789, % better
basicstyle=\ttfamily\small,
frame=single,
}
\begin{document}
\begin{lstlisting}
cmp al, 0dh ; dh = register, 0dh = number
je somewhere
--- TestTestTest: dh ---
\end{lstlisting}
\end{document}