longtable 在列表环境中留下错误的边距

longtable 在列表环境中留下错误的边距

特殊情况,在我的自定义类中使用 longtable。当我使用\longtable\end{longtable}不是 时\begin{longtable},当位于列表环境中\end{longtable}时,我会得到糟糕的边距。longtable

测试文档:

  \documentclass{article}
  \usepackage{longtable}
  \begin{document}
  text
  \begin{itemize}
    \item first text
    \begin{longtable}{c}%
      table col1
    \end{longtable}%
      \item second text
    \longtable{c}
    table col2
    \endlongtable
    \item third text
  \end{itemize}
  text
  \end{document}

看到“第三段文字”超出边距了吗?

我不记得为什么我在编写该类时使用了该语法,可能是为了没有额外的垂直空间。

我把问题追溯到 199 行longtable.sty——如果\endgraf将命令替换为\par,边距又恢复正常。有趣的是,\meaning{endgraf}显示其含义是\par

\endgraf用替换 是否合理\par?如果我必须将代码更改为使用\begin和,是否需要调整垂直间距?我阅读了 source2e 中有关和命令\end的代码,但它看起来相当深奥。\begin\end

答案1

可以longtable使用长度变量\LTleft和来控制环境的间距\LTright

由于使用了第一个项目级别,因此也许可以考虑设置\setlength{\LTleft}{\dimexpr\leftmargini+\relltshift},其中\relltshift某些用户指定的偏移相对于左边距缩进。

 \documentclass{article}


 \usepackage{longtable}

 \newlength{\relltshift}

 \setlength{\relltshift}{\labelwidth}
 \setlength{\LTleft}{\dimexpr\leftmargini+\relltshift}

 \begin{document}
 text
  \begin{itemize}
  \item first text
    \begin{longtable}{c}%
      table col1
    \end{longtable}%
  \item second text
    \begin{longtable}{c}
    table col2
    \end{longtable}
  \item third text
  \end{itemize}
  text
\end{document}

相关内容