来自这一问题的小疑惑。
如下的代码可以正确调整浮动体的距离。
\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 明白了,谢谢雾月老师~