图片上方距离文字就是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}
可以看到,浮动体底部与正文确实有一定的距离,不是我们设置的 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}
但是,既然是浮动体,就很有可能会被浮动到别的地方去,主要的困难是具体要在哪里加 \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
发表评论 取消回复