测试单面或双面文档

测试单面或双面文档

看完之后基本关于 catcode 我开始使用条件语句来自动设置前导码。令人惊讶的是,当我夹住命令时,我确实得到了错误Undefined control sequence. \if@oneside,而且命令中还有 @:

\makeatletter % ??? why does it only work without catcode sandwich
\if@oneside\newcommand{\onetwoside}{oneside} \else\newcommand{\onetwoside}{twoside}\fi  % Autoset var for later according to choosen layout
\makeatother

直接使用 if 就可以了。在哪里可以找到这方面的资料?

答案1

正如您所说,如果您不使用\makeatletter...\makeatother一切“有效”(可以这么说……)。如果您调用,\onetwoside您将得到“twoside”(尝试!)。

发生了什么?没有\makeatletter...\makeatother这个@,它就不是字母,因此也不是命令的一部分。人眼读到的\if@onesideTeX 标记列表

\if @ o n e s i d e等等。

\if开始读取并比较以下两个标记:(@类别代码 12)和o(类别代码 11)。它们肯定不一样,\if条件计算结果为 false,跳过剩余的标记(neside依此类推)并跳转到分支\else

如果您使用\makeatletter\makeatotherTeX尝试评估\if@oneside不存在的(LaTeX 定义\if@twoside),则会出现错误。

相关内容