想实现`\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 回答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)

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。