NewDocumentCommand 中的数学模式解析

NewDocumentCommand 中的数学模式解析

我遇到了以下情况NewDocumentCommand来源)。

\NewDocumentCommand{\expn}{gg}{%
  \IfNoValueTF{#1}
    {%
      \Exp
    }
    {%
      \IfNoValueTF{#2}
      {%
        \Exp\!\left(#1\right)
      }
      {%
        \Exp{#2}\!\left(#1\right)
      }
    }%
}

当放入 overleaf 文档时,我注意到它从以下位置开始引发错误:

\left(#1\right)
      }
      {%
        \Exp{#2}\!\left(#1\right)
      }
    }%
}

错误信息是:

left can only be used in math mode

有人能帮忙修复这个错误吗?我是新手NewDocumentCommand

编辑:我被要求发布一个完全可复制的示例。请创建一个macros_math.tex文件和一个main.tex文件。放置macros_math.tex以下内容:

% Utility packages
\usepackage{amsmath,amssymb,amsthm,bm,bbm,amsfonts,mathtools} %math
\usepackage{xparse}
\usepackage{enumitem}

\usepackage{xspace} %used at the end of macros to automatically determine whether spaces should be eaten or 

\newcommand{\Exp}{\mathbb{E}}

% Expectation
\NewDocumentCommand{\expn}{gg}{%
  \IfNoValueTF{#1}
    {%
      \Exp
    }
    {%
      \IfNoValueTF{#2}
      {%
        \Exp\!\left(#1\right) % offending line in overleaf!
      }
      {%
        \Exp{#2}\!\left(#1\right)
      }
    }%
}

采取main.tex以下措施:

\documentclass{article}
\usepackage[utf8]{inputenc}

\input{macros_math.tex} % Import the math macros we created
\title{test}
\date{February 2019}

\begin{document}

\maketitle

\section{Introduction}
$\expn{X-Y}$ % Test - this works but overleaf does not like the way the macro is constructed
\end{document}

答案1

如果您不打算编译,则可以完全忽略这个错误macros_math.tex

Overleaf 将所有.tex文件解释为可能被编译成输出 PDF 的源文件。因此,它会解析文件以查看语法是否正确。由于它无法识别语法是\NewDocumentCommand可以在其他地方(例如在数学环境中)使用的宏定义的一部分,因此它假定使用\left\right错误地放置在数学模式之外并显示为错误:

在此处输入图片描述

解决此错误的一种方法是提供不同的扩展macros_math.tex,例如macros_math.sty

在此处输入图片描述

请记住也要将您的代码更改main.tex\input{macros_math.sty},或者更好的是\usepackage{macros_math}

相关内容