列表项和嵌套列表之间的极端垂直间距

列表项和嵌套列表之间的极端垂直间距

我如何才能微调并减少列表项和嵌套列表的垂直间距,以便上下行的字符几乎互相接触?

例子:

在此处输入图片描述

更新 1:

@egreg:

当我尝试时:

\begin{enumerate}[label=\arabic*.,before*=\tighten,noitemsep]
\item List 1
\begin{enumerate}[label=\Alph*.,before*=\tighten,noitemsep]
\item Item Aabcg
\item Item Bagcb
\item Item Cabcg
\item Item Dagcb
\end{enumerate}
\end{enumerate}

List 1和之间有一个很高的空间Item Aabcg

您可以进一步修改您的答案来解决这个问题吗?

更新2:

@egreg:

谢谢,但我仍然得到:

1. List 1

     A. Item Aabcg
     B. Item Bagcb
     C. Item Cabcg
     D. Item Dagcb

您能否去掉List 1和之间的空格Item Aabcg以获得:

1. List 1
     A. Item Aabcg
     B. Item Bagcb
     C. Item Cabcg
     D. Item Dagcb

答案1

根据以下答案另一个问题,这是一个保持基线之间均匀距离的解决方案。

\makeatletter
\let\tightset@fontsize\set@fontsize
\patchcmd\tightset@fontsize{#3}{#2}{}{}
\newcommand{\tighten}{\let\set@fontsize\tightset@fontsize
  \fontsize{\f@size}{\f@baselineskip}\selectfont}
\makeatother

然后可以输入列表

\begin{enumerate}[parsep=0pt]
\item List 1
  \begin{enumerate}[label=\Alph*.,before*=\tighten,noitemsep,topsep=0pt]
  \item Item Aabcg
  \item Item Bagcb
  \item Item Cabcg
  \item Item Dagcb
  \end{enumerate}
\end{enumerate}

最小示例:

\documentclass[a4paper]{article}
\usepackage{etoolbox,enumitem}

\makeatletter
\let\tightset@fontsize\set@fontsize
\patchcmd\tightset@fontsize{#3}{#2}{}{}
\newcommand{\tighten}{\let\set@fontsize\tightset@fontsize
  \fontsize{\f@size}{\f@baselineskip}\selectfont}
\makeatother

\begin{document}
\begin{enumerate}[parsep=0pt]
  \item List 1
  \begin{enumerate}[label=\Alph*.,before*=\tighten,nolistsep,topsep=0pt]
    \item Item A
    \item Item B
    \item Item C
    \item Item D
  \end{enumerate}
\end{enumerate}

\end{document}

使用检查输出\showbox可证明间距是相同的:在“List 1”行和“Item A”行之间,TeX 插入了 3.16669pt 的粘连,与在“Item A”和“Item B”行(以及其他行)之间插入的粘连完全相同,这是正确的,因为这些行没有下降线。“Item A”行的高度为 6.83331pt,加上 3.16669pt 等于 10pt。

\topsep如果内部列表中的 未设置为零(键nolistsep将其设置为0pt plus 0.1pt),则实际文档中可能会有细微的差异,但文章执行的类\raggedbottom

答案2

您可以使用enumitem包裹以便调整列表中的项目间距(或enumerateitemize。以下示例突出显示了您要寻找的一些间距需求:

\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[label=\arabic*.]
  \item List 1
  \begin{enumerate}[label=\Alph*.,itemsep=-1ex,topsep=-2ex]
    \item Item A
    \item Item B
    \item Item C
    \item Item D
  \end{enumerate}
\end{enumerate}

\begin{enumerate}[label=\arabic*.,resume]
  \item List 2
  \begin{enumerate}[label=\Alph*.]
    \item Item A
    \item Item B
    \item Item C
    \item Item D
  \end{enumerate}
\end{enumerate}

\end{document}

...看起来像这样:

列表间距

阅读enumitem软件包文档查看所有可以使用的不同设置。

答案3

如果希望文本行互相接触,请使用以下命令:

\documentclass{article}
\usepackage{enumitem}
\setenumerate{nolistsep} % kills all vertical spacing
\begin{document}

\begingroup
\offinterlineskip % It's ugly, don't use it unless necessary
\begin{enumerate}
  \item List 1
  \begin{enumerate}[label=\Alph*.]
    \item Item A
    \item Item B
    \item Item C
    \item Item D
  \end{enumerate}
\end{enumerate}
\endgroup

\end{document}

在此处输入图片描述

如果这不是您想要的,您可能需要删除\offinterlineskip以及\begingroup\endgroup

您可以增加\lineskip参数来\offinterlineskip设置线框之间的空间。例如

\offinterlineskip
\setlength{\lineskip}{1pt}

有关详细信息,请参阅我的回答你之前的问题。

相关内容