动态更改列表中的代码

动态更改列表中的代码

我需要通过在代码中添加一个关键字来动态更改清单中的代码。我尝试这样做:

\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})。您可以添加更多关键字,方法是用,

在此处输入图片描述

相关内容