LaTeX-Beamer 中现有环境的 newenvironment/newcommand

LaTeX-Beamer 中现有环境的 newenvironment/newcommand

我想拥有解决方案:在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的选项。framelistings

答案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在每一帧之前一遍又一遍地重新定义。

相关内容