LaTeX技巧870:Latex如何在设置行距后让字体垂直居中?

文字说明可能不是很清楚,直接上图!!! 不管是用\fontsize还是设置\baselineskip还是设置比例系数什么的, 由于行距定义为基线之间的距离,只要行距大于字号,多出来的空白全部位于文字上方, 比如设置图表浮动体距离文本为\intextsep=6pt,图距离上下文本间隙应该一致对称的,但是,实际效果就是这样:

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

分享到:
未经允许不得转载:LaTeX技巧870:Latex如何在设置行距后让字体垂直居中?
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺latexstudio.taobao.com 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注微信公众号: latex2015

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们