多页长表:如何处理逐项列出?

多页长表:如何处理逐项列出?

我想创建一个类似于 stackexchange 上的这个答案的多页表(https://tex.stackexchange.com/a/419760/129702) 但有以下区别:

  • 我有 4 列(“站点”、“描述”、“优点”、“缺点”)
  • 前两列包含文本:后两列包含逐项列表
  • 我不希望逐项列出难以阅读(因为列大小受限),因此如果需要,我愿意将最后两列合并为一列(“优点和缺点”),并使用 + / - 符号逐项列出
  • 项目化设置可以严格限制空格(nosep、noitemsep、topsep=0pt、partopsep=0pt、after=\vspace*{2pt})
  • 任何减少桌子占用空间的想法都会受到赞赏

附加信息 :

  • “站点”是一个简单的站点名称(例如:“Hackerrank”)
  • “描述”是网站的简短介绍(例如:\lipsum*[3])
  • 平均“优点”有5项
  • 平均“缺点”有3-4项
  • 文档类别:报告

谢谢您的帮助

答案1

这是一个解决方案,它使用紧凑列表定义两个新列。我很确定它是基于 Heiko Oberdiek 的答案,但我找不到答案来提供正确的参考。

一列定义为逐项列表,一列定义为编号列表。您可以随意更改列表列的宽度。如果您希望表格填充边距之间的空间,可以使用\extracolsep{\hfill}。您也可以使用板状的

如果每页都需要重复标题,则使用正常长桌命令。要取消对单个单元格的枚举或逐项列出,可以使用\multicolumn

在此处输入图片描述

\documentclass{article}
\usepackage{array, longtable, booktabs}
\makeatletter
\newcolumntype{e}[1]{%--- Enumerated cells ---
   >{\minipage[t]{\linewidth}%
     \NoHyper%                Hyperref adds a vertical space
     \let\\\tabularnewline
    \settowidth{\leftmargini}{\,9.\hspace{\labelsep}}
     \enumerate
        \addtolength{\rightskip}{0pt plus 50pt}% for raggedright
        \setlength{\itemsep}{-\parsep}}%
   p{#1}%
   <{\@finalstrut\@arstrutbox\endenumerate
     \endNoHyper
     \endminipage}}

\newcolumntype{i}[1]{%--- Itemized cells ---
   >{\minipage[t]{\linewidth}%
        \let\\\tabularnewline
        \settowidth{\leftmargini}{~\hspace{\labelsep}}
        \itemize
           \addtolength{\rightskip}{0pt plus 50pt}%
           \setlength{\itemsep}{-\parsep}}%
   p{#1}%
   <{\@finalstrut\@arstrutbox\enditemize\endminipage}}

\AtBeginDocument{%
    \@ifpackageloaded{hyperref}{}%
        {\let\NoHyper\relax\let\endNoHyper\relax}}
\makeatother

\setlength{\tabcolsep}{3pt}
\setlength{\extrarowheight}{2pt}

\begin{document}

\begin{longtable}{@{\extracolsep{\fill}}p{2cm}p{2cm}i{3.5cm} e{3.5cm}@{}}
\toprule
Site & Description & \multicolumn{1}{l}{Avantages} & \multicolumn{1}{l@{}}{Disavantages}\\
\midrule\endhead %% Repead heading on every page
Text here and there & More left aligned text &
  \item Item A is part of a itemised list
  \item Item B   &
  \item Item 1 is part of a numbered list
  \item Item 2   \\
\midrule
Text & Text &
  \item Item A
  \item Item B   &
  \item Item 1
  \item Item 2
    \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
  \item Item 1
   \\
\bottomrule

\end{longtable}

\end{document} 

答案2

以下是使用嵌套描述和逐项列表的示例。可以使用enumitem包进一步自定义布局:

在此处输入图片描述

\documentclass{report}
\usepackage{enumitem}
\usepackage{lipsum}
\begin{document}
\setlist[itemize]{label=+.,leftmargin=*, nosep}
\begin{description}
\item[a term]\lipsum[3]
\begin{itemize}
\item[+] \lipsum[1][1]
\item[+] \lipsum[1][1]\lipsum[1][2] \lipsum[1][3]
\item[--] \lipsum[1][1]
\item[--] \lipsum[1][1]\lipsum[1][2] \lipsum[1][3]
\end{itemize}
\item[another term]\lipsum[5]
\begin{itemize}
\item[+] \lipsum[1][1]
\item[+] \lipsum[1][1]\lipsum[1][2] \lipsum[1][3]
\item[--] \lipsum[1][1]
\item[--] \lipsum[1][1]\lipsum[1][2] \lipsum[1][3]
\end{itemize}
\end{description}
\end{document}

相关内容