找回密码
 快速注册
搜索
查看: 138|回复: 18

如何在 align 中对齐$\iff$和$\impliedby$?

[复制链接]

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

APPSYZY 发表于 2022-12-10 00:47 |阅读模式
本帖最后由 APPSYZY 于 2022-12-10 00:56 编辑 \begin{align*}
    &A\\
    \iff&A\\
    \implies&A\\
    \iff&A\\
    \impliedby&A\\
    \iff&A.
\end{align*}

以上述图示为例,$\iff$与$\implies$是居中对齐的,但$\impliedby$并未与它们居中对齐,如何解决这一问题?请教!

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 02:25
哪有什么居中对齐,这明明是右对齐,align 第一列就是右对齐,所以才使 `\iff` 和 `\implies` 很齐。

换一种写法的话,当它们在第二列,情况就反过来了:
\begin{align*}
A & \iff\\
A & \implies\\
A & \iff\\
A & \impliedby\\
A
\end{align*}
  1. \begin{align*}
  2. A & \iff\\
  3. A & \implies\\
  4. A & \iff\\
  5. A & \impliedby\\
  6. A
  7. \end{align*}
复制代码


一般来说 `\implies` 和 `\impliedby` 很少同时出现在一个多行公式里面,所以通常看情况选合适的写法就行了。
\begin{align*}
what \iff & the \\
\implies & fuck
\end{align*}
  1. \begin{align*}
  2. what \iff & the \\
  3. \implies & fuck
  4. \end{align*}
复制代码

\begin{align*}
what & \iff the \\
& \impliedby fuck
\end{align*}
  1. \begin{align*}
  2. what & \iff the \\
  3. & \impliedby fuck
  4. \end{align*}
复制代码


