我正在使用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]
。