Forgot password?
 Register account
View 680|Reply 20

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

[Copy link]

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

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

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

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 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*}
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

165

Posts

1645

Credits

Credits
1645

Show all posts

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

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

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

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

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

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 2022-12-10 15:02
APPSYZY 发表于 2022-12-10 10:55
出现的第一个问题:
\begin{align*}
    A\subset C\iff&x\in B\\
关于第一个问题,只要在 \iff 后面加 {} 即可。
理由参见: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*}

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

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



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

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

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

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

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

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

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

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

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

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 2022-12-10 16:38
不用计算长度,用 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

165

Posts

1645

Credits

Credits
1645

Show all posts

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

大开眼界,非常感谢 kuing!

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 2022-12-10 19:10
还可以利用 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

165

Posts

1645

Credits

Credits
1645

Show all posts

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

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 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*}
Copy the Code
如果加载了 mathtools 宏包,还可以用 \shortintertext ,上下距离少一些。

这两个命令 Mathjax 均未支持。

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

81

Threads

165

Posts

1645

Credits

Credits
1645

Show all posts

 Author| APPSYZY Posted 2022-12-10 23:48
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 2022-12-11 05:45

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

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

3153

Threads

7906

Posts

610K

Credits

Credits
64096
QQ

Show all posts

hbghlyj Posted 2022-12-2 07:13

align环境 不如equation环境嵌套split环境

LaTeX to HTML写道:
I had used the align environment for multiple-line equations. These were rendered differently from the equations written in the equation environment. I learned that it is generally preferable to use the split environment within the equation environment for multiple-line equations, even for the PDF and paper versions. For example,
     \begin{equation}
     \begin{split}
     1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0
        &= 8 + 0 + 2 + 1\\
        &= 11
     \end{split}
     \end{equation}

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 2022-12-2 13:56
不同意,equation 套 split 并不是一个好选择。

第一、这种方式只能整块多行公式编一个号(位于中间),而 align 可以多个。

第二、split 环境不能多列,就是说它不能像下面这样
  1. \begin{split}
  2. a & =b  &  c & =d  &  e & =f\\
  3. ...
  4. \end{split}
Copy the Code
所以还不如嵌套 aligned 环境。

第三、也是最重要的一点,就是这种方式的多行公式无法断开,如果公式行数很多且恰好到达页尾,位置不够时,那它就只能整块挤到下一页,原先的地方就会有一大片空白。
而对于 align ,只要在导言区设置了 \allowdisplaybreaks ,那它就可以断开。


来测试一下,为了更清楚对比,用了双栏:
  1. \documentclass{article}
  2. \usepackage{amsmath}
  3. \usepackage[a6paper,landscape,twocolumn,showframe]{geometry}
  4. \columnseprule=0.4pt
  5. \allowdisplaybreaks
  6. \newcommand\addtag{\refstepcounter{equation}\tag{\theequation}}
  7. \begin{document}
  8. split within equation
  9. split within equation
  10. split within equation
  11. split within equation
  12. split within equation
  13. \begin{equation}\label{eqa}
  14. \begin{split}
  15. a&=b\\
  16. &=b\\
  17. &=b\\
  18. &=b\\
  19. &=b\\
  20. &=b\\
  21. &=b\\
  22. &=b\\
  23. &=b\\
  24. &=b\\
  25. &=b
  26. \end{split}
  27. \end{equation}
  28. ref of \eqref{eqa}.
  29. \newpage
  30. align*
  31. align*
  32. align*
  33. align*
  34. align*
  35. \begin{align*}
  36. a&=b\addtag\label{eqb}\\
  37. &=b\\
  38. &=b\\
  39. &=b\\
  40. &=b\\
  41. &=b\\
  42. &=b\\
  43. &=b\\
  44. &=b\\
  45. &=b\\
  46. &=b\addtag\label{eqc}
  47. \end{align*}
  48. ref of \eqref{eqb} and \eqref{eqc}.
  49. \end{document}
Copy the Code
效果:
QQ截图20221202145847.png

Mobile version|Discuz Math Forum

2025-6-5 01:05 GMT+8

Powered by Discuz!

× Quick Reply To Top Edit