如何在半逐字环境中防止尖括号美化?

如何在半逐字环境中防止尖括号美化?
\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非常忠实于原始补丁。

相关内容