找回密码
 快速注册
搜索
查看: 49|回复: 12

如何缩小 $\min$ 和 $f(x)$ 的间距?

[复制链接]

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

APPSYZY 发表于 2024-12-16 00:16 |阅读模式
  1. \begin{align*}
  2.     & {\min}     & & f(x)   \\
  3.     & \text{s.t.}& & g(x)=0 \\
  4.     &            & & h(x)>0.
  5. \end{align*}
复制代码

ppppic.png
$\min$ 和 $f(x)$ 的间距实在太宽了,这是什么原因导致的呢?能否将间距缩小,比如调整为一个 quad,同时不改变原有的对齐格式呢?请教大家。

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2024-12-16 00:20
正常的间距(以及对齐格式)应该是类似这样的:
ppppic.png

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-12-16 00:46
本帖最后由 kuing 于 2024-12-16 15:06 编辑 先解释为什么会是大间距:
align 环境是用于行间公式,视野是整行,所以它在处理多列的时候会给足够的空间来隔开各组公式,一般用于多组公式,像这样
  1. \begin{align*}
  2.    A & = a+b+c  &  B & = d+e+f  &  C & = g+h+i \\
  3.    D & = x+y+z  &  E & = p+q+r  &  F & = u+v+w \\
  4. ...
  5. \end{align*}
复制代码

这种情况间隔拉开很多是合理的。

而对于楼主的需求,改用 aligned 就行,ailgned 是块环境,不能独立使用,得插入数学环境中,所以它的视野是小的,就是小间距了。
代码可以改成:
  1. \[
  2. \begin{aligned}
  3.     & {\min}     & & f(x)   \\
  4.     & \text{s.t.}& & g(x)=0 \\
  5.     &            & & h(x)>0.
  6. \end{aligned}
  7. \]
复制代码

83

主题

167

回帖

1643

积分

积分
1643

显示全部楼层

 楼主| APPSYZY 发表于 2024-12-16 12:51
kuing 发表于 2024-12-16 00:46
先解释为什么会是大间距:
align 环境是用于行间公式,视野是整行,所以它在处理多列的时候会给足够的空间 ...

align* 环境下,每行最后都可以加一个 \tag{...};但 aligned 环境下,一加 \tag{...} 就会报错,这该如何解决呢?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-12-16 14:33
APPSYZY 发表于 2024-12-16 12:51
align* 环境下,每行最后都可以加一个 \tag{...};但 aligned 环境下,一加 \tag{...} 就会报错,这该如 ...


\tag 是行间公式的东东,前面也说了 aligned 不是行间公式环境,所以在它内部用不了 \tag。

如果只是加一个 \tag,像 2# 的截图那样,可以用 equation 环境套 aligned 。

如果是要加多个 \tag,那大概就不能用 aligned 了……

类似于 align 的还有一个 alignat 环境,是行间公式环境,但它将列间距设为零😅,用法像这样:
  1. \begin{alignat}{3}
  2. abc &= xxx    &  &= xxxxxx &  &= aaaaa \\
  3. ab  &= yyyyyy &  &= yyy    &  &= ab
  4. \end{alignat}
复制代码

\begin{alignat}{3}
abc &= xxx    &  &= xxxxxx &  &= aaaaa \\
ab  &= yyyyyy &  &= yyy    &  &= ab
\end{alignat}(那个 {3} 是表示有 3 组公式,是必要参数)

我没找到既是小间距,又能多编号的行间公式环境。

需要隔开小间距的话,用 alignat 然后自己手动加一个 \quad 吧,比如
  1. \begin{alignat}{2}
  2.     & {\min}     & \quad & f(x)   \\
  3.     & \text{s.t.}& & g(x)=0 \\
  4.     &            & & h(x)>0.
  5. \end{alignat}
复制代码

\begin{alignat}{2}
    & {\min}     & \quad & f(x)   \\
    & \text{s.t.}& & g(x)=0 \\
    &            & & h(x)>0.
\end{alignat}

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-12-16 17:00
  1. \begin{align*}
  2.     & {\min}     & & f(x)   \\[-2.5mm]
  3.     & \text{s.t.}& & g(x)=0 \\[-2.5mm]
  4.     &            & & h(x)>0.
  5. \end{align*}
复制代码

如上,可以在换行后面加间距。

点评

楼主指的是水平间距  发表于 2024-12-16 17:08

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-12-16 17:22
abababa 发表于 2024-12-16 17:00
如上,可以在换行后面加间距。

原来如此,那用\hspace也可以吧:
  1. \begin{align*}
  2.     {\min} \hspace{5mm}& f(x)\\
  3.     \text{s.t.} \hspace{5mm}& g(x)=0 \\
  4.     ~ \hspace{5mm}& h(x)>0.
  5. \end{align*}
复制代码

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-12-16 18:05
abababa 发表于 2024-12-16 17:22
原来如此,那用\hspace也可以吧:


这达不到楼主要求的对齐格式,他应该是希望 min 与 st 左对齐,你的方法会是右对齐。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-12-16 18:13
kuing 发表于 2024-12-16 18:05
这达不到楼主要求的对齐格式,他应该是希望 min 与 st 左对齐,你的方法会是右对齐。 ...

那变成这样:\text{s.t.\hspace{1mm}}

点评

😅  发表于 2024-12-16 20:36

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-12-16 19:11
kuing 发表于 2024-12-16 06:33
我没找到既是小间距,又能多编号的行间公式环境。


tex.stackexchange.com/questions/40124/how-to-reduce-hspace-between-columns-in-align-environment
可指定间距的align环境:
  1. \documentclass[a4paper]{article}
  2. \usepackage{amsmath}
  3. \usepackage{environ}
  4. \makeatletter
  5. \newdimen\royalignsep@
  6. \def\royalign@preamble{%
  7.    &\hfil
  8.     \strut@
  9.     \setboxz@h{\@lign$\m@th\displaystyle{##}$}%
  10.     \ifmeasuring@\savefieldlength@\fi
  11.     \set@field
  12.     \tabskip\z@skip
  13.    &\setboxz@h{\@lign$\m@th\displaystyle{{}##}$}%
  14.     \ifmeasuring@\savefieldlength@\fi
  15.     \set@field
  16.     \hfil
  17.     \tabskip\royalignsep@
  18. }
  19. \NewEnviron{royalign}[1]{%
  20.   \royalignsep@=#1\let\align@preamble=\royalign@preamble
  21.   \begin{align}\BODY\end{align}}
  22. \NewEnviron{royalign*}[1]{%
  23.   \royalignsep@=#1\let\align@preamble=\royalign@preamble
  24.   \begin{align*}\BODY\end{align*}}
  25. \makeatother
  26. \pagestyle{empty}
  27. \begin{document}
  28. \begin{royalign*}{1cm}
  29. 4   &= 4 & 1+3+5 &= 9\\
  30. 0   &= 0 & 2+1   &= 3\\
  31. 1+1 &= 2 & 1     &= 1
  32. \end{royalign*}
  33. \end{document}
复制代码

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-12-16 21:02


哦,中间那段原来是复制自 amsmath.sty 里面 \def\align@preamble{... 的代码,替换了最后那个 \alignsep@ ,明白鸟😊

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

GMT+8, 2025-3-4 07:20

Powered by Discuz!

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