来自这一问题的小疑惑。
如下的代码可以正确调整浮动体的距离。
\documentclass{article}
\usepackage{libertine}
\usepackage{lipsum}
\usepackage{graphicx}
\setlength{\textfloatsep}{0pt}
\begin{document}
\lipsum[1-3]
\begin{figure}[htbp]
\centering
\includegraphics[width=.85\textwidth]{example-image}
\caption{This a caption of the figure}
\end{figure}
\lipsum[1-3]
\end{document}这可以生效:
而如果把\setlength{\textfloatsep}{0pt}置于浮动体的编组内,这会失效。
\documentclass{article}
\usepackage{libertine}
\usepackage{lipsum}
\usepackage{graphicx}
\begin{document}
\lipsum[1-3]
\begingroup
\setlength{\textfloatsep}{0pt}
\begin{figure}[htbp]
\centering
\includegraphics[width=.85\textwidth]{example-image}
\caption{This a caption of the figure}
\end{figure}
\endgroup
\lipsum[1-3]
\end{document}
我猜测这和LaTeX排版正文,浮动体位置确定的顺序也许有关。希望得到比较详细的解释。
浮动体的位置直到 output routine 时才会确定,(浮动的)浮动环境只是把它的内容保存到盒子里,此时,LaTeX 默认的实现是不会保存当前设置的各种间距的,这些间距直到 output routine 时才会使用,因此,局部设置地设置这些间距一般都无效。既然说了是 LaTeX 的默认实现,那自然可以自定义,不过,麻烦、工作量大、与其它宏包兼容性不好(比如涉及到 output routine 的 longtable multicol paracol lineno,还有和浮动体有关的宏包 caption float placeins newfloat,等等),而且 LaTeX 也没有提供方便的方法修改 output routine 以及排布浮动体的算法。
很多时候并不需要让内容浮动,只需要一个 center 环境、一个和浮动体共享计数器的命令(直接 \let\c@myfigure\c@figure,就能够让 myfigure 和 figure 共享计数器了,不过这样并不共享格式),以及 caption 宏包的 type 键。
非常感谢雾月老师的解释,我会再结合output routine的内容再学习学习~
我有一个小疑问,就是
float,caption等宏包提供的captionof命实现的功能是否就是您所说的:类似的思路呢?(感觉我可以去看下源码实现hhh)
如下面的例子:

@u70550
\captionof和type键并不完全一样,当使用了hyperref宏包时,type键会把超链接的锚点放置到设置这个键的那个位置,而caption宏包的\captionof会报警告。表 1 的超链接锚点的位置在最开始,表 2 的在
\captionof那个地方。@u10307 明白了,谢谢雾月老师~