\ifdefined...\fi 子句中存在 \begin...\end 的问题

\ifdefined...\fi 子句中存在 \begin...\end 的问题

我正在使用beamer,并且有一个如下所示的 LaTeX 代码。

\ifdefined\VAR
\begin{itemize}
   \item blahblab
\end{itemize}
\fi

这不能编译,并抛出一个错误:!不完整的 \ifx;第 61 行后的所有文本都被忽略。

行在61end{itemize}如果我删除 itemize 子句,如下所示。它起作用了(当然)...这里有人以前遇到过同样的错误吗?

\ifdefined\VAR
   blahblab
\fi

\ifdefined更新:如果我在...子句中放置一个单独的框架\fi,那么它不会抱怨任何事情。也许这说明了一些问题……

\ifdefined\VAR
\begin{frame}
\begin{itemize}
   \item blahblab
\end{itemize}
\end{frame}
\fi

UPDATE2:用于重现错误的独立示例代码......

\documentclass[]{beamer}
\usepackage{beamerthemesplit} 
\setbeamertemplate{headline}{}

\begin{document}
\begin{frame}
    \frametitle{Table of Contents}
    \ifdefined\VAR
    \begin{itemize}
       \item blahblab
    \end{itemize}
    \fi
\end{frame}
\end{document}

答案1

只要加上\begin{itemize} ... \end{itemize}牙套就可以起作用。

\documentclass[]{beamer}
\usepackage{beamerthemesplit}
\setbeamertemplate{headline}{}

\begin{document}
\begin{frame}
    \frametitle{Table of Contents}
    \ifdefined\VAR
      {
       \begin{itemize}
         \item blahblab
       \end{itemize}
      }
    \fi
\end{frame}
\end{document} 

答案2

对于beamerframe是一个特殊的环境,它以非标准方式处理。因此\end\end{itemize}导致条件配对错误(您得到的错误是Incomplete \ifx)。

您可以通过不让 LaTeX“看到”条件(或\end按照 karlkoeller 的建议隐藏在括号中)来解决该问题。

\documentclass[]{beamer}
\usepackage{beamerthemesplit}
\setbeamertemplate{headline}{}

\makeatletter
\newcommand{\addifdefined}[1]{%
  \ifdefined#1
    \expandafter\@firstofone
  \else
    \expandafter\@gobble
  \fi}
\makeatother

%\def\VAR{} % try also uncommenting this line

\begin{document}
\begin{frame}
\frametitle{Table of Contents}
\addifdefined\VAR{
  \begin{itemize}
  \item blahblab
  \end{itemize}
}
\end{frame}
\end{document}

相关内容