表格内逐项列举后的间距

表格内逐项列举后的间距

我对表格内项目后的间距有疑问。

\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{framed}
\usepackage[parfill]{parskip}
\usepackage{array,ragged2e}
\usepackage{enumitem}

\definecolor{shadecolor}{RGB}{217,217,217}

\usepackage[left=0.75in,top=1.5in,right=0.75in,bottom=1in]{geometry}

\begin{document}
\lipsum[1]
\lipsum[2]
\begin{snugshade*}{\fontsize{13}{6}\selectfont\textbf{Testing}}\end{snugshade*}
\begin{tabular}{@{}>{\RaggedRight}p{8.64cm}>{\RaggedRight}p{8.64cm}@{}}
\begin{itemize}[topsep=0pt, itemsep=0pt, leftmargin=2ex]
  \item  
  \item Lorem ipsum dolor sit amet;
  \item Lorem ipsum dolor sit amet;
\end{itemize} & 
\begin{itemize}[topsep=0pt, itemsep=0pt, leftmargin=2ex]
  \item 
  \item Lorem ipsum dolor sit amet;
  \item Lorem ipsum dolor sit amet;
  \item Lorem ipsum dolor sit amet;
  %Some text
\end{itemize}
\end{tabular}
\begin{snugshade*}{\fontsize{13}{6}\selectfont\textbf{Testing}}\end{snugshade*}

\end{document}

问题是最后一个 itemize 后面的空格。它太大了。如果我在最后一个 itemize 后面放一些文本,这个空格正是我想要的。

我必须使用什么命令来解决这个问题?我知道最简单的方法是放在\vspace{-8pt}最后一个项目之后,但问题是内容是动态的,所以我不知道最后一行是什么。

谢谢您的回复。

编辑:我在右侧单元格中添加了一个项目,因此表格不成比例。

答案1

1. 定义新的列类型
我在答案中找到了可能的解决方案丹尼尔·艾尔斯基于以下代码 唐纳德·阿森纳, 看表格单元格中逐项列出之前的 vspace,表格与长表。在这里,您要为 enumerate 和 itemise 定义新的列类型,您可以通过\multicolumn表格内的 -command 来使用这些列类型。如果您不使用枚举列表,则不需要e-column 类型。

为了对文本列的间距进行类似的控制,我定义了一个右边不齐的文本列类型,也是由-command 激活的multicolumn

对于您的 MWE,代码将是:

