___ 的使用与其定义不符

___ 的使用与其定义不符

经过一段时间的中断后,我又回到了 LaTeX。目前运行的是 Mac OS High Sierra (10.13.16) 和 TexShop 4.26。过去,我使用过以下定义命令

% In pre-amble
\def\m3{m$^3$}

% In text
Blah...blah...blah..$\m3$

但我现在收到错误:“\m 的使用与其定义不符。”出于某种原因,LaTeX 没有识别“\m3”中的“3”。

我也尝试过用 \newcommand 代替 \def,但还是不行。有一段时间,这感觉就像一个非常基本的 LaTeX 工具。我做错了什么?

以下是我的设置的更多细节:

\documentclass[]{article}

\usepackage{amsmath}
\usepackage{natbib}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{url}
\usepackage{setspace}

%~~~~~~~~~~~~~~~~~~~~    PREAMBLE    ~~~~~~~~~~~~~~~~~~~~~
% definitions
%--- units ---
\def\m3{m$^3$}
\def\m3yr{\textrm{m}$^3$\textrm{yr}$^{-1}$}


% ~~~~~~~~~~~~~~~~~~~~ MAIN TEXT ~~~~~~~~~~~~~~~~~~~~~
Over 26 million $\m3$....

尽管我无法在我的手稿中实现这一点,但以下独立代码确实有效:

\documentclass[]{article}

\def\m3{m$^3$}

\begin{document}
\m3
\end{document}

并产生我正在寻找的 m^3,如下所示

在此处输入图片描述

所以我想我仍然不确定为什么它在这个独立版本中有效而在我的版本中无效,尽管我从你们中的一些人那里听说,无论哪种方式,这都不符合定义的形式和功能。

如果那些将此标记为重复的人链接到重复的页面,我将不胜感激,因为我在发布之前进行了一些搜索,但似乎没有找到我想要的内容。查看哪些内容被视为重复可以帮助我学习。谢谢。

答案1

您的定义\def\m3实际上是宏的定义\m,它假设字符3紧随其后(它是参数文本,以 TeX 为标准)。它不是宏名的一部分。

定义 也是如此\def\m3yr。在这里,您覆盖 的定义\m并给出不同的参数文本3yr。因此,每次后续调用 后都\m必须跟字符3yr

然后,您在文档中尝试调用第一个定义\m3而不使用以下内容yr,这会导致 TeX 报告的使用\m与其(第二个)定义不匹配。


编辑:您的任一定义都可以工作(但这不是推荐的语法,您应该定义一个命令\miii或一个接受参数的命令)。但是只要您使用两个都代码中的定义,这个概念将会失败。

如果您确实必须使用这种语法,则必须定义一个\m使用以下字符向前查找的命令\@ifnextchar

\documentclass[a4paper,12pt]{article}

\makeatletter
\newcommand\m{\@ifnextchar{3}{\m@iii@}{m}}
\def\m@iii@ 3{\@ifnextchar{y}{\m@iii@y}{\m@iii}}
\def\m@iii@y y{\@ifnextchar{r}{\m@iii@yr}{\m@iii y}}
\def\m@iii@yr r{\textrm{m}$^3$\textrm{yr}$^{-1}$}
\def\m@iii{m$^3$}
\makeatother

\begin{document}
\m, \m3, \m3y, \m3yr, \m3{yr}
\end{document}

输出

在此处输入图片描述

相关内容