我有一张带有多个代码片段的投影仪幻灯片,这些代码片段使用 tcblisting 格式化并使用 tcb 光栅块显示。我想一次显示一个 tcblisting 块,但我无法正确获得覆盖规范。
这是 Beamer frame
:
\begin{frame}[fragile=singleslide]
\begin{ccodeblock}{C Source}
long plus(long x, long y);
void sumstore(long x, long y, long *dest)
{
long t = plus(x, y);
*dest = t;
}
\end{ccodeblock}
\begin{tcbraster}[raster columns=2, raster equal height]
\begin{gascodeblock}{Assembly Output (x86-64)}
sumstore:
pushq %rbx
movq %rdx, %rbx
call plus
movq %rax, (%rbx)
popq %rbx
ret
\end{gascodeblock}
\begin{verbatimcodeblock}{Machine Code}
0x53 0x48 0x89 0xd3 0xe8
0xf2 0xff 0xff 0xff 0x48
0x89 0x03 0x5b 0xc3
\end{verbatimcodeblock}
\end{tcbraster}
\end{frame}
ccodeblock
、和gascodeblock
是verbatimcodeblock
使用 定义的\newtcblisting
。我想要:
ccodeblock
在所有幻灯片上gascodeblock
在<2->
verbatimcodeblock
在<3->
我曾尝试使用\only
、\onlyenv
等,但最终<2->
在排版输出中出现了覆盖规范(例如)。
谢谢,
汤姆。
答案1
我不想猜测你的自定义tcblisting
是如何定义的,所以我只是从手册中获取了一些随机代码tcolorbox
。
\pause
如果将框架选项fragile=singleslide
替换为-- ,则只需使用即可fragile
,这很有意义,因为您希望在多张幻灯片上拥有易碎内容。
\documentclass[11pt]{beamer}
\usepackage[listings]{tcolorbox}
\begin{document}
\begin{frame}[fragile]
\begin{tcblisting}{colback=red!5!white,colframe=red!75!black}
long plus(long x, long y);
void sumstore(long x, long y, long *dest)
{
long t = plus(x, y);
*dest = t;
}
\end{tcblisting}
\pause
\begin{tcblisting}{colback=red!5!white,colframe=red!75!black}
sumstore:
pushq %rbx
movq %rdx, %rbx
call plus
movq %rax, (%rbx)
popq %rbx
ret
\end{tcblisting}
\end{frame}
\end{document}