我需要在宏中创建一个简单的条件。如果#1
是“1”、“2”、“3”、“4”、“5”或“6”,则打印Text: #1
,否则不执行任何操作,即使它是空的。我尝试了以下代码:
\ifnum#1=1
Text:~#1
\if
我甚至无法检查是否1
存在。我如何检查#1
它是否等于“1”、“2”、“3”、“4”、“5”或“6”?
答案1
在您的评论中您指出 #1 可以为空
\ifnum#1=1
Text:~#1
\if
在这种情况下将会出现错误,但简单的更改为
\ifnum0#1=1
Text:~#1
\if
将使空参数为 Ok(并计为零)。请注意,这\macro{ 1}
将导致错误,因为\ifnum0 1=1
无效,因为0 1
不是有效数字。如果需要,可以插入额外的宏来删除虚假空格。
\ifnum0#1>0
\ifnum0#1<7
Text:~#1
\fi
\fi
答案2
对于有限范围的整数,其他可能性是空白或整数输入,我会选择
\catcode`\@=11 %
\long\def\@firstoftwo#1#2{#1}
\long\def\@secondoftwo#1#2{#2}
\long\def\macro#1{%
\ifnum 0#1 > 0 %
\ifnum 0#1 < 7 %
\expandafter\expandafter\expandafter\@firstoftwo
\else
\expandafter\expandafter\expandafter\@secondoftwo
\fi
\else
\expandafter\@secondoftwo
\fi
}
用作
\macro{}\TRUE\FALSE
\macro{0}\TRUE\FALSE
\macro{1}\TRUE\FALSE
\macro{6}\TRUE\FALSE
\macro{7}\TRUE\FALSE
答案3
我希望我正确理解了你的问题:
\def\myempty{}
\def\mynumber#1{%
\if#1\myempty
\else
\ifnum#1>0
\ifnum#1<7
Text:~#1
\fi\fi\fi}
This is \mynumber{0} \mynumber{4} \mynumber{7}
\end