我编写了一个代码,定义了一个新环境,其中对齐的方程式通过线连接起来,如图所示:
我认为,当在对齐环境中需要在多行上拆分步骤时,它很有用,就像在第二个示例中一样:
它使用tikz
和amsmath
封装。线可以连接不同的数学符号,=
并且线宽可自定义。
我的问题是:
- 我最初编写此代码是为了学习,但后来我搜索了已包含此功能的软件包,却没有找到任何东西。您知道是否存在这样的软件包吗?
- 您认为这个功能有用吗?我该如何改进它?
- 如果第二点的答案是“是”,那么您认为最好编写一个具有此功能的包还是建议将其插入到包中
amsmath
?
编辑
\vdotswithin
提供的功能有所mathtools
不同,因为它vdots
在单独的行中添加了:
\usepackage{mathtools}
\begin{align*}
\prod_{z^n=-1}(w_1(z)^n+1) &= \prod_{z^n=-1}(w_1(z)^n+1) + \prod_{z^n=-1}(w_1(z)^n+1) \\
&\vdotswithin{=}\\
&= \prod_{z^n=-1}(w_1(z)^n+1)
\end{align*}
答案1
运行以下命令xelatex
:
\documentclass{article}
\usepackage{amsmath}
\usepackage{pst-node}
\begin{document}
\begin{align*}
\prod_{z^n=-1}(w_1(z)^n+1) & \rnode{A}{\;=\;} \prod_{z^n=-1}(w_1(z)^n+1)+\prod_{z^n=-1}(w_1(z)^n+1) \\
& \rnode{B}{\;=\;} \prod_{z^n=-1}(w_1(z)^n+1)\\
& \rnode{C}{\;=\;} mx+b\\
& \rnode{D}{\;=\;} Ax + By + C
\end{align*}
\psset{nodesepB=2pt}\ncline{A}{B}\ncline{B}{C}\ncline{C}{D}
\end{document}
答案2
从问题来看,如果没有给出代码,很难判断 OP 当前的实现有多容易/困难。所以我提出了这一点,意识到这可能是倒退。如果是这样,请提出建议,我会删除答案。
修改后的答案:
这里,我创建了三个宏\topeq
、\mideq
和\boteq
,每个宏都有一个可选参数。第一个宏从等号向下延伸一个短竖线,就好像它是列表中的顶部方程式;第二个宏向上和向下延伸一个短竖线;第三个宏向上延伸一个竖线,就好像它是列表中的最后一个方程式。对于文本样式的方程式,这应该足以解决问题。但是,如果方程式在显示样式中垂直延伸,竖线将太短,如下所示:
因此,每个宏的可选参数都是制作其中一个条的长度(对于\topeq
,它是 下方的条长度=
,对于\mideq
和\boteq
,它是延伸到 上方的长度=
)。
与我原来的解决方案相比,这种方法的优点在于,我们不需要知道垂直线的精确长度,而只需要让它足够长以覆盖相邻的垂直线。因此,可选参数长度通常只需精确到,比如说。1ex
另一个优点,正如前面提到的,是对于 textstyle 方程,不需要可选参数。
\documentclass{article}
\usepackage{amsmath}
\usepackage{stackengine}
\newcommand\topeq[1][1ex]{%
\mathrel{\stackunder[0pt]{=}{\smash{\rule[-#1]{.5pt}{#1}}}}%
}
\newcommand\boteq[1][1.5ex]{%
\mathrel{\stackon[1.6pt]{=}{\smash{\rule{.5pt}{#1}}}}%
}
\newcommand\mideq[1][1.5ex]{%
\mathrel{\stackon[1.6pt]{%
\stackunder[0pt]{=}{\smash{\rule[-1ex]{.5pt}{1ex}}}%
}{\smash{\rule{.5pt}{#1}}}}}
\begin{document}
\begin{align*}
\prod_{z^n=-1}(w_1(z)^n+1) &\topeq \prod_{z^n=-1}(w_1(z)^n+1) + \prod_{z^n=-1}(w_1(z)^n+1) \\
&\mideq[5ex] \prod_{z^n=-1}(w_1(z)^n+1)\\
&\mideq[4ex] mx+b\\
&\boteq Ax + By + C
\end{align*}
\end{document}
经过扩展的相同结果如下所示:
原始答案:
在这个 MWE 中,我实现了\coneq
(连接等号),它从等号向上绘制一条垂直线。缺点是用户必须指定垂直线的长度。优点是实现很简单。(我正在研究一个稍微修改过的概念,如果成功的话,我会发布)。
\documentclass{article}
\usepackage{amsmath}
\usepackage{stackengine}
\def\coneq#1{\mathrel{\stackon[2pt]{=}{\smash{\rule{.5pt}{#1}}}}}
\begin{document}
\begin{align*}
\prod_{z^n=-1}(w_1(z)^n+1) &= \prod_{z^n=-1}(w_1(z)^n+1) + \prod_{z^n=-1}(w_1(z)^n+1) \\
&\coneq{5.1ex} \prod_{z^n=-1}(w_1(z)^n+1)\\
&\coneq{4.5ex} mx+b\\
&\coneq{2.0ex} Ax + By + C
\end{align*}
\end{document}