我需要通过在代码中添加一个关键字来动态更改清单中的代码。我尝试这样做:
\begin{lstlisting}[escapechar=|]
class MyThread extends Thread {
private |\only<3>{\alert{volatile}}| boolean stop = false;
public void run() {
while (!stop) {
doSomeWork();
}
}
public void setStop() {
this.stop = true;
}
}
\end{lstlisting}
它可以正常工作,但是当“volatile”不可见时,“private”和“boolean”之间有两个空格。还有其他方法可以实现我想要的效果吗?
答案1
如果您不介意我稍微更改您的实现,以下是我的解决方案。将您的代码放在单独的文件中,然后像以下示例一样将其引入。通过这样做,首先您可以避免任何像您现在遇到的意外行为,其次,您可以轻松简单地添加任意数量的关键字:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\begin{document}
\lstset{
language=Java,
tabsize=3,
%frame=lines,
caption=A test file,
label=code:test,
frame=shadowbox,
rulesepcolor=\color{gray},
xleftmargin=20pt,
framexleftmargin=15pt,
keywordstyle=\color{blue}\bf,
commentstyle=\color{OliveGreen},
stringstyle=\color{red},
numbers=left,
numberstyle=\tiny,
numbersep=5pt,
breaklines=true,
showstringspaces=false,
basicstyle=\footnotesize,
%add your keywords here:
emph={volatile},emphstyle={\color{magenta}}}
%load the file here:
\lstinputlisting{test.java}
\end{document}
关键字添加在 的最后一行lstset (emph={volatile})
。您可以添加更多关键字,方法是用,