Forgot password?
 Create new account
View 249|Reply 18

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

[Copy link]

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

APPSYZY Posted at 2022-12-10 00:47:03 |Read mode
Last edited by APPSYZY at 2022-12-10 00:56:00\begin{align*}
    &A\\
    \iff&A\\
    \implies&A\\
    \iff&A\\
    \impliedby&A\\
    \iff&A.
\end{align*}

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

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 02:25:23
哪有什么居中对齐,这明明是右对齐,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*}
Copy the Code


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

\begin{align*}
what & \iff the \\
& \impliedby fuck
\end{align*}
  1. \begin{align*}
  2. what & \iff the \\
  3. & \impliedby fuck
  4. \end{align*}
Copy the Code


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

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 10:55:14
Last edited by APPSYZY at 2022-12-10 11:09:00
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$左侧的空白比所有右侧的空白都要更大。

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 10:58:25
Last edited by APPSYZY at 2022-12-10 11:08:00
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$右侧的空白比左侧大了,且第二行右侧和其他几行没有对齐。

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

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

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 15:02:49
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*}
Copy the Code

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

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 15:11:31
APPSYZY 发表于 2022-12-10 10:58
出现的第二个问题:
\begin{align*}
    A\subset C&\iff x\in B\\
关于第二个问题:
分开两点说,第一点:
第一行右侧的空白比左侧大了
这其实是 Mathjax3 的 bug。
4# 的代码真 LaTeX 里不存在第一行这个间距问题,效果为:



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

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 15:20:30
Last edited by APPSYZY at 2022-12-10 15:26:00
kuing 发表于 2022-12-10 15:11
关于第二个问题:
分开两点说,第一点:这其实是 Mathjax3 的 bug。
4# 的代码真 LaTeX 里不存在第一行这 ...
在$\iff$左侧插入 $,为什么不会和在右侧插入 \$ 时一样,产生间距太短的问题呢?

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 15:26:12
APPSYZY 发表于 2022-12-10 15:20
在$\iff$左侧插入 $,为什么不会和在右侧插入 $ 时一样,产生间距太短的问题呢? ...
认真看 6# 链接的解释。

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 15:31:56
Last edited by APPSYZY at 2022-12-10 15:54:00
kuing 发表于 2022-12-10 15:26
认真看 6# 链接的解释。
看懂了,不过为什么 amsmath 设计者不在右侧也做同样的设计……

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 15:38:00
kuing 发表于 2022-12-10 15:11
关于第二个问题:
分开两点说,第一点:这其实是 Mathjax3 的 bug。
4# 的代码真 LaTeX 里不存在第一行这 ...
为了解决符号长度不统一的问题,假设$\iff$超出$\impliedby$的长度为 $\Delta$,能否在$\impliedby$后面加上一段长度为 $\Delta$ 空白?如果可以,那么这个长度差 $\Delta$ 该如何计算呢?

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 16:38:21
不用计算长度,用 phantom + lap 就好了。
新建命令:
  1. \newcommand\Rff{\mathrel{\phantom{\iff}\llap{$\implies$}}}
  2. \newcommand\Lff{\mathrel{\rlap{$\impliedby$}\phantom{\iff}}}
Copy the Code

正文里:
  1. \begin{align*}
  2. A & \iff B\\
  3.   & \Rff B\\
  4.   & \iff B\\
  5.   & \Lff B\\
  6. \end{align*}
Copy the Code

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

效果:

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 17:49:57
kuing 发表于 2022-12-10 16:38
不用计算长度,用 phantom + lap 就好了。
新建命令:
大开眼界,非常感谢 kuing!

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

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

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

正文:
  1. \begin{align*}
  2. A & \iff B\\
  3.   & \xyiff B\\
  4.   & \xyiff[=>] B\\
  5.   & \xyiff[<=] B
  6. \end{align*}
Copy the Code

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

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

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

 Author| APPSYZY Posted at 2022-12-10 19:30:53
Last edited by APPSYZY at 2022-12-10 19:48:00
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*}

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 23:29:35
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*}
Copy the Code

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

这两个命令 Mathjax 均未支持。

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

81

Threads

170

Posts

1660

Credits

Credits
1660

Show all posts

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

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

Comment

又见https://kuing.cjhb.site/forum.php?mod=viewthread&tid=9926  Posted at 2022-12-11 05:45

701

Threads

110K

Posts

910K

Credits

Credits
94172
QQ

Show all posts

kuing Posted at 2022-12-10 23:51:16
APPSYZY 发表于 2022-12-10 23:48
还有一个小问题 整个 align* 环境好像默认处于同一页,这样一来,如果 align* 里的内容过多, ...
倒不至于整个 align* 挤到下一页,在导言区声明 \allowdisplaybreaks 的话至少公式之间可以分页,只是 \intertext 里面分不了页而已。

手机版Mobile version|Leisure Math Forum

2025-4-20 22:01 GMT+8

Powered by Discuz!

× Quick Reply To Top Return to the list