我想评估我的变量 \x(来自 foreach 循环)是否与我当前的节号相同。我试过
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{totcount}
\regtotcounter{section} % total amount of sections
\begin{document}
\begin{frame}
\section{This is the first section} \label{sec:this_is_the_first_section}
Some Text.
\section{This is the second section} \label{sec:this_is_the_second_section}
Some Text.
\section{This is the third section} \label{sec:this_is_the_third_section}
Some Text.
\foreach \x in {1,...,\totvalue{section}}{
\arabic{section} = \x
\ifx\x\value{section}
check
\else
no
\fi}
\end{frame}
\end{document}
但这总是返回“否”,而在最后一种情况下它应该返回“检查”。我是否必须使用不同形式的“if”-case(我试过
\ifnum{\value{\x}}={\value{section}}
但编译不通过)还是我试图比较无法这样比较的不同变量类型?比较值的正确命令行是什么?
答案1
你没有\ifnum
正确使用。它可能有效,但根据情况,也可能无效。正确的用法是
\ifnum\x=\value{section}
这样,第一个数字\x
由 分隔,=
而第二个数字\value{section}
不需要分隔,因为它具有内部 TeX 计数。
答案2
从不同的编程语言转到 TeX 可能是一种艰难的体验,因为 TeX 中的条件有点奇怪。
如果你想比较两个整数,要使用的条件是\ifnum
需要语法
\ifnum<integer><relation><integer>
没有将整数括起来,因此你的测试应该是
\ifnum\x=\value{section}
%
(如果您不想在换行符处留有空格,请不要忘记尾随)。
请注意,这\value
不是一个通用的“提取器”,而是一个非常具体的 LaTeX 宏,只有当它的参数是一个用 定义的 LaTeX 计数器时,它才有效\newcounter
,其扩展是“抽象”值。
类似地,\arabic
是一个用于访问计数器的十进制表示的 LaTeX 宏;它可能<integer>
可以在这里使用,但由于多种原因(主要原因是终止规范)不推荐。
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{totcount}
\regtotcounter{section} % total amount of sections
\begin{document}
\begin{frame}
\section{This is the first section} \label{sec:this_is_the_first_section}
Some Text.
\section{This is the second section} \label{sec:this_is_the_second_section}
Some Text.
\section{This is the third section} \label{sec:this_is_the_third_section}
Some Text.
\foreach \x in {1,...,\totvalue{section}}{%
\ifnum\x=\value{section}%
check
\else
no
\fi
}
\end{frame}
\end{document}
注意我添加的;带有和 的%
行将添加一个空格,因为行尾没有被屏蔽。最后一个空格将消失,因为它位于段落末尾。check
no