现在我们来谈谈另一个一直困扰我的问题。
\documentclass[a4paper]{article}
\usepackage{amsmath,environ}
\def\storer#1{\def\data{#1}}
\makeatletter
\newenvironment{test}{\Collect@Body\storer}{%
\begin{pmatrix}
\data
\end{pmatrix}
}
\makeatother
\begin{document}
This works
\begin{equation*}
\begin{test}
a & b \\ c & d
\end{test}
\end{equation*}
This does not
\begin{align*}
\begin{test}
a & b \\ c & d
\end{test}
\end{align*}
\end{document}
原因是,我想制作可扩展的矩阵,即我不想添加\scalebox{...}{....}
矩阵,这不是一个好的用户界面。
目前我正在使用一种利用lrbox
和的解决方案varwidth
,虽然它可以起作用,但并不美观。
约瑟夫·赖特提到,这可能与双重排版巫术有关align
。
有想法吗?
答案1
最简单的方法是使用
\begin{align*}
{\begin{test}
a & b \\ c & d
\end{test}}
\end{align*}
使用额外的支撑组,它就可以工作了。
失败的原因本质上是外部对齐不知道测试环境是一个对齐,因此&
将其作为外部对齐的一部分,从而导致出错。
也许可以通过添加一些来避免显式分组
\ifnum0=`}\fi
某处的群体,但AMS对齐是脆弱的野兽(已经在收集环境体来测量事物,因此在内部再次进行测量有点微妙(并且可能效率低下)您最好挂接到信息\if@mesuring
并提取对齐已经收集的数据,而不是重新测量。
添加群组的版本ifnum
:
\documentclass[a4paper]{article}
\usepackage{amsmath,environ}
\def\storer#1{\def\data{#1}}
\makeatletter
\newenvironment{test}{%
\iffalse{\fi\ifnum 0=`}\fi
\Collect@Body\storer}{%
\begin{pmatrix}
\data
\end{pmatrix}%
\ifnum0=`{}\fi
}
\begin{document}
This works
\begin{equation*} \begin{test} a & b \\ c & d \end{test}\end{equation*}
This does not
\begin{align*}
\begin{test}
a & b \\ c & d
\end{test}
\end{align*}
\end{document}