梅威瑟:
\documentclass{beamer}
\begin{document}
\begin{frame}
\ifdim\textwidth=\textheight
equal
\else
\begin{itemize}
\item unequal
\end{itemize}
\fi
\end{frame}
\end{document}
上述代码片段导致编译失败,并出现以下错误:
! Incomplete \ifx; all text was ignored after line 11.
<inserted text>
\fi
<*> test.tex
The file ended while I was skipping conditional text.
This kind of error happens when you say `\if...' and forget
the matching `\fi'. I've inserted a `\fi'; this might work.
! Emergency stop.
<*> test.tex
*** (job aborted, no legal \end found)
但是,当我在纯文本文档中使用相同的 if 构造scartcl
或者用一些纯文本替换 itemize 环境时,编译就可以正常工作。
因此,看起来 beamer 以某种方式修改了itemize
环境,从而以某种方式干扰了我的 if 语句。
有人知道这里到底发生了什么以及如何解决这个问题?
答案1
答案2
虽然我还不知道为什么上述 MWE 失败(我只能假设 beamer 在其修改版本中使用了一些 if-wizardry,itemize
干扰了我添加到代码中的外部 if 语句),我至少找到了一种利用包中定义的宏的解决方法etoolbox
:
\documentclass{beamer}
\usepackage{etoolbox}
\begin{document}
\begin{frame}
\ifdimcomp{\textwidth}{=}{\textheight}{%
equal
}{%
\begin{itemize}
\item unequal
\end{itemize}
}
\end{frame}
\end{document}
这似乎充分地封装了不同分支中发生的事情的外部 if 逻辑,以避免先前遇到的错误。