当我将它放入覆盖宏中时,我无法让任何逐字环境(alltt、semiverbatim)尊重空格:
\documentclass{beamer}
\begin{document}
\begin{frame}[fragile]
\only<1>{\begin{minipage}{0.9\textwidth}
\begin{semiverbatim}
top level
2 spaces indent
4 spaces indent
\end{semiverbatim}
\end{minipage}};
\end{frame}
\end{document}
上述示例在一行上排版如下:
top level 2 spaces 4 spaces
根据这个答案https://tex.stackexchange.com/a/32488/63936这与逐字缩进在宏参数中不起作用有关。但是逐字缩进在某些宏中确实有效,例如在 tikz 的 \node 中,但前提是节点没有覆盖规范。因此,覆盖和逐字处理之间存在一些奇怪的交互。可能 tikz 会做一些神奇的事情来克服问题,但它对带有覆盖的节点没有帮助。上面链接的答案中提出的解决方案仅适用于 listings 包。
有没有办法让其他逐字环境在覆盖内容中工作?
答案1
一个简单的替代方案是回到beamer
同样提供的覆盖环境。这些在手册的 §9.4 中描述beamer
:
对于每个基本命令 \only、\alt、\visible、\uncover 和 \invisible,都存在“环境版本”onlyenv、altenv、visibleenv、uncoverenv 和 invisibleenv。
因此,对于您来说,切换到onlyenv
会产生预期的结果:
\documentclass{beamer}
\begin{document}
\begin{frame}[fragile]
\begin{onlyenv}<1>
\begin{minipage}{0.9\textwidth}
\begin{semiverbatim}
top level
2 spaces indent
4 spaces indent
\end{semiverbatim}
\end{minipage}
\end{onlyenv}
;
\end{frame}
\end{document}