\if\subject\subjectold 返回 false,尽管 subject 和 subjectold 应该相同

\if\subject\subjectold 返回 false,尽管 subject 和 subjectold 应该相同

我目前正在处理条件语句,但目前遇到了问题,因为即使不应使用条件参数(例如 \subject 应为“B”,\subjectold 和 \bio 也应为“B”),下面的测试仍返回 false。为什么会这样?有什么方法可以成功测试吗?

梅威瑟:

\documentclass[11pt,fleqn]{book}

\def\bio{B}
\def\math{M}
\begin{document}

%defining command subject
\newcommand{\subject}[0]{\bio}
\let\subjectold\subject
\renewcommand{\subject}[1][]{\bio
\if%if the subject is math use the optional argument
\subjectold\math #1
\fi}

%This test returns false
\if\subject\subjectold
    True
\else
    False
\fi
%Also returns false
\if\subject\bio
    True
\else
    False
\fi
\end{document}

答案1

\documentclass[11pt,fleqn]{book}

\def\bio{B}
\def\math{M}

如果您使用\newcommand而不是,\def您会被警告覆盖核心乳胶命令,如\math

\begin{document}

%defining command subject
\newcommand{\subject}[0]{\bio}
\let\subjectold\subject
\renewcommand{\subject}[1][]{\bio

这使得它\subject成为一个不可扩展的命令,需要提前查看[

\if%if the subject is math use the optional argument
\oldsubject\math #1

\if\oldsubject 将比较扩展中的前两个不可扩展标记\oldsubject ,但由于只有一个标记,因此它将 B 与 M 进行比较

\fi}

%This test returns false
\if\subject\subjectold

这是对前两个不可扩展标记的比较,\subject它们在前瞻过程中本质上是任意的内部分配,[同时跳过空格。

\subject与之进行比较\subjectold\ifx但带有可选参数的命令永远不会等于不带有可选参数的命令。

    True
\else
    False
\fi
%Also returns false

如上所述,\if\subject没有任何意义。

\if\subject\bio
    True
\else
    False
\fi
\end{document}#

相关内容