我正在尝试向一段代码添加一些覆盖,并使用 来定义它moredelim
。但是,当我在代码中的注释上使用它时,moredelim
停止工作。
我错过了什么?
\documentclass{beamer}
\usepackage{listings}
\lstdefinestyle{cexample}{%
language=C++,
moredelim=**[is][\onslide<+->]{|}{|},
}
\begin{document}
\begin{frame}[fragile]{Work without comment}
\begin{lstlisting}[style=cexample]
char * const buffer[]; |comment 1|
char * const * buffer; |comment 2|
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{Doesn't work with comments '//'}
\begin{lstlisting}[style=cexample]
char * const buffer[]; |//comment 1|
char * const * buffer; |//comment 2|
\end{lstlisting}
\end{frame}
\end{document}
答案1
结束符|
被解释为注释的一部分。不幸的是,listings
一旦单行注释模式启动,我不知道如何退出。
一种解决方法是使用moredelim
只需要打开分隔符并在当前行末尾结束的。
\documentclass{beamer}
\usepackage{listings}
\lstdefinestyle{cexample}{%
language=C++,
moredelim=**[il][\onslide<+->]{|},
}
\begin{document}
\begin{frame}[fragile]{Work without comment}
\begin{lstlisting}[style=cexample]
char * const buffer[]; |comment 1
char * const * buffer; |comment 2
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{Doesn't work with comments '//'}
\begin{lstlisting}[style=cexample]
char * const buffer[]; |//comment 1
char * const * buffer; |//comment 2
\end{lstlisting}
\end{frame}
\end{document}