提问于:
浏览数:
18167
想实现`\setlength{\abovedisplayskip}{0pt}`,在导言区写是不生效的,只有在正文区写`\setlength{\abovedisplayskip}{0pt}`才有用,那么如何才能在导言区设置`\abovedisplayskip`?
尝试了用`etoolbox`宏包,没有效果
```tex
\documentclass{ctexart}
\usepackage{amsmath}
\usepackage{etoolbox}
\AtBeginEnvironment{document}{
\setlength{\abovedisplayskip}{0pt}
\setlength{\abovedisplayshortskip}{0pt}
\setlength{\belowdisplayshortskip}{0pt}
\setlength{\belowdisplayskip}{0pt}
}
\usepackage{zhlipsum}
\begin{document}
\zhlipsum*[1]
\[
\int_{0}^{+\infty} 1/x^{2} \, dx
\]
\zhlipsum*[2]
\end{document}
```
2 回答
0
为什么
> 想实现 `\setlength{\abovedisplayskip}{0pt}`,在导言区写是不生效的,只有在正文区写`\setlength{\abovedisplayskip}{0pt}` 才有用
1. `\begin{document}` 的展开中包含 `\document`
2. `\document` 的定义里包含 `\normalsize`
3. `\normalsize` 的定义里包含对 `\abovedisplayskip` 值的修改。
怎么既能让代码在 `\begin{document}` 之前插入,又能生效呢?放在 `\AtBeginDocument` 里。在 `\document` 的定义里,先遇到 `\normalsize` 后遇到输出 `\AtBeginDocuemnt` 内容的代码,所以这么做能生效。
```tex
\AtBeginDocument{%
\setlength{\abovedisplayskip}{0pt}%
\setlength{\abovedisplayshortskip}{0pt}%
\setlength{\belowdisplayshortskip}{0pt}%
\setlength{\belowdisplayskip}{0pt}%
}
```
另一个提醒是,不少切换字号的命令会重定义 `\abovedisplayskip` 系列命令,要当心。
-
非常感谢! – sikouhjw 2021-04-30 16:56 回复
2
这些长度与字体大小有关,不宜在导言区设置,非要设置的话,可以参考下面两个帖子。
[https://tex.stackexchange.com/questions/69662/how-to-globally-change-the-spacing-around-equations](https://tex.stackexchange.com/questions/69662/how-to-globally-change-the-spacing-around-equations)
或
[https://latex.org/forum/viewtopic.php?t=3837](https://latex.org/forum/viewtopic.php?t=3837)
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。