设置新命令时“缺少 \begin{document}”

设置新命令时“缺少 \begin{document}”

我试图将此命令放入我的 LaTeX 文档中,但它导致编译器失败,并显示"Missing \begin{document}"

\newcommand{\C*}{\mathbb{C} \setminus \lbrace 0 \rbrace}

我也尝试过使用,\C0而不是\C*认为星号可能会导致问题,但错误消息没有任何变化。错误消息还说我无法使用\mathbb{.}数学模式之外的模式,而我并没有尝试这样做。\newcommand{\CC}{\mathbb{C}}在我的文档中使用效果很好,老实说,我不明白其中的区别,因此我不知道如何解决这个问题。

答案1

命令名称必须是字母或单个非字母,不能有命令\C*\C0

在前几次扩展之后,您的输入或多或少与此相同,从而产生相同的错误。

\documentclass{article}


\newcommand{\C}{}{*}{\mathbb{C} \setminus \lbrace 0 \rbrace}

\begin{document}

\end{document}

因此\C得到定义

 \newcommand{\C}{}

然后它开始一段带有符号的文本*,这会给出缺少文档的错误,因为您之前无法排版文本\begin{document}

{*}

然后如果你滚动过去,它会尝试排版

{\mathbb{C} \setminus \lbrace 0 \rbrace}

由于它不在数学模式,因此会出现错误。

答案2

您已经知道为什么它不起作用。如果您确实想要\C执行\mathbb{C}\C*执行\mathbb{C}\setminus\{0\},您可以轻松做到:

\usepackage{xparse}

\NewDocumentCommand{\C}{s}{%
  \mathbb{C}\IfBooleanT{#1}{\setminus\{0\}}%
}

我们\IfBooleanT{#1}检查是否存在*

完整示例

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{xparse}

\NewDocumentCommand{\C}{s}{%
  \mathbb{C}\IfBooleanT{#1}{\setminus\{0\}}%
}

\begin{document}

The set of complex numbers is $\C$. If we remove~$0$
we get $\C*$.

\end{document}

在此处输入图片描述

如果你愿意的话\C0,这里是:

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{xparse}

\NewDocumentCommand{\C}{t{0}}{%
  \mathbb{C}\IfBooleanT{#1}{\setminus\{0\}}%
}

\begin{document}

The set of complex numbers is $\C$. If we remove~$0$
we get $\C0$.

\end{document}

输出是一样的。

答案3

不知道如何解决这个问题

如果“修复”是指使用一个“其他”字符(例如 * 或 0)定义命令,则可以使用\@ifnextchar

\documentclass[a4paper, twocolumn]{article}
\begin{document}
  \makeatletter
    % What to do if there is a *
    % Need an argument to "eat" the *.
    % (so in the below, the argument #1
    % is the asterisk)
    \newcommand\CStar[2]{GotAStar and #2}
    % What to do otherwise
    \def\CNoStar{\relax}
    % Define \C and delegat what should happen
    % if it's followed by a *
    \def\C{\@ifnextchar*\CStar\CNoStar}
  \makeatother
  \C*{ARG}
\end{document}

以下问题的答案很好地解释了这里发生的事情:理解 \@ifnextchar

相关内容