我如何才能微调并减少列表项和嵌套列表的垂直间距,以便上下行的字符几乎互相接触?
例子:
更新 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
包裹以便调整列表中的项目间距(或enumerate
)itemize
。以下示例突出显示了您要寻找的一些间距需求:
\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}
有关详细信息,请参阅我的回答你之前的问题。