如何减小或消除center环境会和上下文的额外间距

发布于 2021-06-01 10:20:14
\documentclass[12pt,twoside]{ctexbook}
\usepackage{array}
\usepackage{zhlipsum}
\usepackage{color}
\usepackage{enumitem}
\setlist[trivlist, 1]{topsep=0pt,partopsep=0pt,parsep=0pt}
\begin{document}
\zhlipsum[1]
\begin{center}
    \begin{tabular}{p{0.9\textwidth}}
        \hline
        {\color{red}这里center环境会和上下文有一定的额外间距,不知该如何减小或消除。尝试过用enumitem宏包,设置trivlist,并未成功}\\
        \hline
    \end{tabular}
\end{center}
\zhlipsum[1]
\end{document}

查看更多

关注者
0
被浏览
138

这个间距是在\@trivlist 里添加的,你可以通过命令行:

latexdef \@trivlist

看到这个宏的展开
所以,一个不是太严谨的方法是利用 xpatch 宏包的 xpatchcmd 命令将 \topsep patch 为 0pt

\makeatletter
\xpatchcmd{\@trivlist}{\topsep}{0pt}{}{}
\makeatother

完整的例子(为了排版出对比,我改了页边距)和效果:

\documentclass[12pt,twoside]{ctexbook}
\usepackage{xcolor}
\usepackage{xpatch}
\usepackage{zhlipsum}
\usepackage[margin=2cm]{geometry}

\begin{document}
\zhlipsum[1]
\begin{center}
    \begin{tabular}{p{0.9\textwidth}}
        \hline
        {\color{red}这里center环境会和上下文有一定的额外间距,不知该如何减小或消除。尝试过用enumitem宏包,设置trivlist,并未成功}\\
        \hline
    \end{tabular}
\end{center}
\zhlipsum[1]

\makeatletter
\xpatchcmd{\@trivlist}{\topsep}{0pt}{}{}
\makeatother
\begin{center}
    \begin{tabular}{p{0.9\textwidth}}
        \hline
        {\color{red}这里center环境会和上下文有一定的额外间距,不知该如何减小或消除。尝试过用enumitem宏包,设置trivlist,并未成功}\\
        \hline
    \end{tabular}
\end{center}

\zhlipsum[1]
\end{document}

以下可以看出未 patch 的效果和 patch 后的效果:
image.png

其实最可靠的方式是使用 minipage 环境,其中直接使用centering 声明居中即可,当然,其中也可以使用 center 环境,center 产生的额外间距也会被 minipage 去掉。不过这种方法不能让环境中的内容自动换页。

3 个回答
啸行
啸行 2021-06-01
\documentclass[12pt,twoside]{ctexbook}
\usepackage{array}
\usepackage{zhlipsum}
\usepackage{color}
\usepackage{enumitem}
\setlist[trivlist, 1]{topsep=0pt,partopsep=0pt,parsep=0pt}
\begin{document}
  \zhlipsum[1]
  \begin{center}
    \begin{tabular}{p{0.9\textwidth}}
      \hline
      \textcolor{red}{这里center环境会和上下文有一定的额外间距,不知该如何减小或消除。尝试过用enumitem宏包,设置trivlist,并未成功}\\
      \hline
    \end{tabular}
  \end{center}
  \zhlipsum[1]
\end{document}

image.png

可以用 \begingroup \centering xxx\par \endgroup 代替 center 环境,或者重定义就可以

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览