字符串比较中的 PGF 循环变量

字符串比较中的 PGF 循环变量

在一个更大的背景,我需要检查一个整数参数是否包含在一组数字中。我决定将集合编码为字符串;元素用 分隔!。我不知道这是否是最好的方法,但发生了一件奇怪的事情:

\documentclass{article}
\usepackage{pgffor,xifthen}

\newcommand{\ifin}[1]{
  \ifthenelse{\isin{!#1!}{!1!3!}}{T}{F}%
}

\begin{document}
\ifin{1}\ifin{2}\ifin{3}\ifin{4}

\foreach \n in {1,...,4} {%
  \ifin{\n}%
}
\end{document}

预期输出为

TFTF
TFTF

但实际输出是

TFTF
FFFF

请注意,pdflatex不会报告任何错误或警告。

我怀疑这是一个更普遍的问题(\isin检查字符串是否是其他字符串的子字符串;它可能会失败,因为参数是数字)但我找不到这方面的资料。我怎样才能实现所需的行为?

答案1

这是一个扩展问题:令牌\n不在您的列表中,您会同意的。

你必须沟通明确地您想要检查的价值\n不是名称\n

\foreach \n in {1,...,4} {%
  \expandafter\ifin\expandafter{\n}%
}

另一种方法是使用\edef(如\edef\temp{\noexpand\ifin{\n}}\temp)。

http://pgfplots.sourceforge.net/TeX-programming-notes.pdf有关扩展控制的详细信息。

\if*注意:如果命令在某些宏的深处使用,例如 ,我并不感到惊讶。这是由 TeX 的标记器引起的;该名称干扰了 TeX 处理布尔变量的方式。我建议使用不同的前缀(例如\raphaelifin)。

相关内容