如果想一劳永逸,可以考虑重新定制 `\riff` 和 `\liff` 这两个符号,让它和 `\iff` 一样长就不存在这些问题了。
(当然这得在真 LaTeX 里进行,有需要再说吧……

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 10:55
本帖最后由 APPSYZY 于 2022-12-10 11:09 编辑
kuing 发表于 2022-12-10 02:25
哪有什么居中对齐,这明明是右对齐,align 第一列就是右对齐,所以才使 `\iff` 和 `\implies` 很齐。

换一 ...


出现的第一个问题:
\begin{align*}
    A\subset C\iff&x\in B\\
    \implies&x\in B\\
    \iff&A\subset C\\
    \iff&C\subset C.
\end{align*}
第一行$\iff$左侧的空白比所有右侧的空白都要更大。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 10:58
本帖最后由 APPSYZY 于 2022-12-10 11:08 编辑
kuing 发表于 2022-12-10 02:25
哪有什么居中对齐,这明明是右对齐,align 第一列就是右对齐,所以才使 `\iff` 和 `\implies` 很齐。

换一 ...


出现的第二个问题:
\begin{align*}
    A\subset C&\iff x\in B\\
    &\impliedby x\in B\\
    &\iff x\in B\\
    &\iff A\subset B.
\end{align*}
这回变成第一行$\iff$右侧的空白比左侧大了,且第二行右侧和其他几行没有对齐。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 11:02
$A\subset C\iff x\in B$ 可见正常情况下两侧的空白都是较大的那种。

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 15:02
APPSYZY 发表于 2022-12-10 10:55
出现的第一个问题:
\begin{align*}
    A\subset C\iff&x\in B\\


关于第一个问题,只要在 \iff 后面加 {} 即可。
理由参见:kuing.cjhb.site/forum.php?mod=viewthread&tid=8333
  1. \begin{align*}
  2.     A\subset C\iff{}&x\in B\\
  3.     \implies{}&x\in B\\
  4.     \iff{}&A\subset C\\
  5.     \iff{}&C\subset C.
  6. \end{align*}
复制代码

\begin{align*}
    A\subset C\iff{}&x\in B\\
    \implies{}&x\in B\\
    \iff{}&A\subset C\\
    \iff{}&C\subset C.
\end{align*}

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 15:11
APPSYZY 发表于 2022-12-10 10:58
出现的第二个问题:
\begin{align*}
    A\subset C&\iff x\in B\\


关于第二个问题:
分开两点说,第一点:
第一行右侧的空白比左侧大了
这其实是 Mathjax3 的 bug。
4# 的代码真 LaTeX 里不存在第一行这个间距问题,效果为:



第二点:
第二行右侧和其他几行没有对齐
根本原因还是符号长度不同造成的,所以如果要求这么高的话,还是得考虑重定制符号。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 15:20
本帖最后由 APPSYZY 于 2022-12-10 15:26 编辑
kuing 发表于 2022-12-10 15:11
关于第二个问题:
分开两点说,第一点:这其实是 Mathjax3 的 bug。
4# 的代码真 LaTeX 里不存在第一行这 ...


在$\iff$左侧插入 $,为什么不会和在右侧插入 \$ 时一样,产生间距太短的问题呢?

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 15:26
APPSYZY 发表于 2022-12-10 15:20
在$\iff$左侧插入 $,为什么不会和在右侧插入 $ 时一样,产生间距太短的问题呢? ...

认真看 6# 链接的解释。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 15:31
本帖最后由 APPSYZY 于 2022-12-10 15:54 编辑
kuing 发表于 2022-12-10 15:26
认真看 6# 链接的解释。


看懂了,不过为什么 amsmath 设计者不在右侧也做同样的设计……

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 15:38
kuing 发表于 2022-12-10 15:11
关于第二个问题:
分开两点说,第一点:这其实是 Mathjax3 的 bug。
4# 的代码真 LaTeX 里不存在第一行这 ...


为了解决符号长度不统一的问题,假设$\iff$超出$\impliedby$的长度为 $\Delta$,能否在$\impliedby$后面加上一段长度为 $\Delta$ 空白?如果可以,那么这个长度差 $\Delta$ 该如何计算呢?

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 16:38
不用计算长度,用 phantom + lap 就好了。
新建命令:
  1. \newcommand\Rff{\mathrel{\phantom{\iff}\llap{$\implies$}}}
  2. \newcommand\Lff{\mathrel{\rlap{$\impliedby$}\phantom{\iff}}}
复制代码

正文里:
  1. \begin{align*}
  2. A & \iff B\\
  3.   & \Rff B\\
  4.   & \iff B\\
  5.   & \Lff B\\
  6. \end{align*}
复制代码

它们只在这种情况下用,平常用旧的。

效果:

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 17:49
kuing 发表于 2022-12-10 16:38
不用计算长度,用 phantom + lap 就好了。
新建命令:

大开眼界,非常感谢 kuing!

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 19:10
还可以利用 xymatrix 来玩,只是那箭头与原先的稍微有点儿不同。

首先导言区写上:
  1. \usepackage[all]{xy}
  2. \newcommand\xyiff[1][<=>]{\xymatrix@C=1.7em{\ar@{#1}[r]&}}
复制代码

正文:
  1. \begin{align*}
  2. A & \iff B\\
  3.   & \xyiff B\\
  4.   & \xyiff[=>] B\\
  5.   & \xyiff[<=] B
  6. \end{align*}
复制代码

效果:
QQ截图20221210191316.png
不仔细看应该看不出箭头的不同。

PS、@C=1.7em 这个数字只是大概写的,不是精确地与 `\iff` 一样长的,两边空白也不一定准确,只是写来玩玩,就不讲究那么多了。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 19:30
本帖最后由 APPSYZY 于 2022-12-10 19:48 编辑
kuing 发表于 2022-12-10 19:10
还可以利用 xymatrix 来玩,只是那箭头与原先的稍微有点儿不同。

首先导言区写上:


话说,当一页纸上使用了三次 align* 环境,这时如何让这三组“连等式”的等号都对齐呢?比如:
OKKKKKKKKKKK,
\begin{align*}
    A&=A\\
    &=A.
\end{align*}
OKKKKKKKKKKK,OKKKKKKKKKKK,
\begin{align*}
    AAAAAAAA&=A\\
    &=A.
\end{align*}
OKKKKKKKKKKK,OKKKKKKKKKKK,OKKKKKKKKKKK,
\begin{align*}
    AAAAAAAA&=AAAAAAAA\\
    &=A.
\end{align*}

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 23:29
APPSYZY 发表于 2022-12-10 19:30
话说,当一页纸上使用了三次 align* 环境,这时如何让这三组“连等式”的等号都对齐呢?比如:
OKKKKKKKK ...


可以试试利用 amsmath 提供的 \intertext 命令
  1. \begin{align*}
  2. a & = b, \\
  3. c & = d, \\
  4. \intertext{OKKKKKKKKKKK,OKKKKKKKKKKK,OKKKKKKKKKKK,}
  5. e & = fuck.
  6. \end{align*}
复制代码

如果加载了 mathtools 宏包,还可以用 \shortintertext ,上下距离少一些。

这两个命令 Mathjax 均未支持。

PS、不建议大量使用,因为 \intertext 里面的文本似乎是无法分页的,如果文本很长又恰好到达页尾,那就会整段文字挤到下一页。
还有没有其他问题暂时未清楚。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2022-12-10 23:48
kuing 发表于 2022-12-10 23:29
可以试试利用 amsmath 提供的 \intertext 命令

如果加载了 mathtools 宏包,还可以用 \shortintertext  ...

还有一个小问题 整个 align* 环境好像默认处于同一页,这样一来,如果 align* 里的内容过多,那就会整体挤到下一页,很难看,有什么解决方案吗?调整 align* 的某种参数?还是换用其他环境?请教 kuing~

点评

又见http://kuing.infinityfreeapp.com/forum.php?mod=viewthread&tid=9926  发表于 2022-12-11 05:45

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-12-10 23:51
APPSYZY 发表于 2022-12-10 23:48
还有一个小问题 整个 align* 环境好像默认处于同一页,这样一来,如果 align* 里的内容过多, ...

倒不至于整个 align* 挤到下一页,在导言区声明 \allowdisplaybreaks 的话至少公式之间可以分页,只是 \intertext 里面分不了页而已。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:31

Powered by Discuz!

× 快速回复 返回顶部 返回列表