我查看了解决方案如何在自定义环境中嵌入收集环境? 但事情对我来说仍然不起作用:
梅威瑟:
\documentclass[border=6pt]{standalone}
\usepackage{amsmath}
\newenvironment{mygather}
{%%
\begin{minipage}{2in}
\csname gather*\endcsname
}{%%
\csname endgather*\endcsname
\end{minipage}%%
}
\begin{document}
\begin{mygather}
y = x^{2} - 3x + 5
\end{mygather}
\end{document}
答案1
该\gather*
命令发现它在minipage
环境中,因此向前查找 。但直到执行时\end{minipage}
它才存在,因此继续查找。以下可能有效:\end{mygather}
\gather*
\newenvironment{mygather}
{%%
\minipage{2in}
\csname gather*\endcsname
}{%%
\csname endgather*\endcsname
\endminipage%%
}
在此重写中,\minipage
不是环境。封闭环境是mygather
,因此\gather*
向前查找\end{mygather}
,并找到它。我说它“可能有效”,因为尽管它可以很好地编译,并且 MWE 中没有错误,但我真的不知道你想要实现什么。
答案2
当您使用 时\csname gather*\endcsname
,amsmath
它足够聪明,能够知道它在哪个环境中被调用,从而吸收所有文本,直到\end
出现相应的命令。对于您的代码,它确定已在 中调用minipage
,但它无法看 \end{minipage}
,它埋藏在结尾的代码里。
因此,就像 Dan 建议的那样,您可以使用\minipage
和\endminipage
。但这不会给出良好的输出(我\fbox
在它周围添加了以下内容只是为了清楚地显示问题):
这是为什么呢?因为你用一个显示来开始一个段落,这是不应该的。
解决方法是备份\baselineskip
\documentclass[border=6pt]{standalone}
\usepackage{amsmath}
\newenvironment{mygather}
{%%
\minipage{2in}
\vspace{-\baselineskip}
\csname gather*\endcsname
}{%%
\csname endgather*\endcsname
\endminipage
}
\begin{document}
\fbox{\begin{mygather}
y = x^{2} - 3x + 5
\end{mygather}}
\end{document}
一个更简单的方法是
\documentclass[border=6pt]{standalone}
\usepackage{amsmath}
\newenvironment{mygather}
{%%
\minipage{2in}
\centering$\!\gathered
}{%%
\endgathered$
\endminipage
}
\begin{document}
\fbox{\begin{mygather}
y = x^{2} - 3x + 5
\end{mygather}}
\end{document}