![命令 \p 定义错误,但也是未定义的](https://linux22.com/image/460199/%E5%91%BD%E4%BB%A4%20%5Cp%20%E5%AE%9A%E4%B9%89%E9%94%99%E8%AF%AF%EF%BC%8C%E4%BD%86%E4%B9%9F%E6%98%AF%E6%9C%AA%E5%AE%9A%E4%B9%89%E7%9A%84.png)
我正在使用 Springer Nature Latex 模板:https://www.overleaf.com/latex/templates/springer-nature-latex-template/gsvvftmrppwq。
\usepackage{amsmath, amsfonts, dsfont}
\usepackage{blindtext}
\usepackage{xcolor}
\usepackage{mathtools}
\usepackage{comment}
\usepackage{amsthm}
\usepackage{algorithm, algpseudocode}
\usepackage{caption, subcaption}
\usepackage[export]{adjustbox}
\usepackage{multirow}
\usepackage{graphicx}
\graphicspath{{images/}}
\usepackage{xr}
\usepackage{subfiles}
\newcommand{\E}{\mathbb{E}}
\newcommand{\p}{\mathbb{P}}
\newcommand{\Reals}{\mathbb{R}}
不幸的是,我收到了错误消息./sn-article.tex:75: LaTeX Error: Command \p already defined. Or name \end... illegal, see p.192 of the manual.
但是,如果我调用$\p$
或\p
,我会得到./sn-article.tex:193: Missing $ inserted. <inserted text>
。
谢谢!
答案1
宏(或者至少是通过\def
、\newcommand
或朋友定义的宏)不能同时被定义和取消定义。
如果我通过在代码片段前加上前缀\documentclass[default]{sn-jnl}
和后缀使其最低限度地可编译\begin{document} \show\p \end{document}
,我会得到以下输出(写入屏幕和日志文件,但不会写入 pdf 文件):
> \p=macro:
#1->\mathrel {\ooalign {\hfil $\mapstochar \mkern 5mu$\hfil \cr $#1$}}.
l.23 \show\p
该宏接受一个参数,并且应该在数学模式下使用,因为它的“最外层”组成指令是\mathrel
。
补充:未在 LaTeX 内核或标准 LaTeX 文档类( 、和)\p
中定义。而是定义为文档类的一部分。article
report
book
\p
sn-jnl
如果你不关心这个宏,也不介意破坏它——警告:自行承担风险!——你可以简单地替换
\newcommand{\p}{\mathbb{P}}
和
\renewcommand{\p}{\mathbb{P}}
\p
但是,破坏现有宏通常是不明智的。请考虑为文档主体中使用的宏取一个名称以外的名称。