简而言之,我试图将一些 C 代码与 LaTeX 中的反汇编代码结合起来,以便在相关语句之后显示 x86 代码。为了使它看起来不错,我希望能够在列表内切换样式。我在网上搜索了很长时间,发现有多个来源谈论escapeinside
和escapechar
(这个帖子例如),但我似乎无法让它们工作。现在,我的代码如下:
\begin{lstlisting}[style=customcpp, escapechar=\@]
void sort(int *rgList, int nLen)
{@\lstset{escapechar=\@, style=customasm}@
push ebp
mov ebp, esp
sub esp, 48h
push ebx
push esi
push edi
...
\end{lstlisting}
其中customcpp
和customasm
是我定义的样式。两者单独工作都很好。当我尝试将它们组合在一起时,我遇到了问题。我感觉我在做一些愚蠢的事情,但我似乎找不到它。
无论如何,以下是我的风格定义:
\lstdefinestyle{customcpp}{
belowcaptionskip=1\baselineskip,
breaklines=true,
frame=L,
xleftmargin=\parindent,
language=C++,
showstringspaces=false,
basicstyle=\footnotesize\ttfamily,
keywordstyle=\color{blue},
commentstyle=\itshape\color{green},
stringstyle=\color{purple},
identifierstyle=\color{gray},
tabsize=4,
numbers=left,
numbersep=8pt,
stepnumber=1,
numberstyle=\tiny\color{gray},
}
\lstdefinestyle{customasm}{
belowcaptionskip=1\baselineskip,
frame=L,
xleftmargin=\parindent,
language=[x86masm]Assembler,
basicstyle=\footnotesize\ttfamily,
commentstyle=\itshape\color{purple!40!black},
keywordstyle=\color{black},
identifierstyle=\color{black},
tabsize=4,
numbers=left,
numbersep=8pt,
stepnumber=1,
numberstyle=\tiny\color{gray}
}
我还应该注意到,逃避作品. 改变风格是行不通的。
答案1
我找到了一种解决方法,我刚刚使用了它,@\verb=...=@
因为它与我的汇编代码格式相同,并且它工作正常,而且我显然不能\lstinline
在列表中使用它。尽管如此,我不得不诉诸于此还是很愚蠢。如果有人有更好的解决方案,我很乐意听听。