我在制作的 Beamer 演示文稿中包含了大量内联 C++ 代码,并且我希望能够使用 \lstinline 的简短语法。如果我使用 ! 字符作为分隔符,我的代码可以正常显示,例如
\lstMakeShortInline!
!cout << "This C++ displays fine";!
但是当我尝试使用 @ 字符作为分隔符时,由于它几乎不会出现在 C++ 代码中,因此行显示为未格式化,周围是文字 @。据我所知,@ 不是 LaTeX 中的特殊字符,那么为什么会发生这种情况?
编辑:我没有测试我给出的例子,经过进一步检查,仅有的我可以用作分隔符的字符是 ~,如下例所示:
\documentclass{beamer}
\usepackage{listings}
\lstMakeShortInline[language=C++,basicstyle=\ttfamily]~
\begin{document}
\begin{frame}
~cout << "This C++ displays fine";~
\end{frame}
\end{document}
但是,其他分隔符(例如 |)似乎在文章文档类中起作用,这是 beamer 的问题吗?
答案1
如果你试试
\documentclass{beamer}
\usepackage{listings}
\lstMakeShortInline[language=C++,basicstyle=\ttfamily]@
\lstMakeShortInline[language=C++,basicstyle=\ttfamily]|
\begin{document}
\begin{frame}
\show @
\show |
\end{frame}
\end{document}
编译停止于
> the character @.
然后
> |=macro:
->\lstinline [language=C++,basicstyle=\ttfamily ]|.
显示两种情况之间的根本区别:@
被规范化为类别代码 12。这发生在文档开始处,因此您可以推迟声明:
\documentclass{beamer}
\usepackage{listings}
\lstMakeShortInline[language=C++,basicstyle=\ttfamily]|
\begin{document}
\lstMakeShortInline[language=C++,basicstyle=\ttfamily]@
\begin{frame}[fragile]
|cout << "This C++ displays fine";|
@cout << "This C++ displays fine";@
\end{frame}
\end{document}
将以相同的方式显示两行。请记住声明fragile
所有逐字排版材料的框架。