listings 环境中 escapeinside 的用法

上次写实验报告的时候从网上剽来一份代码高亮的配置,其中有一句 escapeinside=**,当时不知道是什么意思。这次写 Linux 实验的时候同样使用了这份高亮配置,结果吞掉了一些符号,记录一下这个坑。

escapeinside 的意思是添加注释暂时离开 listings 的环境,也就是说编译之后不会在代码块中出现,例如 escapeinside={(*}{*)} 就表示这个「暂时离开」的部分以 (* 开头,以 *) 结尾:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
\begin{lstlisting}[language={[x86masm]Assembler}]
(* 这里是\LaTeX *)
; function: to compare information
CMP_INFO PROC
MOV AL, U_BUF+1
CMP AL, U_LEN
JNE S_NEQ
MOV AL, P_CNT
CMP AL, P_LEN
JNE S_NEQ
MOV SI, OFFSET U_BUF+2
MOV DI, OFFSET U_ORI
CLD
MOV CL, U_LEN
MOV CH, 0
REPE CMPSB
JNE S_NEQ
MOV SI, OFFSET P_BUF
MOV DI, OFFSET P_ORI
CLD
MOV CL, P_LEN
MOV CH, 0
REPE CMPSB
JNE S_NEQ
MOV DX, OFFSET SUC
CALL PRT_STR
RET
S_NEQ:
MOV DX, OFFSET REJ
CALL PRT_STR
RET
CMP_INFO ENDP
\end{lstlisting}

这是输出结果是这样的:

可以看到被 (**) 包裹的内容是以 LaTeX 的形式编译的。