列表包中是否有非逐字形式的 lstinline?

列表包中是否有非逐字形式的 lstinline?

我正在使用listings带有的包beamer,我想尽量避免制作框架fragile。我知道我的许多框架都需要这样做,fragile但有些框架的lstinline代码内容不需要切换到verbatim处理样式。让我用一个例子来说明这一点:

\documentclass{beamer}
\usepackage{listings}
\lstset{language=C++}
\lstset{frame=,
  framesep=5pt,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=[1]\ttfamily\color{blue}\bfseries,
  identifierstyle=\ttfamily\color{purple}\bfseries,
  commentstyle=\normalfont\color{green},
  stringstyle=\color{brown}\ttfamily,
  columns=fullflexible,
  fontadjust=true,
}

\newcommand*{\identifier}[1]{{\footnotesize\ttfamily\color{purple}\bfseries #1}}

\begin{document}
    \begin{frame}[fragile]{1. Hello world}
        \begin{lstlisting}
        int main(int argc, char *argv[]) {
            std::cout << "Hello world!" << std::endl;
            return EXIT_SUCCESS;
        }
        \end{lstlisting}
    \end{frame}

    \begin{frame}[fragile]{2. Discussion of Hello world}
        Note that \lstinline!cout! in the previous example means ``console out''.
    \end{frame}

    \begin{frame}{3. Discussion of Hello world}
        Note that \identifier{cout} in the previous example means ``console out''.
    \end{frame}
\end{document}

这里有三个框架,框架 1 必然是fragile。框架 2 必须制作,fragile否则会出现错误,即使该框架中没有需要处理的内容verbatim。框架 3 显示与框架 2 相同的输出,但不使用fragile。但是,这非常有限,因为这意味着我自己控制一切,而不是让别人替listings我做。例如,当我开始想要讨论包含关键字和标识符的表达式时,这会变得更加困难。

问题因此,我想知道是否存在一个版本的命令lstinline,它不会切换到verbatim-style 处理模式,因此第 2 帧不需要使用fragile。如果没有,这是否会非常难以提供?

答案1

您可以\lstinline直接在\identifier命令中调用:

\documentclass{beamer}
\usepackage{listings}
\lstset{language=C++}
\lstset{frame=,
  framesep=5pt,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=[1]\ttfamily\color{blue}\bfseries,
  identifierstyle=\ttfamily\color{purple}\bfseries,
  commentstyle=\normalfont\color{green},
  stringstyle=\color{brown}\ttfamily,
  columns=fullflexible,
  fontadjust=true,
}

\newcommand*{\identifier}[1]{\lstinline!#1!}

\begin{document}

\begin{frame}[fragile]{1. Hello world}
  \begin{lstlisting}
    int main(int argc, char *argv[]) {
      std::cout << "Hello world!" << std::endl;
      return EXIT_SUCCESS;
    }
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]{2. Discussion of Hello world}
  Note that \lstinline!cout << "Hello"! in the previous example means
  ``console out''.
\end{frame}

\begin{frame}{3. Discussion of Hello world}
  Note that \identifier{cout << "Hello"} in the previous example means
  ``console out''.
\end{frame}
\end{document}

答案2

的运作listings需要改变字符的类别代码,所以[fragile]后面的选项\begin{frame}是必要的。

这完全取决于您真正需要输入的内容:您可以像输入 一样输入少量标识符\identifier。您可以对常见构造进行其他定义以着色,从而限制对 的需求[fragile]

相关内容