lineskip_b图片上方距离文字就是6pt,但是图片下方距离文字为6pt+\baselineskip-\f@size!!!! 解答:还有一个叫 \nointerlineskip 的东西。就让我们具体来看看问题中提到的浮动体前后距离不一致:

\documentclass{article}

\usepackage{graphicx}

\setlength\intextsep{0pt}

\begin{document}

\noindent\rule{\linewidth}{1pt}

\begin{figure}[htbp]
\centering
\includegraphics[width=.5\linewidth]{example-image.pdf}
\caption{example-image}
\end{figure}

\noindent\rule{\linewidth}{1pt}

\end{document}

lineskip_b可以看到,浮动体底部与正文确实有一定的距离,不是我们设置的 0pt。这个距离是 TeX 插入行间 glue 产生的,按通常做法,在浮动体下方的文字之前设置 \nointerlineskip 加以抑制就可以:

\documentclass{article}

\usepackage{graphicx}

\setlength\intextsep{0pt}

\begin{document}

\noindent\rule{\linewidth}{1pt}

\begin{figure}[htbp]
\centering
\includegraphics[width=.5\linewidth]{example-image.pdf}
\caption{example-image}
\end{figure}

\nointerlineskip
\noindent\rule{\linewidth}{1pt}

\end{document}

lineskip_r但是,既然是浮动体,就很有可能会被浮动到别的地方去,主要的困难是具体要在哪里加 \nointerlineskip。好在 LaTeX3 项目小组的领导 Frank Mittelbach 给出了详细的解释和解决办法 [1]:

作者:李清
链接:https://www.zhihu.com/question/46618031/answer/102310514
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

\documentclass{article}

\usepackage{graphicx}

\setlength\intextsep{0pt}

\usepackage{etoolbox}
\makeatletter
%% http://tex.stackexchange.com/a/40363
\patchcmd{\@addtocurcol}%
  {\vskip \intextsep}%
  {\edef\save@first@penalty{\the\lastpenalty}\unpenalty
   \ifnum \lastpenalty = \@M  % hopefully the OR penalty
     \unpenalty
   \else
     \penalty \save@first@penalty \relax % put it back
   \fi
   \ifnum\outputpenalty <-\@Mii
     \addvspace\intextsep
     \vskip\parskip
   \else
     \addvspace\intextsep
   \fi}%
  {\typeout{*** SUCCESS ***}}{\typeout{*** FAIL ***}}
\patchcmd{\@addtocurcol}%
  {\vskip\intextsep \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi}%
  {\ifnum\outputpenalty <-\@Mii
     \aftergroup\vskip\aftergroup\intextsep
     \aftergroup\nointerlineskip
   \else
     \vskip\intextsep
   \fi}%
  {\typeout{*** SUCCESS ***}}{\typeout{*** FAIL ***}}
\patchcmd{\@getpen}{\@M}{\@Mi}
  {\typeout{*** SUCCESS ***}}{\typeout{*** FAIL ***}}
\makeatother

\begin{document}

\noindent\rule{\linewidth}{1pt}

\begin{figure}[htbp]
\centering
\includegraphics[width=.5\linewidth]{example-image.pdf}
\caption{example-image}
\end{figure}

\noindent\rule{\linewidth}{1pt}

\end{document}

如上代码选自:http://tex.stackexchange.com/questions/39867/intextsep-gives-doubled-space/40363#40363选自:https://www.zhihu.com/question/46618031/answer/102310514

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部