我正在尝试定义一个由环境split
内部的环境组成的新环境equation
。但我遇到了错误。以下是我所做的:
\documentclass[a4paper,12pt]{article}
\usepackage[brazil]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\newenvironment{example}{\begin{equation}\begin{split}}{\end{split}\end{equation}}
\begin{document}
\begin{example}oi\end{example}
\end{document}
我收到的错误信息是:
ERROR: LaTeX Error: \begin{split} on input line 8 ended by \end{example}.
然后我尝试了其他几种情况。如果我删除split
s 并定义example
为equation
,它运行良好。如果我删除equation
s 并定义example
为split
,我会收到完全相同的错误消息。
换句话说:只有split
涉及到时才会出现此错误。有办法解决此问题吗?
编辑:我这样做的原因是我想要一种方便的方式来创建split
-equations。我知道它类似于align
。我更喜欢split
-equations,因为整行方程式都有一个数字用于引用(它甚至放在中间行)。align
但是,会迫使我使用\notag
每一行,否则我会为方程式中的每一行得到一个数字(当方程式很长且很多时,这往往会变得混乱)。这不是世界末日,但split
-equation
组合更快捷、更简单(如果我能设法为其定义一个命令)。
或者说,该multline
环境也不合适,因为它不允许您手动对齐每一行(如对齐等号)。相反,它只允许您将所有内容向左或向右推。
EDIT2:我刚刚尝试过这个:
\newenvironment{example}{ \begin{equation}\split}{\endsplit \end{equation}}
并出现此错误
ERROR: LaTeX Error: \begin{equation} on input line 8 ended by \end{example}.
这很奇怪,因为完全删除\split
和\endsplit
不会返回任何错误(所以这不是equation
的错)。
答案1
我没有想到这一点,但答案很简单;感谢 Stefan Kottwitz!(感谢 Will Robertson 编写了environ
我以前从未听说过的软件包。他应该给出这个答案;有了他的软件包,这个软件包就可以很好地运行。)
\documentclass{article}
\usepackage{amsmath,environ}
\NewEnviron{example}{%
\begin{equation}\begin{split}
\BODY
\end{split}\end{equation}
}
\begin{document}
\begin{example}
a &= b + c \\
&= d + e
\end{example}
\end{document}
在上述链接后面的 Stefan 的帖子中可以找到一些解释。
答案2
\begin{split} ... \end{split}
当在另一个环境的开始和结束部分调用时不起作用的原因\begin ... \end
与“amsmath 包技术说明”(texdoc technote)中给出的原因有关——解析需要与指定的环境完全匹配\begin{...}
。
从技术说明中的当前文档来看,这并不是很明显,但添加它是个好主意,我会尝试安排这样做。
答案3
该split
环境必须在数学显示环境中使用。我猜你想做的是创建一个快捷方式,这样你就不必写
\begin{equation}
\begin{split}
...
\end{split}
\end{equation}
每次。
也许 的替代方案split
是aligned
环境,它还允许您将一系列公式对齐在等号上,并将其放在环境中equation
,您还可以获得整个表达式的单个方程编号。幸运的是,它aligned
没有解析问题,split
并且可以很好地与新的环境定义配合使用。
\usepackage{amsmath}
\newenvironment{equations}{\equation\aligned}{\endaligned\endequation}
\begin{equations}
a &= b + c \\
&= d + e
\end{equations}
当然,你随时可以通过输入以下命令阅读 amsmath 的文档
texdoc amsldoc
在命令行上寻找灵感并浏览替代方案。
答案4
关于 Juan 的回答:使用equation
and声明新环境aligned
确实有效,但它引入了一些额外的间距问题。它似乎在等式后面的文本中包含了一个空格(小于缩进)。我将引用相关维基百科页面:
创建新环境时,您可能很容易被多余的空格所困扰,这可能会造成致命的后果。例如,当您想要创建一个标题环境时,它会抑制其自身的缩进以及下一段的缩进。
\ignorespaces
环境的 begin 块中的命令将使其在执行 begin 块后忽略任何空格。end 块有点棘手,因为在环境结束时会发生特殊处理。使用 LaTeX 将在发生特殊“end”处理后\ignorespacesafterend
发出\ignorespaces
在新环境中包含ignorespaces
定义似乎表现得很奇怪。处理这个微妙的间距问题似乎太麻烦了,只使用快捷方式。我建议写出完整的
\begin{equation}
\begin{aligned}
...
\end{aligned}
\end{equation}
使用自动完成功能,例如 TexWorks 或 TeXShop。(\begin{align}\begin{split}
在我们没有定义新环境的情况下似乎同样好。)这还有一个额外的好处,就是更容易被其他人阅读(例如,一本期刊)查看你的 LaTeX。