我正在使用beamer
,并且有一个如下所示的 LaTeX 代码。
\ifdefined\VAR
\begin{itemize}
\item blahblab
\end{itemize}
\fi
这不能编译,并抛出一个错误:!不完整的 \ifx;第 61 行后的所有文本都被忽略。
行在61
。end{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
对于beamer
,frame
是一个特殊的环境,它以非标准方式处理。因此\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}