我对表格内项目后的间距有疑问。
\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 的输出: