我想拥有解决方案:在listings
-package中突出显示某一行 作为命令或环境。很遗憾我无法让它工作。我试过:
- 简单
newenvironment
:编译错误 \newcommand
:还会编译错误这
environ
-包裹, 见下文\NewEnviron{listingh}{ \vspace{-\baselineskip} \begin{lstlisting}[backgroundcolor=\color{yellow}] \BODY \end{lstlisting} \vspace{-\baselineskip} }
此外,还有相同类型的错误。missing {
等等missing number, threaded a zero
。
我尝试将它与beamer
-package 和 一起使用pdflatex
。
答案1
该lstlisting
环境与所有 verbatim 环境一样特殊,无法在其他环境中很好地工作。您需要\lstnewenvironment
按照listings
手册第 4.16 节中的说明使用环境,第 40 页:
\lstnewenvironment
{<name>}[<number>][<opt. default arg.>]
{<starting code>}
{<ending code>}
应用于您的代码:
\lstnewenvironment{listingh}[1][]{%
\vspace{-\baselineskip}%
\lstset{backgroundcolor=\color{yellow},#1}%
}{%
\vspace{-\baselineskip}%
}
请注意%
行尾的以避免出现虚假空格。
如果您使用或任何其他逐字代码,则需要使用环境(或命令)fragile
的选项。frame
listings
答案2
除了 Martin 的回答之外,您还需要特别注意 beamer 类,因为该类也会彻底改变 LaTeX 的扩展习惯。请参阅 beamer 手册第 2.6 节。
\documentclass{beamer}
\usepackage{listings}
\lstnewenvironment{listingh}[1][]{%
\vspace{-\baselineskip}%
\lstset{backgroundcolor=\color{yellow},#1}%
}{%
\vspace{-\baselineskip}%
}
\begin{document}
\defverbatim[colored]\mycode{%
\begin{listingh}[emph={PRINT,GOTO},emphstyle={\color{blue}}]
10 PRINT "HELLO, WORLD!"
20 GOTO 10
\end{listingh} }
\begin{frame}{BASIC}
\mycode
\end{frame}
% or
\begin{frame}[fragile]{C++}
\begin{listingh}[emph={cout,for},emphstyle={\color{blue}}]
for (;;) {
cout << "Hello, world!";
}
\end{listingh}
\end{document}
这看起来很糟糕,但请记住您可以\mycode
在每一帧之前一遍又一遍地重新定义。