我遇到了以下情况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}
!