\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}
这个间距是在\@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 后的效果:
其实最可靠的方式是使用 minipage
环境,其中直接使用centering 声明居中即可,当然,其中也可以使用 center
环境,center
产生的额外间距也会被 minipage
去掉。不过这种方法不能让环境中的内容自动换页。
\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}
这个算不算是enumitem的bug呢?