\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{frame}[fragile]{Angle Brackets}
\newcommand{\bbb}{\protect\textless\protect\textless\protect\textless}
\begin{semiverbatim}
Wrong:
a <<< b
Right:
a \bbb b
\end{semiverbatim}
\end{frame}
\end{document}
为什么会发生这种情况?在 beamer 文档中,只说\
、{
和}
是经过特殊处理的。
另外,我不能说我非常喜欢我的解决方案。我宁愿<<<
按原样使用。我的解决方案是唯一可行的方法吗?
答案1
如果问题是“如何预防”,那么额外的分组就足够了:
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{frame}[fragile]{Angle Brackets}
\newcommand{\bbb}{\protect\textless\protect\textless\protect\textless}%} % corrected
\begin{semiverbatim}
Wrong:
a <{<}< b % here - PS
Right:
a \bbb b
\end{semiverbatim}
\end{frame}
\end{document}
答案2
您可以修改 的定义semiverbatim
。
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\makeatletter
\def\semiverbatim{%
\trivlist\item\relax
\if@minipage\else
\vskip\parskip
\fi
\leftskip\@totalleftmargin
\rightskip\z@skip
\parindent\z@
\parfillskip\@flushglue
\parskip\z@skip
\@@par
\@tempswafalse
\def\par{%
\if@tempswa
\leavevmode\null\@@par\penalty\interlinepenalty
\else
\@tempswatrue
\ifhmode
\@@par\penalty\interlinepenalty
\fi
\fi}%
\obeylines
\def\verbatim@nolig@list{\do\<\do\>}%
\verbatim@font\@noligs\catcode`\<=\active \catcode`\>=\active
\let\org@prime'%
\everymath\expandafter{\the\everymath\catcode`\'=12 \let'\org@prime}%
\everydisplay\expandafter{\the\everydisplay\catcode`\'=12 \let'\org@prime}%
\def\dospecials{\do\ \do\$\do\&\do\#\do\^\do\_\do\%\do\~\do\`\do\,\do\'\do\-}%
\let\do\@makeother\dospecials
\def\\{\char`\\}%
\def\{{\char`\{}%
\def\}{\char`\}}%
\frenchspacing\@vobeyspaces
\everypar\expandafter{\the\everypar\unpenalty}%
}
\makeatother
\begin{document}
\begin{frame}[fragile]{Angle Brackets}
\newcommand{\bbb}{\protect\textless\protect\textless\protect\textless}
\begin{semiverbatim}
Wrong:
a <<< b
Right:
a \bbb b
\end{semiverbatim}
\end{frame}
\end{document}
可能需要激活其他字符。我只禁用了<<
和>>
连字符。
不幸的是,更简单的补丁是不可能的,但这个重新定义semiverbatim
非常忠实于原始补丁。