我想根据跳过是否包含特殊字符来实现 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(代表“字母”)。但是, 输出的标记的\the
catcode 为 12(其他字符),但空格除外,其 catcode 为 10。为了便于比较, 的 catcodef
可以通过 进行“转换”12
为\string
:
\if\expandafter\instring\string f{\mystring}
使用 e-TeX 进行测试
e-TeX 提供\gluestretchorder
并\glueshrinkorder
返回无穷大的顺序,例如的值\gluestretchorder
反映了组件的无穷大plus
:
0
: 不fil
,fill
, ...1
:fil
2
:fill
3
:filll
可以通过以下方式测试跳过是否包含无限拉伸组件(\leftskip
以跳过寄存器为例):
\ifnum\gluestretchorder\leftskip>0 %
\message{YES}%
\else
\message{NO}%
\fi