如何检查宏是否扩展为大于常数的值?

如何检查宏是否扩展为大于常数的值?

假设我有一个循环:

\begin{tikzpicture}
  \foreach \frm \in {1,...,6}{ \only<\frm>{
    % if \frm > 4: set \x to 1, 0 otherwise
    \node (foo) at (10+5*\x,7) {hello};
  }}
\end{tikzpicture}

我想在给定的幻灯片上“移动”节点,但我很难找到合适的方法来表达 TeX 中注释中的条件。


编辑:我试过\ifthenelse但没有成功:

\node (foo) at (10+5*\ifthenelse{\frm<5}{0}{1},7) {hello};

出现此错误,我根本无法解析

! Use of \beamer@only doesn't match its definition.
\new@ifnextchar ...served@d = #1\def \reserved@a {
                                                  #2}\def \reserved@b {#3}\f...

答案1

以下技巧应该可以解决问题。我稍微修改了坐标,以便它们保留在屏幕上。

\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}[fragile]
\begin{tikzpicture}
  \foreach \frm in {1,...,6}{
    \draw (0,0) node {origin};
    \only<\frm>{
    % if \frm > 4: set \x to 1, 0 otherwise
    \ifnum\frm>4\relax\def\x{1}\else\def\x{0}\fi%
    \node (foo) at (5+5*\x,7) {hello};
  }}
\end{tikzpicture}
\end{frame}

\end{document}

答案2

我不知道您为什么这样做,而且我猜这是在投影仪演示中进行的,因此下面的操作似乎可以实现您想要的效果。

\documentclass{beamer}
    \usepackage{tikz}
    \begin{document}

\begin{frame}{title}
    \begin{tikzpicture}
    \foreach \frm in {1,...,6}{ 
    \onslide<\frm>{
    % if \frm > 4: set \x to 1, 0 otherwise
    \pgfmathparse{\frm > 4? 1 : 0}
    \node (foo) at (10 + 5*\pgfmathresult,7) {hello};
        }
    }
\end{tikzpicture}
\end{frame}
\end{document}

相关内容