下面的例子中,幻灯片第二次出现的行号从“3”开始。但是幻灯片第二次出现的条目中的引用显示为“1”和“2”(即从幻灯片第一次出现开始的行号)。
我想要:
- 幻灯片中的每一处都有相同的行号
- 或者,引用指的是幻灯片中最近出现的行号
但是,在幻灯片的某一特定出现位置,右侧列表中的行号应从左侧列表中的行号继续。
我怎样才能实现这个目标?
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\lstset{
basicstyle=\normalsize\ttfamily,
numbers=left,
numberstyle=\tiny\color{gray},
stepnumber=1,
numbersep=5pt,
escapechar=£,
breaklines=true}
\begin{document}
\begin{frame}<1>[fragile,t,label=foo]
\frametitle{Example}
\begin{minipage}{.45\textwidth}%
\begin{lstlisting}[name=fooex]
foo£\label{lst:foo}£
\end{lstlisting}%
\end{minipage}%
\begin{minipage}{.45\textwidth}%
\begin{lstlisting}[firstnumber=auto,name=fooex]
bar£\label{lst:bar}£
\end{lstlisting}%
\end{minipage}%
\only<1>{
\begin{itemize}
\item First stuff
\end{itemize}}
\only<2>{
\begin{itemize}
\item stuff about lines \ref{lst:foo} and \ref{lst:bar}
\end{itemize}}
\end{frame}
\begin{frame}
\frametitle{Another frame}
\end{frame}
\againframe<2>{foo}
\end{document}
答案1
要获得常数,请遵循以下建议伊格纳西并指定
firstnumber
要指定应跳转到的标签出现位置:
\label<2>{lst:bar}
。当然,这不会自动指向最近的出现位置,但对于简单的构造来说,这可能就足够了。如果您需要跳转到两侧,则可以使用多个标签\label<1>{lst:bara}\label<2>{lst:barb}
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\lstset{
basicstyle=\normalsize\ttfamily,
numbers=left,
numberstyle=\tiny\color{gray},
stepnumber=1,
numbersep=5pt,
escapechar=£,
breaklines=true}
\begin{document}
\begin{frame}<1>[fragile,t,label=foo]
\frametitle{Example}
\begin{minipage}{.45\textwidth}%
\begin{lstlisting}[firstnumber=1,name=fooex]
foo£\label<2>{lst:foo}£
\end{lstlisting}%
\end{minipage}%
\begin{minipage}{.45\textwidth}%
\begin{lstlisting}[firstnumber=2,name=fooex]
bar£\label<2>{lst:bar}£
\end{lstlisting}%
\end{minipage}%
\only<1>{
\begin{itemize}
\item First stuff
\end{itemize}}
\only<2>{
\begin{itemize}
\item stuff about lines \ref{lst:foo} and \ref{lst:bar}
\end{itemize}}
\end{frame}
\begin{frame}
\frametitle{Another frame}
\end{frame}
\againframe<2>{foo}
\end{document}