假设您想根据布尔值定义页面样式。
我认为下面两种结构都有等效的输出(或者没有?),但是哪个更好/更适合/更专业/更优雅?
\if@mybool
\def\ps@myps{
% definition here
}
\else
\def\ps@myps{
% definition here
}
\fi
或者
\def\ps@myps{
\if@mybool
% definition here
\else
% definition here
\fi
}
答案1
两种结构不是相等的。
和
\if@mybool
\def\ps@myps{...T...}%
\else
\def\ps@myps{...F...}%
\fi
你根据它的真值来测试\if@mybool
和定义\ps@myps
。稍后在文档中更改该值不会改变 的定义\ps@myps
。
与此相反的,
\def\ps@myps{%
\if@mybool
...A...%
\else
...B...%
\fi
}
将产生...A...
或根据宏扩展时...B...
的真值。\if@mybool
使用哪一个取决于您需要实现什么。
对于第一个定义,如果 when\if@mybool
为真,
\@myboolfalse
\ps@myps
\@myboolfalse
\ps@myps
将生产...A...
两次。
根据第二个定义,上述代码将首先生成...B...
然后生成...A...
。
如果您正在编写一个包并且\if@mybool
在运行时由包选项设置,则很可能您想使用第一个模型,因为宏名称表明您正在尝试定义一个可能不应该在文档中间改变的页面样式。
\let
这种情况与和非常相似\def
。在执行指令时,\let\mymacro\another
您定义的\mymacro
是相同的。\another
\let
随着,当前时刻\def\mymacro{\another}
的含义被称为将被使用,其间可能会发生变化。\another
\mymacro