비머 오버레이 및 목록 수수께끼

비머 오버레이 및 목록 수수께끼

C 코드에 이스케이프 문자 를 오버레이하려고 하면 lstlisting(를 삽입할 수 있음 \colorbox) 다음 오류가 발생합니다.

! Missing number, treated as zero.
<to be read again>
               \let
l.15    }

beamer오류를 재현하는 일부 코드는 아래를 참조하세요 . 오버레이 지침을 주석 처리하면( % comment this내 코드의 주석 읽기 참조) 코드가 완벽하게 컴파일되고 작동합니다.

내 환경에서 오버레이가 작동되기를 바랍니다 lstlisting. 이 문제를 해결하는 방법에 대한 단서가 있습니까?

\documentclass[smaller]{beamer}
\usepackage{graphicx}
\usepackage{color,xcolor}  
\usepackage{boxedminipage}
\usepackage{listings}
\usepackage{pgf,pgfpages}
\usepackage{tikz, subfig}
\usetikzlibrary{arrows,shapes,positioning}
\usetheme{boxes}
\usefonttheme[stillsansseriftext,stillsansserifsmall]{serif} 
\setbeamerfont{frametitle}{size=\large,series=\bfseries,shape=\sf}

\definecolor{red}       {rgb}{.8,0,0}
\definecolor{blue}      {rgb}{0,0,.9}

\begin{document}

\begin{frame}[fragile]
\frametitle{C Program}
\only<1>{ % comment this
\begin{minipage}{\textwidth}
 \begin{minipage}{0.5\textwidth}
  \begin{lstlisting}     [language=C,keywordstyle=\color{red},escapechar=\!,basicstyle=\ttfamily\scriptsize]
    !\colorbox{blue}{x++;}!
  \end{lstlisting}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
  \begin{lstlisting}[language=C,keywordstyle=\color{red},escapechar=\!, basicstyle=\ttfamily\scriptsize]
    !\colorbox{red}{y++;}!
  \end{lstlisting}
 \end{minipage}
\end{minipage}
} % comment this
\only<2>{ % comment this
\begin{tikzpicture}[font=\footnotesize]
\node at (0,0) {$P_M$};
\node at (1,0) {$P_{W_1}$};
\node at (2,0) {$P_{W_2}$};
\draw (-1,-0.3) -- (3,-0.3);
\end{tikzpicture}
} % Comment this
\end{frame}
\end{document}

답변1

다음은 오류를 재현하는 최소한의 코드입니다.

\documentclass{beamer}

\usepackage{listings}

\begin{document}
\begin{frame}[fragile]
\only<1>{ 
\begin{lstlisting}
\colorbox{blue}{x++;}
\end{lstlisting}
}
\end{frame}
\end{document}

오버레이 매크로( \only)를 제거하면 코드가 정상적으로 컴파일됩니다. 이는 문제가 와 관련이 없음을 알려줍니다 escapechar. 오히려, 축어적인 콘텐츠( 이 경우 환경) \only를 감상하지 못하는 것이 문제인 것 같습니다 .lstlisting

한 가지 해결 방법은 목록을 외부 파일에 두고 \lstinputlisting; 아래를 참조하세요.

참고 사항: 여기에서는 beamer두 가지 환경 columns및 를 제공하는데 column, 이는 현재보다 더 관용적입니다 minipage. 그것을 써.

여기에 이미지 설명을 입력하세요

\documentclass[smaller]{beamer}
\usepackage{graphicx}
\usepackage{color,xcolor}  
\usepackage{boxedminipage}
\usepackage{listings}
\usepackage{pgf,pgfpages}
\usepackage{tikz, subfig}
\usetikzlibrary{arrows,shapes,positioning}
\usepackage{filecontents}

\usetheme{boxes}
\usefonttheme[stillsansseriftext,stillsansserifsmall]{serif} 
\setbeamerfont{frametitle}{size=\large,series=\bfseries,shape=\sf}

\definecolor{red}{rgb}{.8,0,0}
\definecolor{blue}{rgb}{0,0,.9}

\begin{filecontents*}{samplex.c}
!\colorbox{blue}{x++;}!
\end{filecontents*}

\begin{filecontents*}{sampley.c}
!\colorbox{red}{y++;}!
\end{filecontents*}

\lstdefinestyle{myC}
{
  language=C,
  keywordstyle=\color{red},
  escapechar=!,
  basicstyle=\ttfamily\scriptsize,
}

\begin{document}

\begin{frame}[fragile]
\frametitle{C Program}
\only<1>{
    \begin{columns}
      \begin{column}{.5\textwidth}
        \lstinputlisting[style=myC]{samplex.c}
      \end{column}
      \begin{column}{.5\textwidth}
        \lstinputlisting[style=myC]{sampley.c}
      \end{column}
    \end{columns}
}
\only<2>{
    \begin{tikzpicture}[font=\footnotesize]
    \node at (0,0) {$P_M$};
    \node at (1,0) {$P_{W_1}$};
    \node at (2,0) {$P_{W_2}$};
    \draw (-1,-0.3) -- (3,-0.3);
    \end{tikzpicture}
}
\end{frame}
\end{document}

답변2

내부에서 축어적 코드를 사용하려면 다음 \only<1>{...}으로 바꾸십시오 .\begin{onlyenv}<1>...\end{onlyenv}

\documentclass[smaller]{beamer}
\usepackage{graphicx}
\usepackage{color,xcolor}
\usepackage{boxedminipage}
\usepackage{listings}
\usepackage{pgf,pgfpages}
\usepackage{tikz, subfig}
\usetikzlibrary{arrows,shapes,positioning}
\usetheme{boxes}
\usefonttheme[stillsansseriftext,stillsansserifsmall]{serif}
\setbeamerfont{frametitle}{size=\large,series=\bfseries,shape=\sf}

\definecolor{red}       {rgb}{.8,0,0}
\definecolor{blue}      {rgb}{0,0,.9}

\begin{document}

\begin{frame}[fragile]
\frametitle{C Program}
\begin{onlyenv}<1>
\begin{minipage}{\textwidth}
 \begin{minipage}{0.5\textwidth}
  \begin{lstlisting}     [language=C,keywordstyle=\color{red},escapechar=\!,basicstyle=\ttfamily\scriptsize]
    !\colorbox{blue}{x++;}!
  \end{lstlisting}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
  \begin{lstlisting}[language=C,keywordstyle=\color{red},escapechar=\!, basicstyle=\ttfamily\scriptsize]
    !\colorbox{red}{y++;}!
  \end{lstlisting}
 \end{minipage}
\end{minipage}
\end{onlyenv}
\begin{onlyenv}<2>
\begin{tikzpicture}[font=\footnotesize]
\node at (0,0) {$P_M$};
\node at (1,0) {$P_{W_1}$};
\node at (2,0) {$P_{W_2}$};
\draw (-1,-0.3) -- (3,-0.3);
\end{tikzpicture}
\end{onlyenv}
\end{frame}
\end{document}

관련 정보