Beamer:不能在 if 语句中使用 itemize

Beamer:不能在 if 语句中使用 itemize

梅威瑟:

\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

框架非常脆弱,错误率相当低。

\documentclass{beamer}

\begin{document}

    \begin{frame}[fragile]
        \ifdim\textwidth=\textheight
            equal
        \else
            \begin{itemize}
                \item unequal
            \end{itemize}
        \fi
    \end{frame}
\end{document}

在此处输入图片描述

答案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 逻辑,以避免先前遇到的错误。

相关内容