我目前正在处理条件语句,但目前遇到了问题,因为即使不应使用条件参数(例如 \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}#