40 浮动体参数设置在编组内失效的原因?

发布于 2025-01-13 14:21:48

来自这一问题的小疑惑。

如下的代码可以正确调整浮动体的距离。

\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}

这可以生效:
image.png

而如果把\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}

image.png

我猜测这和LaTeX排版正文,浮动体位置确定的顺序也许有关。希望得到比较详细的解释。

查看更多

关注者
0
被浏览
144
雾月
雾月 4天前
这家伙很懒,什么也没写!

浮动体的位置直到 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,就能够让 myfigurefigure 共享计数器了,不过这样并不共享格式),以及 caption 宏包的 type 键。

2 个回答
latex2020
latex2020 4天前
这家伙很懒,什么也没写!

图片放不下,只有放到下一页

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览