测试跳过是否具有无限拉伸/收缩组件

测试跳过是否具有无限拉伸/收缩组件

我想根据跳过是否包含特殊字符来实现 if-then-else。

到目前为止,我尝试了这个想法:将跳过转换为标记列表,并检查字母是否f在列表中。像这样:

\leftskip=10pt plus1fil\relax
\edef\mystring{\the\leftskip\the\rightskip}
\if\instring{f}{\mystring}\message{YES}\else\message{NO}\fi
\def\mystring{10.0pt plus 1.0fil}
\if\instring{f}{\mystring}\message{YES}\else\message{NO}\fi
\message{\the\leftskip}

我用\mystring如下定义:检查字符串是否包含给定字符

不幸的是,代码不起作用。日志文件包含NO而不是YES

NO
YES
10.0pt plus 1.0fil

我可能知道哪里错了,但现在是时候寻求一个更好的想法了:如何检测无穷大?

答案1

的 catcodef为 11(代表“字母”)。但是, 输出的标记的\thecatcode 为 12(其他字符),但空格除外,其 catcode 为 10。为了便于比较, 的 catcodef可以通过 进行“转换”12\string

\if\expandafter\instring\string f{\mystring}

使用 e-TeX 进行测试

e-TeX 提供\gluestretchorder\glueshrinkorder返回无穷大的顺序,例如的值\gluestretchorder反映了组件的无穷大plus

  • 0: 不filfill, ...
  • 1fil
  • 2fill
  • 3filll

可以通过以下方式测试跳过是否包含无限拉伸组件(\leftskip以跳过寄存器为例):

\ifnum\gluestretchorder\leftskip>0 %
  \message{YES}%
\else
  \message{NO}%
\fi

相关内容