\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{framed}
\usepackage[parfill]{parskip}
\usepackage{ragged2e,longtable,array,enumitem

\definecolor{shadecolor}{RGB}{217,217,217}

\usepackage[left=0.75in,top=1.5in,right=0.75in,bottom=1in]{geometry}

\makeatletter
%----  Enumerated columns
\newcolumntype{e}[1]{%
    >{\minipage[t]{\linewidth}\let\\\tabularnewline
      \enumerate
      \addtolength{\rightskip}{0pt plus 50pt}% for raggedright
      \setlength{\itemsep}{-\parsep}}%
    p{#1}%
    <{\@finalstrut\@arstrutbox\endenumerate\endminipage}}

%---- Itemized columns
\newcolumntype{i}[1]{%
    >{\minipage[t]{\linewidth}\let\\\tabularnewline
      \itemize
      \addtolength{\rightskip}{0pt plus 50pt}% for raggedright
      \setlength{\itemsep}{-\parsep}}%
    p{#1}%
    <{\@finalstrut\@arstrutbox\enditemize\endminipage}}

%---- Text columns
\newcolumntype{t}[1]{%
    >{\minipage[t]{\linewidth}\let\\\tabularnewline
      \addtolength{\rightskip}{0pt plus 50pt}% for raggedright
      }%
    p{#1}%
    <{\@finalstrut\@arstrutbox\endminipage}}

\makeatother

\begin{document}
\lipsum[1]

\lipsum[2]
\begin{snugshade*}{\fontsize{13}{6}\selectfont\textbf{Testing}}\end{snugshade*}

\begin{tabular}{@{}p{8.64cm}p{8.64cm}@{}}

\multicolumn{1}{@{}i{8.64cm}}{\item This is an empty line  
      \item Lorem ipsum dolor sit amet;
      \item Lorem ipsum dolor sit amet;}
   & 
\multicolumn{1}{@{}i{8.64cm}}{\item But this is not an empty line
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     \item Some text}
\end{tabular}
\begin{snugshade*}{%
  \fontsize{13}{6}\selectfont\textbf{Testing}}
\end{snugshade*}

\begin{tabular}{@{}p{8.64cm}p{8.64cm}@{}}
\multicolumn{1}{@{}t{8.64cm}}{Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;

\smallskip
Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;

\smallskip
Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;Lorem ipsum dolor sit amet;}
  & 
\multicolumn{1}{@{}i{8.64cm}}{\item This line is empty
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     \item Some text}
\end{tabular}
\begin{snugshade*}{%
  \fontsize{13}{6}\selectfont\textbf{Testing}}
\end{snugshade*}    
\end{document}

如您所见,您可以将普通文本合并到一列,将列表合并到另一列,并且间距仍然正确。输出为: 在此处输入图片描述

2. Parbox
一个更简单的解决方案(但有一些限制)是将 -environments 括itemize在 中parboxes。要将文本对齐到 的顶部parbox,请使用可选参数并指定 的特定高度parbox。如果您只想要一些空间,请在每列的最后一个 itemise 后添加\strut。MWE:

\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{framed}
\usepackage[parfill]{parskip}
\usepackage{array,ragged2e}
\usepackage{enumitem}

\definecolor{shadecolor}{RGB}{217,217,217}

\usepackage[left=0.75in,top=1.5in,right=0.75in,bottom=1in]{geometry}

\begin{document}
\lipsum[1]
\lipsum[2]
\begin{snugshade*}{\fontsize{13}{6}\selectfont\textbf{Testing}}\end{snugshade*}
\begin{tabular}{@{}>{\RaggedRight}p{8.64cm}%
                   >{\RaggedRight}p{8.64cm}@{}}
\parbox[c][58pt][t]{8.64cm}{%
   \begin{itemize}[topsep=0pt, itemsep=0pt, leftmargin=2ex]
      \item  
      \item Lorem ipsum dolor sit amet;
      \item Lorem ipsum dolor sit amet;
   \end{itemize}%
 } & 
\parbox[c][58pt][t]{8.64cm}{%
   \begin{itemize}[topsep=0pt, itemsep=0pt, leftmargin=2ex]
     \item 
     \item Lorem ipsum dolor sit amet;
     \item Lorem ipsum dolor sit amet;
     %Some text
   \end{itemize}%
  }
\end{tabular}
\begin{snugshade*}{%
   \fontsize{13}{6}\selectfont\textbf{Testing}}%
 \end{snugshade*}

\end{document}

为了克服这些限制,您必须定义一个函数来计算高度parbox。 她是一个起点:

\settototalheight\foo{\parbox[t]{8.64cm}{\begin{itemize}[topsep=0em, itemsep=0pt, leftmargin=2ex]
  \item Neither is this line
  \item Lorem ipsum dolor sit amet;
  \item Lorem ipsum dolor sit amet;
  \item Lorem ipsum dolor sit amet;
  \item Some text \strut
\end{itemize}}
}

parbox不接受多个段落。解决方法是将段落括在minipage与段落宽度相同的parbox 里面\parbox

示例代码:

\settototalheight\fooii{\parbox[t]{8.64cm}{\begin{minipage}[t]{8.64cm}
\lipsum[1-2]
\end{minipage}}
}

然后,您必须向变量添加 3pt ,并将其用作表格中排版\fooii的高度。parbox

这张图片是 MWE 的输出: 在此处输入图片描述

相关内容