缺少数字,使用 renewcommand 时视为零

缺少数字,使用 renewcommand 时视为零

我正在尝试暂时读取我论文中的边注。

我尝试简单\renewcommand{\marginpar}[]{}但得到以下结果:

! Missing number, treated as zero.<to be read again>} \renewcommand{\marginpar}[]{}

我不知道为什么会出现此错误,因为它通常会编译我的 pdf 而不会出现错误。你们有什么想法吗?

提前致谢

答案1

为了\marginpar正确摆脱(假设其通常的定义),你需要尝试

\renewcommand{\marginpar}[2][]{}

的确切语法\(re)newcommand已在其他地方进行了解释(例如\newcommand 参数混淆)比我能做的好得多,所以让我简单回顾一下,通常的语法\(re)newcommand

\newcommand{<command>}[<number of arguments>][<optional value>]{<definition>}

方括号中的两个参数都是可选的 - 如果只有一个可选参数,则将其解释为第一个可选参数。

<number of arguments>给出接受的参数数量<command>,如果存在,则必须是数字。这就是导致示例中出现错误的原因,不能将方括号留空。如果<optional value>存在附加项,则的第一个参数<command>将成为可选参数,如果不存在,则假定为可选参数<optional value>(可选参数通常在方括号中给出,强制参数在花括号中给出)。

这意味着用 定义的命令\(re)newcommand将始终具有以下参数结构之一

\foo                    % no argument at all
\foo{m_1}               % one mandatory argument
\foo[o_1]               % one optional argument
\foo{m_1}{m_2}...{m_n}  % n \leq 9, two to nine mandatory arguments
\foo[o_1]{m_1}...{m_n}  % n \leq 8, one optional argument and one to eight mandatory arguments

(La)TeX 中还有其他参数结构,但必须以不同的方式编码。讽刺的是,\newcommand它本身使用了一种非常不同的结构。

\marginpar具有以下参数规范

\marginpar[<LTEXT>]{<RTEXT>}

这意味着它的结构可以\renewcommand直接用带有两个参数的宏来重新定义,其中第一个参数是可选的。


乌尔里希·迪茨在评论中提出了一个很好的观点,即需要注意间距。 的默认定义是\marginpar为了\@bsphack...\@esphack避免不必要的空白,请参阅如何使命令完全空/不可见/不存在?。如果你想复制这种行为,在禁用时不改变间距\marginpar,你需要更复杂的

\makeatletter
\renewcommand{\marginpar}[2][]{\@bsphack\@esphack}
\makeatother

是否有必要,取决于您具体如何使用\marginpar以及禁用它的需求和意图。如果只是为了快速测试,您就不必费心了,如果是为了最终打印版本,那就另当别论了。

相关内容